From 2c2265ea8d63d3554c97ab6d7a59b5a4f028aed5 Mon Sep 17 00:00:00 2001 From: Vincent Giersch Date: Tue, 7 Apr 2026 23:13:32 +0200 Subject: [PATCH 1/2] feat(api): API specification v2.22.0 * Score Import & Export - 15+ import formats documented, new `.flat` export: * `POST /scores`: Expanded the list of supported import formats with detailed documentation. **MusicXML** and **MIDI** are the preferred formats; also supported via conversion: Guitar Pro, MuseScore, ABC notation, PowerTab, Capella, MEI, Overture, TablEdit, Band-in-a-Box, Karaoke MIDI, MuseData, Score Writer, Bagpipe Music Writer, and Encore. * `GET /scores/{score}/revisions/{revision}/{format}`: Added `flat` export format for native Flat compressed files (`.flat`). * `ScoreDetails`: Added `me` property with information about the authenticated user's relationship to the score. * Collections - Simplified library navigation with virtual collections replacing the legacy folder hierarchy ([blog: Library Design Revamp](https://blog.flat.io/library-design-revamp-elevating-your-music-composition-experience/)): * New virtual collections: `allScores`, `collaborations`, and `likes` replace the deprecated `root` and `sharedWithMe` collection types. * `GET /collections` (`listCollections`): New default `parent=user` returns all user collections including virtual ones. Added `modificationDate` sort option. * `Collection`: Added `isPinned`, `labelKey`, and `modificationDate` properties. * `POST /collections/{collection}/untrash`: **Deprecated.** Collections untrashing is no longer supported. * Updated collection parameter descriptions across all endpoints to document the new virtual collections and deprecate `root`/`sharedWithMe`. * Flat for Education: * Assignments & Rubrics - Rubric grading, video/audio performance recordings, and group submissions ([blog: Performance Assignments upgrade](https://blog.flat.io/performance-assignments-just-got-an-upgrade-more-tools-flexibility/), [Grading Composition Assignments](https://blog.flat.io/how-to-grade-music-composition-assignments-without-losing-your-weekends/)): * Performance assignments: Added `recordingType` (`audio`/`video`), `allowBackingTrack`, `allowMetronome`, and `allowSpeedChange` options. * Group submissions: Added `submissionStudentsMode` (`single`/`group`) for shared writing assignments, with `assignedGroups` on `ClassAssignment`. See [blog: Introducing Shared Writing](https://blog.flat.io/collaborative-composition-flat-for-education-music-education/). * Rich text: Added `descriptionHtml` and `teacherInstructionsHtml` on assignments, `sharingDescriptionHtml` on education resources. * `ClassAttachmentCreation`: Added `partUuid`, `revision`, and `teacherOnly` properties. * Student Groups - Manage student sub-groups for shared writing and group submissions ([blog: Back to School updates](https://blog.flat.io/back-to-school-flat-for-education-updates/)): * New CRUD endpoints for student sub-groups: `GET /groups` (`listGroups`), `POST /groups` (`createGroup`), `PUT /groups/{group}` (`renameGroup`), `DELETE /groups/{group}` (`deleteGroup`). * New membership endpoints: `POST /groups/{group}/users` (`addGroupUser`), `DELETE /groups/{group}/users/{user}` (`removeGroupUser`). * Groups can be filtered by classroom or assignment, and support test student tagging (`edu:testing-students`). * New group types: `classStudentsSubGroup` and `assignmentStudentsSubGroup`. * LTI Configuration - Unified LTI 1.1 and 1.3 configuration management, replacing the previous credentials-only API ([blog: LTI 1.3 Integration](https://blog.flat.io/flat-for-education-upgrades-to-lti-1-3-for-canvas-schoology-moodle-and-blackboard/)): * New CRUD endpoints under `/organizations/lti/configurations`. * Supports LTI 1.1 manual, LTI 1.3 manual, LTI 1.3 dynamic registration, and LTI 1.3 deployment-based configurations. * Added `enableEmailMatching` option to control email-based user matching during LTI authentication. * Previous LTI 1.1 credentials endpoints (`/organizations/lti/credentials`) are now **deprecated**. LTI 1.1 configurations can now be managed through the new unified endpoints. * Score Tracks: * `GET /scores/{score}/tracks` (`listScoreTracks`): Added documentation for access control on performance submission tracks (student vs. teacher visibility). * Organization & Users - Test account management, email verification, and improved class metadata: * `GET /organizations/users` and `GET /organizations/users/count`: Added `testAccounts` filter to include/exclude test student accounts. * `UserDetailsAdmin`: Added `isEduTestingStudent` property. * `UserDetails`: Added `isEmailVerified` property. * `OrganizationInvitation`: Added `htmlUrl` with a direct join URL. * `ClassDetails`: Added `modificationDate`, and now requires `creationDate`, `name`, `state`. Updated `lti` property to cover LTI 1.1 and 1.3 context with `hasNrpsService`. * Resource Library - Rich text descriptions and assignment type selection on resource creation: * `EduResource` and `EduResourceCreation`: Added `sharingDescriptionHtml` for rich text sharing descriptions. * `EduResourceCreation`: Added `resource` property for assignment-specific creation options (e.g., assignment type). * `EduLibrary`: Renamed library type from `flatEduSamples` to `flatEduContent`. * Microsoft Teams Integration - Scheduled assignments and individual student targeting: * `MicrosoftGraphAssignment`: Added `assignDateTime` for scheduled assignments, `assignToType` (`class`/`individual`) and `assignedStudentsMsIds` for individual assignment targeting. Expanded `state` enum with `scheduled` and `inactive` statuses. * Accounts & Profiles: * `UserPublic`: Added `allPublicScoresCount` property. Removed deprecated `instruments` property. * `UserCreation`: Locale is now a free-form string (auto-normalized) instead of a strict enum. * Improved `TutteoProduct` descriptions with links to each product. * Statistics: * Added `yearly` counts to `ScoreCommentsCounts`, `ScoreLikesCounts`, `ScorePlaysCounts`, and `ScoreViewsCounts`. * Deprecations & Removals: * **Removed** `Task` tag section from the specification. The `GET /tasks/{task}` endpoint remains available under the Score section. * **Removed** `FlatLocales` enum schema, replaced by `FlatLocalesString` with auto-normalization. * **Removed** unused `billing` role from `OrganizationRoles`. * **Deprecated** `POST /collections/{collection}/untrash` (`untrashCollection`). * **Deprecated** LTI credentials endpoints in favor of the new unified configuration API. * **Deprecated** `root` and `sharedWithMe` collection parent aliases (use `user` instead). * **Deprecated** `staffIdx` on `ScoreCommentContext`. --- spec/openapi-flatten.yaml | 13237 ++++++++++++++++++++---------------- spec/openapi.yaml | 12231 ++++++++++++++++++--------------- 2 files changed, 14411 insertions(+), 11057 deletions(-) diff --git a/spec/openapi-flatten.yaml b/spec/openapi-flatten.yaml index 81e4974..3260541 100644 --- a/spec/openapi-flatten.yaml +++ b/spec/openapi-flatten.yaml @@ -1,17 +1,14 @@ -# An OpenAPI 3 definition of the Flat API +# Flat API - Public OpenAPI Specification # -# This is used for generating API documentation and the types used by the API clients. +# https://flat.io/developers/docs/api/ # -# Some style notes: -# - This file is used by ReDoc, which allows GitHub Flavored Markdown in descriptions. -# - There is no maximum line length, for ease of editing and pretty diffs. openapi: 3.0.3 info: title: Flat API description: | The Flat API allows you to easily extend the abilities of the [Flat Platform](https://flat.io), with a wide range of use cases including the following: - * Creating and importing new music scores using MusicXML, MIDI, Guitar Pro (GP3, GP4, GP5, GPX, GP), PowerTab, TuxGuitar and MuseScore files + * Creating and importing new music scores using MusicXML, MIDI, Guitar Pro, MuseScore, ABC notation, and many other formats * Browsing, updating, copying, exporting the user's scores (for example in MP3, WAV or MIDI) * Managing educational resources with Flat for Education: creating & updating the organization accounts, the classes, rosters and assignments. @@ -33,7 +30,7 @@ info: name: Flat url: https://flat.io/developers/docs/api/ email: developers@flat.io - version: 2.21.0 + version: 2.22.0 x-logo: url: https://prod.flat-cdn.com/img/logo-flat.svg servers: @@ -60,7 +57,7 @@ tags: description: | Collections let you organize your content in a Flat account. They work like a regular _folder_ with some specificities: - Our design goal here is to create a system similar to a _book_ or a _playlist of songs_. - - Collections can't have children collections (except the `trash` and `sharedWithMe` that are special collections). + - Collections can't have children collections (except the `trash` that is a special collection). - Any score can be added to one or multiple collections. For example, you can have a single private score in two or more collections, or add any public or shared scores to one of your collections. All the collections don't have the same capabilities. Capabilities depend on the `type` of collection and the `rights` you have on a collection. They are available when [listing the collection](#operation/listCollections) or [retrieving the collection details](#operation/getCollection). @@ -80,39 +77,39 @@ tags: x-displayName: Flat for Education Classes description: Flat for Education Classes - name: EduResources - x-displayName: Flat for Education Resources [Beta] + x-displayName: Flat for Education Resources description: | Resource libraries in Flat for Education. - These API endpoints are in beta and may include breaking changes over the upcoming months. - name: Group x-displayName: Flat for Education Groups description: Flat for Education Groups -- name: Task - x-displayName: Asynchronous tasks - description: Scheduled and asynchronous tasks paths: - /me: + /classes: get: tags: - - Account - summary: Get current user account - description: | - Get details about the current authenticated User. - operationId: getAuthenticatedUser + - Class + summary: List the classes available for the current user + operationId: listClasses parameters: - - name: onlyId + - name: state in: query - description: Only return the user id + description: Filter the classes by state schema: - type: boolean - default: false + type: string + default: active + enum: + - active + - inactive + - archived responses: '200': - description: Current user details + description: The list of classes content: application/json: schema: - $ref: '#/components/schemas/UserDetails' + type: array + items: + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -121,81 +118,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - account.public_profile - - account.education_profile - x-codeSamples: - - lang: Python - source: | - from pprint import pprint - import os - - import flat_api - from flat_api.rest import ApiException - - configuration = flat_api.Configuration() - configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] - flat_api_client = flat_api.ApiClient(configuration) - try: - pprint(flat_api.AccountApi(flat_api_client).get_authenticated_user()) - except ApiException as e: - print(e) - - lang: PHP - source: | - setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); - - $api = new Flat\APIClient\Api\AccountApi(); - - try { - $result = $api->getAuthenticatedUser(); - print_r($result); - } catch (Exception $e) { - echo 'Exception when calling AccountApi->getAuthenticatedUser: ', $e->getMessage(), PHP_EOL; - } - /scores: + - edu.classes + - edu.classes.readonly post: tags: - - Score - summary: Create a new score + - Class + summary: Create a new class description: | - Use this API method to **create a new music score in the current User account**. This API endpoints provides 3 ways to create scores: - - * `ScoreCreationBuilderData` : Create a blank score by providing the list of instruments to use. You can optionally customize the initial key signature, time signature, enable TABs, Chord grids, as well as the page layout. - * `ScoreCreationFileImport`: Import an existing MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`), Guitar Pro (GP3, GP4, GP5, GPX, GP), PowerTab, TuxGuitar, or MuseScore file to create the new Flat document. - * `ScoreCreationGoogleDriveImport`: Import an existing Google Drive file from the connected Google Drive account. - - This API call will automatically create the first revision of the document, the score can be modified by the using our web application or by uploading a new revision of this file (`POST /v2/scores/{score}/revisions/{revision}`). - - The currently authenticated user will be granted owner of the file and will be able to add other collaborators (users and groups). + Classrooms on Flat allow you to create activities with assignments and post content to a specific group. - If no `collection` is specified, the API will create the score in the most appropriate collection. When using an OAuth2 access token or a personal token, the score will be automatically added to your dedicated app collection in the account (`/v2/collections/app`). + When creating a class, Flat automatically creates two groups: one for the teachers of the course, one for the students. The creator of this class is automatically added to the teachers group. - If a `collection` is specified and this one has more public privacy settings than the score (e.g. `public` vs `private` for the score), the privacy settings of the created score will be adjusted to the collection ones. + If the classsroom is synchronized with another application like Google Classroom, some of the meta information will automatically be updated. - You can check the adjusted privacy settings in the returned score `privacy`, and optionally adjust these settings if needed using `PUT /scores/{score}`. - operationId: createScore + You can add users to this class using `PUT /classes/{class}/users/{user}`, they will automatically added to the group based on their role on Flat. Users can also enroll themselves to this class using `POST /classes/enroll/{enrollmentCode}` and the `enrollmentCode` returned in the `ClassDetails` response. + operationId: createClass requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreCreation' + $ref: '#/components/schemas/ClassCreation' required: true responses: '200': - description: Score created - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '400': - description: Bad score creation request + description: The new class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassDetails' '402': description: Account overquota content: @@ -210,127 +160,23 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores + - edu.classes x-codegen-request-body-name: body - x-codeSamples: - - lang: Ruby - source: | - require 'flat_api' - FlatApi.configure do |config| - config.access_token = 'your_access_token' - end - begin - score_data = File.open("my-score.musicxml", "r:UTF-8") { |f| f.read } - body = FlatApi::ScoreCreationFileImport.new({ - title: 'Score Title', - data: score_data, - }) - p FlatApi::ScoreApi.new.create_score(body) - rescue FlatApi::ApiError => e - puts "Error when calling ScoreApi->create_score: #{e}" - end - - lang: Python - source: | - from pprint import pprint - import os - from urllib.request import urlopen - from urllib.error import HTTPError - - import flat_api - from flat_api.rest import ApiException - - SCORE_TO_IMPORT='https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml' - - configuration = flat_api.Configuration() - configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] - flat_api_client = flat_api.ApiClient(configuration) - - try: - # Download a MusicXML "Hello World" - hello_world = urlopen(SCORE_TO_IMPORT).read().decode('utf-8') - - # The new score meta, including the MusicXML file as `data` - new_score = flat_api.ScoreCreation( - title='Hello World', - privacy='private', - data=hello_world - ) - - # Create the document and print the meta returned by the API - pprint(flat_api.ScoreApi(flat_api_client).create_score(new_score)) - except (ApiException, HTTPError) as e: - print(e) - - lang: PHP - source: | - setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); - - $musicXml = file_get_contents('https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml'); - - try { - $body = new \Flat\APIClient\Model\ScoreCreation(); - $body->setTitle('Hello world'); - $body->setPrivacy('private'); - $body->setData($musicXml); - - $scoreApi = new Flat\APIClient\Api\ScoreApi(); - $result = $scoreApi->createScore($body); - print_r($result); - } catch (Exception $e) { - echo 'Exception when calling ScoreApi->createScore: ', $e->getMessage(), PHP_EOL; - } - /scores/{score}: + /classes/{class}: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string + - $ref: '#/components/parameters/class' get: tags: - - Score - summary: Get a score's metadata - description: | - Get the details of a score identified by the `score` parameter in the URL. - The currently authenticated user must have at least a read access to the document to use this API call. - operationId: getScore - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - Class + summary: Get the details of a single class + operationId: getClass responses: '200': - description: Score details - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '402': - description: Account overquota and this document is out of the granted quota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + description: The new class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -339,51 +185,56 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly + - edu.classes + - edu.classes.readonly put: tags: - - Score - summary: Edit a score's metadata + - Class + summary: Update the class description: | - This API method allows you to change the metadata of a score document (e.g. its `title` or `privacy`), all the properties are optional. - - To edit the file itself, create a new revision using the appropriate method (`POST /v2/scores/{score}/revisions/{revision}`). - - When editing the `title`, `subtitle`, `composer`, `lyricist`, `arranger` or `licenseText`, the metadatas will be instantly be updated, and a real-time action will be pushed to update the document lazily. - This pending document modification will be automatically be saved as a new version by either a connected client or our internal versioning service. - operationId: editScore + Update the meta information of the class + operationId: updateClass requestBody: + description: Details of the Class content: application/json: schema: - $ref: '#/components/schemas/ScoreModification' + $ref: '#/components/schemas/ClassUpdate' required: true responses: '200': - description: Score details - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '402': - description: Account overquota + description: The new class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/ClassDetails' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found - content: - application/json: + security: + - OAuth2: + - edu.classes + x-codegen-request-body-name: body + /classes/{class}/archive: + parameters: + - $ref: '#/components/parameters/class' + post: + tags: + - Class + summary: Archive the class + description: | + Mark the class as `archived`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. + operationId: archiveClass + responses: + '200': + description: The class details + content: + application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -392,41 +243,47 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - x-codegen-request-body-name: body + - edu.classes delete: tags: - - Score - summary: Delete a score + - Class + summary: Unarchive the class description: | - This method can be used by anyone that has at least read access to the document: - - - When called by an owner/admin, it will schedule the deletion of the score, its revisions, and complete history. The score won't be accessible anymore after calling this method and the user's quota will directly be updated. - - When called by a collaborator, the score will be unshared (i.e. removed from the account & own collections). - - When called by another user that has the score in its collections, the score will be removed from all the user collections. - operationId: deleteScore - parameters: - - name: now - in: query - description: If `true`, the score deletion will be scheduled to be done ASAP - schema: - type: boolean - default: false + Mark the class as `active`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. + operationId: unarchiveClass responses: - '204': - description: The score has been removed - '403': - description: Not granted to manage this score + '200': + description: The class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + $ref: '#/components/schemas/ClassDetails' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + /classes/{class}/activate: + parameters: + - $ref: '#/components/parameters/class' + post: + tags: + - Class + summary: Activate the class + description: | + Mark the class as `active`. This is mainly used for classes synchronized from Clever that are initially with an `inactive` state and hidden in the UI. + operationId: activateClass + responses: + '200': + description: The class details + content: + application/json: + schema: + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -435,38 +292,51 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - /scores/{score}/untrash: + - edu.classes + /classes/{class}/users/{user}: parameters: - - name: score + - $ref: '#/components/parameters/class' + - name: user in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + description: Unique identifier of the user required: true schema: type: string - post: + put: tags: - - Score - summary: Untrash a score + - Class + summary: Add a user to the class description: | - This method will remove the score from the `trash` collection and from the deletion queue, and add it back to the original collections. - operationId: untrashScore + This method can be used by a teacher of the class to enroll another Flat user into the class. + + Only users that are part of your Organization can be enrolled in a class of this same Organization. + + When enrolling a user in the class, Flat will automatically add this user to the corresponding Class group, based on this role in the Organization. + operationId: addClassUser responses: '204': - description: The score has been untrashed - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + description: The user has been added to the class + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + delete: + tags: + - Class + summary: Remove a user from the class + description: | + This method can be used by a teacher to remove a user from the class, or by a student to leave the classroom. + + Warning: Removing a user from the class will remove the associated resources, including the submissions and feedback related to these submissions. + operationId: deleteClassUser + responses: + '204': + description: The user has been removed from the class default: description: Error content: @@ -475,27 +345,26 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - /scores/{score}/submissions: + - edu.classes + /classes/{class}/students/{user}/submissions: parameters: - - name: score + - $ref: '#/components/parameters/class' + - name: user in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + description: Unique identifier of the user required: true schema: type: string get: tags: - - Score - Class - summary: List submissions related to the score + summary: List the submissions for a student description: | - This API call will list the different assignments submissions where the score is attached. This method can be used by anyone that are part of the organization and have at least read access to the document. - operationId: getScoreSubmissions + Use this method as a teacher to list all the assignment submissions sent by a student of the class + operationId: listClassStudentSubmissions responses: '200': - description: List of submissions + description: The list of submissions content: application/json: schema: @@ -510,64 +379,101 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - /scores/{score}/fork: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + /classes/{class}/assignments: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string + - $ref: '#/components/parameters/class' + get: + tags: + - Class + summary: Assignments listing + operationId: listAssignments + parameters: [] + responses: + '200': + description: List of assignments for the class + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ClassAssignment' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly post: tags: - - Score - summary: Fork a score + - Class + summary: Assignment creation description: | - This API call will make a copy of the last revision of the specified score and create a new score. The copy of the score will have a privacy set to `private`. + Use this method as a teacher to create and post a new assignment to a class. - When using a [Flat for Education](https://flat.io/edu) account, the inline and contextualized comments will be accessible in the child document. - operationId: forkScore - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + If the class is synchronized with Google Classroom, the assignment will be automatically posted to your Classroom course. + operationId: createClassAssignment requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreFork' + $ref: '#/components/schemas/ClassAssignmentUpdate' required: true responses: '200': - description: Score details - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '402': - description: Account overquota + description: The assignment has been created content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/Assignment' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + security: + - OAuth2: + - edu.classes + - edu.assignments + x-codegen-request-body-name: body + /classes/{class}/assignments/{assignment}/copy: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + post: + tags: + - Class + summary: Copy an assignment + description: | + Copy an assignment to a specified class or the resource library + + For class assignments: + - If the original assignment has a due date in the past, this new assignment will be created without a due date. + - If the class is synchronized with an external app (e.g. Google Classroom), the copied assignment will also be posted on the external app. + operationId: copyAssignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentCopy' + required: true + responses: + '200': + description: The new created assignment content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentCopyResponse' default: description: Error content: @@ -576,60 +482,79 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores + - edu.classes + - edu.assignments x-codegen-request-body-name: body - /scores/{score}/collaborators: + /classes/{class}/assignments/{assignment}/archive: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - get: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + post: tags: - - Score - summary: List the collaborators + - Class + summary: Archive the assignment description: | - This API call will list the different collaborators of a score and their rights on the document. The returned list will at least contain the owner of the document. - - Collaborators can be a single user (the object `user` will be populated) or a group (the object `group` will be populated). - operationId: getScoreCollaborators - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + Archive the assignment + operationId: archiveAssignment responses: '200': - description: List of collaborators + description: The assignment details content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/ResourceCollaborator' - '402': - description: Account overquota + $ref: '#/components/schemas/Assignment' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + security: + - OAuth2: + - edu.classes + - edu.assignments + delete: + tags: + - Class + summary: Unarchive the assignment. + description: | + Mark the assignment as `active`. + operationId: unarchiveAssignment + responses: + '200': + description: The assignment details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + $ref: '#/components/schemas/Assignment' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + - edu.assignments + /classes/{class}/assignments/{assignment}/submissions: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + get: + tags: + - Class + summary: List the students' submissions + operationId: getSubmissions + responses: + '200': + description: The submissions + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -638,50 +563,32 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.readonly - - scores - post: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + put: tags: - - Score - summary: Add a new collaborator + - Class + summary: Create or edit a submission description: | - Share a score with a single user or a group. This API call allows to add, invite and update the collaborators of a resource. - - To add an existing Flat user to the resource, specify its unique identifier in the `user` property. - - To invite an external user to the resource, specify its email in the `userEmail` property. - - To add a Flat group to the resource, specify its unique identifier in the `group` property. - - To update an existing collaborator, process the same request with different rights. - operationId: addScoreCollaborator + Use this method as a student to create, update and submit a submission related to an assignment. + Students can only set `attachments` and `submit`. + Teachers can use `PUT /classes/{class}/assignments/{assignment}/submissions/{submission}` to update a submission by id. + operationId: createSubmission requestBody: content: application/json: schema: - $ref: '#/components/schemas/ResourceCollaboratorCreation' + $ref: '#/components/schemas/AssignmentSubmissionUpdate' required: true responses: '200': - description: The newly added collaborator metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ResourceCollaborator' - '402': - description: Account overquota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + description: The submission content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -690,94 +597,86 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores + - edu.classes + - edu.assignments x-codegen-request-body-name: body - /scores/{score}/collaborators/{collaborator}: + /classes/{class}/assignments/{assignment}/submissions/csv: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: collaborator - in: path - description: | - Unique identifier of a **collaborator permission**, or unique identifier of a **User**, or unique identifier of a **Group** - required: true - schema: - type: string + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' get: tags: - - Score - summary: Get a collaborator - description: | - Get the information about a collaborator (User or Group). - operationId: getScoreCollaborator - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - Class + summary: CSV Grades exports + description: Export list of submissions grades to a CSV file + operationId: exportSubmissionsReviewsAsCsv responses: '200': - description: Collaborator information - content: - application/json: - schema: - $ref: '#/components/schemas/ResourceCollaborator' - '402': - description: Account overquota + description: List of submissions content: - application/json: + text/csv: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + type: string + format: binary + default: + description: Error content: - application/json: + text/csv: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or collaborator not found + security: + - OAuth2: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + /classes/{class}/assignments/{assignment}/submissions/excel: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + get: + tags: + - Class + summary: Excel Grades exports + description: Export list of submissions grades to an Excel file + operationId: exportSubmissionsReviewsAsExcel + responses: + '200': + description: List of submissions content: - application/json: + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: - $ref: '#/components/schemas/FlatErrorResponse' + type: string + format: binary default: description: Error content: - application/json: + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.readonly - delete: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + /classes/{class}/assignments/{assignment}/submissions/{submission}: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + get: tags: - - Score - summary: Delete a collaborator - description: | - Remove the specified collaborator from the score - operationId: removeScoreCollaborator + - Class + summary: Get a student submission + operationId: getSubmission responses: - '204': - description: The collaborator has been removed - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or collaborator not found + '200': + description: A submission content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -786,61 +685,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - /scores/{score}/tracks: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - get: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + put: tags: - - Score - summary: List the audio or video tracks linked to a score - operationId: listScoreTracks - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - - name: assignment - in: query - description: | - An assignment id with which all the tracks returned will be related to - schema: - type: string - - name: listAutoTrack - in: query - description: | - If true, and if available, return last automatically synchronized Flat's mp3 export as an additional track - schema: - type: boolean + - Class + summary: Edit a submission + description: | + Use this method as a teacher to update the different submission and give feedback. + Teachers can only set `return`, `draftGrade` and `grade` + operationId: editSubmission + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentSubmissionUpdate' + required: true responses: '200': - description: List of tracks + description: The submission content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/ScoreTrack' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/AssignmentSubmission' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + security: + - OAuth2: + - edu.classes + - edu.assignments + x-codegen-request-body-name: body + delete: + tags: + - Class + summary: Reset a submission + description: | + Use this method as a teacher to reset a submission and allow student to start over the assignment + operationId: deleteSubmission + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + responses: + '200': + description: The submission object once reset content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -849,37 +747,42 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - post: + - edu.classes + - edu.assignments + x-codegen-request-body-name: body + /classes/{class}/assignments/{assignment}/submissions/{submission}/history: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + get: tags: - - Score - summary: Add a new video or audio track to the score + - Class + operationId: getSubmissionHistory + summary: Get the history of the submission description: | - Use this method to add new track to the score. This track can then be played on flat.io or in an embedded score. - This API method support medias hosted on SoundCloud, YouTube and Vimeo. - operationId: addScoreTrack - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreTrackCreation' - required: true + For teachers only. Returns a detailed history of the submission. This currently includes state and grade histories. + security: + - OAuth2: + - edu.assignments + - edu.assignments.readonly responses: '200': - description: Created track + description: The history of the submission content: application/json: schema: - $ref: '#/components/schemas/ScoreTrack' + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionHistory' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Submission not found content: application/json: schema: @@ -890,53 +793,37 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - scores - x-codegen-request-body-name: body - /scores/{score}/tracks/{track}: + /classes/{class}/assignments/{assignment}/submissions/{submission}/comments: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: track - in: path - description: | - Unique identifier of a score audio track - required: true - schema: - type: string + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' get: tags: - - Score - summary: Retrieve the details of an audio or video track linked to a score - operationId: getScoreTrack - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - Class + operationId: getSubmissionComments + summary: List the feedback comments of a submission + security: + - OAuth2: + - edu.assignments + - edu.assignments.readonly responses: '200': - description: Track details + description: The comments of the score content: application/json: schema: - $ref: '#/components/schemas/ScoreTrack' + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionComment' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or Track not found + description: Submission not found content: application/json: schema: @@ -947,36 +834,35 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + post: + tags: + - Class + operationId: postSubmissionComment + summary: Add a feedback comment to a submission security: - OAuth2: - - scores - - scores.readonly - put: - tags: - - Score - summary: Update an audio or video track linked to a score - operationId: updateScoreTrack + - edu.assignments requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreTrackUpdate' + $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' required: true responses: '200': - description: Updated track + description: The comment content: application/json: schema: - $ref: '#/components/schemas/ScoreTrack' + $ref: '#/components/schemas/AssignmentSubmissionComment' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or Track not found + description: Submission not found content: application/json: schema: @@ -987,26 +873,41 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + /classes/{class}/assignments/{assignment}/submissions/{submission}/comments/{comment}: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + - $ref: '#/components/parameters/comment' + put: + tags: + - Class + operationId: updateSubmissionComment + summary: Update a feedback comment to a submission security: - OAuth2: - - scores - x-codegen-request-body-name: body - delete: - tags: - - Score - summary: Remove an audio or video track linked to the score - operationId: deleteScoreTrack + - edu.assignments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' + required: true responses: - '204': - description: Track removed + '200': + description: The comment + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentSubmissionComment' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or Track not found + description: Submission not found content: application/json: schema: @@ -1017,46 +918,136 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + delete: + tags: + - Class + operationId: deleteSubmissionComment + summary: Delete a feedback comment to a submission security: - OAuth2: - - scores - /scores/{score}/comments: + - edu.assignments + responses: + '204': + description: The comment has been deleted + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + /classes/{class}/assignments/{assignment}/submissions/{submission}/performanceAssessments: parameters: - - name: score - in: path + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + /classes/{class}/testStudent: + parameters: + - $ref: '#/components/parameters/class' + post: + tags: + - Class + summary: Create a test student account description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + Test students account can be created by teachers an admin and be used to experiment the assignments. + + - They are automatically added to the class. + - They can be reset using this API endpoint (a new account will be created and the previous one scheduled for deletion). + - These accounts don't use a user license. + operationId: createTestStudentAccount + parameters: + - name: reset + in: query + description: | + If true, the testing account will be re-created. + required: false + schema: + type: boolean + responses: + '200': + description: Test account created + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.admin + - edu.classes + /classes/enroll/{enrollmentCode}: + parameters: + - name: enrollmentCode + in: path + description: | + The enrollment code, available to the teacher in `ClassDetails` required: true schema: type: string - - name: sharingKey - in: query + post: + tags: + - Class + summary: Join a class description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + Use this method to join a class using an enrollment code given one of the teacher of this class. This code is also available in the `ClassDetails` returned to the teachers when creating the class or listing / fetching a specific class. + + Flat will automatically add the user to the corresponding class group based on this role in the organization. + operationId: enrollClass + responses: + '200': + description: The new class details + content: + application/json: + schema: + $ref: '#/components/schemas/ClassDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + /collections: get: tags: - - Score - summary: List comments - description: This method lists the different comments added on a music score (documents and inline) sorted by their post dates. - operationId: getScoreComments + - Collection + summary: List the collections + description: | + Use this method to list the user's collections. + If no sort option is provided, the collections are sorted by `creationDate` `desc`. + + By default (`parent=user`), this returns all user account collections with virtual collections on the first page. + + To fetch your app collection details, you can use `GET /v2/collections/app`. + operationId: listCollections parameters: - - name: type + - name: parent in: query - description: Filter the comments by type + description: | + List the collections contained in this `parent` collection. + + When set to `user` (default), returns the user's own collections as well as + collections shared with the user. + + Using `root` or `sharedWithMe` is **deprecated** and will be treated as `user`. schema: type: string - enum: - - document - - inline + default: user - name: sort in: query description: Sort schema: type: string enum: - - date + - creationDate + - modificationDate + - title - name: direction in: query description: Sort direction @@ -1065,29 +1056,69 @@ paths: enum: - asc - desc + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: next + in: query + description: | + An opaque string cursor to fetch the next page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + - name: previous + in: query + description: | + An opaque string cursor to fetch the previous page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string responses: '200': - description: The comments of the score + description: List of collections content: application/json: schema: type: array items: - $ref: '#/components/schemas/ScoreComment' - '402': - description: Account overquota + $ref: '#/components/schemas/Collection' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + security: + - OAuth2: + - collections + - collections.readonly + post: + tags: + - Collection + summary: Create a new collection + description: | + This method will create a new collection in your account. + operationId: createCollection + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionCreation' + required: true + responses: + '200': + description: Collection created content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + $ref: '#/components/schemas/Collection' + '400': + description: Bad collection creation request content: application/json: schema: @@ -1100,45 +1131,54 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.readonly - - scores.social - - scores - post: - tags: - - Score - summary: Post a new comment + - collections + x-codegen-request-body-name: body + /collections/{collection}: + parameters: + - name: collection + in: path description: | - Post a document or a contextualized comment on a document. + Unique identifier of the collection. - Please note that this method includes an anti-spam system for public scores. We don't guarantee that your comments will be accepted and displayed to end-user. Comments are be blocked by returning a `403` HTTP error and hidden from other users when the `spam` property is `true`. - operationId: postScoreComment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreCommentCreation' - required: true + The following collection aliases are supported: + - `root`: **Deprecated.** The root collection of the account + - `app`: Alias for the current app collection + - `trash`: Automatically contains resources that have been deleted + + The following virtual collections are supported: + - `allScores`: All the scores contained in the user account + - `collaborations`: All shared scores by the user or someone else + - `likes`: Liked scores + required: true + schema: + type: string + get: + tags: + - Collection + summary: Get collection details + operationId: getCollection + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The new comment - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreComment' - '402': - description: Account overquota + description: Collection details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/Collection' '403': - description: Not granted to access to this score, to post a comment, or your API call triggered our spam filter. + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection not found content: application/json: schema: @@ -1151,63 +1191,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - x-codegen-request-body-name: body - /scores/{score}/comments/{comment}: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: comment - in: path - description: | - Unique identifier of a sheet music comment - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - collections + - collections.readonly put: tags: - - Score - summary: Update an existing comment - operationId: updateScoreComment + - Collection + summary: Update a collection's metadata + operationId: editCollection requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreCommentUpdate' + $ref: '#/components/schemas/CollectionModification' required: true responses: '200': - description: The edited comment - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreComment' - '402': - description: Account overquota + description: Collection details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/Collection' '403': - description: Not granted to access to this score or not the original comment creator + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection not found content: application/json: schema: @@ -1220,25 +1231,27 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores + - collections x-codegen-request-body-name: body delete: tags: - - Score - summary: Delete a comment - operationId: deleteScoreComment + - Collection + summary: Delete the collection + description: | + This method will schedule the deletion of the collection. Until deleted, the collection will be available in the `trash`. + operationId: deleteCollection + parameters: [] responses: '204': - description: The comment has been deleted + description: Collection deleted '403': - description: Not granted to access to this score or not the original comment creator + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or comment not found + description: Collection not found content: application/json: schema: @@ -1251,46 +1264,26 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - /scores/{score}/comments/{comment}/resolved: + - collections + /collections/{collection}/untrash: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: comment + - name: collection in: path - description: | - Unique identifier of a sheet music comment + description: Unique identifier of the collection. required: true schema: type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - put: + post: tags: - - Score - summary: Mark the comment as resolved - operationId: markScoreCommentResolved + - Collection + summary: Untrash a collection + deprecated: true + description: | + **DEPRECATED** This method will restore the collection by removing it from the `trash` and add it back to the `root` collection. + operationId: untrashCollection responses: - '204': - description: The comment has been marked as resolved - '403': - description: Not granted to mark this comment as resolved - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or comment not found + '400': + description: Bad request - Operation no longer supported content: application/json: schema: @@ -1303,35 +1296,91 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - delete: + - collections + /collections/{collection}/scores: + parameters: + - name: collection + in: path + description: | + Unique identifier of the collection. + + The following collection aliases are supported: + - `root`: **Deprecated.** The root collection of the account + - `app`: Alias for the current app collection + - `trash`: Automatically contains resources that have been deleted + + The following virtual collections are supported: + - `allScores`: All the scores contained in the user account + - `collaborations`: All shared scores by the user or someone else + - `likes`: Liked scores + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + get: tags: - - Score - summary: Mark the comment as unresolved - operationId: markScoreCommentUnresolved + - Collection + summary: List the scores contained in a collection + description: | + Use this method to list the scores contained in a collection. + If no sort option is provided, the scores are sorted by `modificationDate` `desc`. + + For example, to list the scores contained in your app collection, you can use `GET /v2/collections/app/scores`. + operationId: listCollectionScores parameters: - - name: sharingKey + - name: sort + in: query + description: Sort + schema: + type: string + enum: + - creationDate + - modificationDate + - title + - name: direction + in: query + description: Sort direction + schema: + type: string + enum: + - asc + - desc + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: next in: query description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + An opaque string cursor to fetch the next page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + - name: previous + in: query + description: | + An opaque string cursor to fetch the previous page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. schema: type: string responses: - '204': - description: The comment has been unmarked as resolved - '403': - description: Not granted to unmark this comment as resolved - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or comment not found + '200': + description: List of scores content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + type: array + items: + $ref: '#/components/schemas/ScoreDetails' default: description: Error content: @@ -1340,10 +1389,21 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - /scores/{score}/revisions: + - collections + /collections/{collection}/scores/{score}: parameters: + - name: collection + in: path + description: | + Unique identifier of the collection. + + The following collection aliases are supported: + - `root`: **Deprecated.** The root collection of the account + - `app`: Alias for the current app collection + - `trash`: Automatically contains resources that have been deleted + required: true + schema: + type: string - name: score in: path description: | @@ -1351,45 +1411,35 @@ paths: required: true schema: type: string - get: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + put: tags: - - Score - summary: List the revisions + - Collection + summary: Add a score to the collection description: | - When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to list all of them, sorted by last modification. - - Depending the plan of the account, this list can be trunked to the few last revisions. - operationId: getScoreRevisions - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + This operation will add a score to a collection. The default behavior will make the score available across multiple collections. + You must have the capability `canAddScores` on the provided `collection` to perform the action. + operationId: addScoreToCollection responses: '200': - description: List of revisions - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/ScoreRevision' - '402': - description: Account overquota + description: Score details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ScoreDetails' '403': - description: Not granted to access to this score + description: Not granted to access to this collection or score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection or score not found content: application/json: schema: @@ -1402,42 +1452,32 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - post: - tags: - - Score - summary: Create a new revision - description: | - Update a score by uploading a new revision for this one. - operationId: createScoreRevision + - collections + - collections.add_scores requestBody: content: - application/json: + application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ScoreRevisionCreation' - required: true + type: object + delete: + tags: + - Collection + summary: Delete a score from the collection + description: | + This method will delete a score from the collection. Unlike [`DELETE /scores/{score}`](#operation/deleteScore), this score will not remove the score from your account, but only from the collection. + This can be used to *move* a score from one collection to another, or simply remove a score from one collection when this one is contained in multiple collections. + operationId: deleteScoreFromCollection responses: - '200': - description: The new created revision metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreRevision' - '402': - description: Account overquota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' + '204': + description: Score removed from the collection '403': - description: Not granted to modify this score + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection not found content: application/json: schema: @@ -1450,188 +1490,163 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - x-codegen-request-body-name: body - /scores/{score}/revisions/{revision}: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: revision - in: path - description: | - Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - get: - tags: - - Score - summary: Get a score revision - description: | - When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to get a specific - revision metadata. - operationId: getScoreRevision - responses: - '200': - description: Revision metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreRevision' - '402': - description: Account overquota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - scores - - scores.readonly - /scores/{score}/revisions/{revision}/{format}: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: revision - in: path - description: | - Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. - required: true - schema: - type: string - - name: format - in: path - description: The format of the file you will retrieve - required: true - schema: - type: string - enum: - - json - - mxl - - xml - - mp3 - - wav - - midi - - thumbnail.png - - synchronizationPoints + - collections + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + parameters: + - $ref: '#/components/parameters/eventProperties' + /eduResources: get: tags: - - Score - summary: Get a score revision data - description: | - Retrieve the file corresponding to a score revision (the following formats are available): Flat JSON/Adagio JSON `json`, MusicXML - `mxl`/`xml`, MP3 `mp3`, WAV `wav`, MIDI `midi`, a tumbnail of the first page `thumbnail.png` or auto sync points `synchronizationPoints`. - operationId: getScoreRevisionData + - EduResources + operationId: listEduResources + summary: List education resources in a library or folder parameters: - - name: sharingKey + - name: parent in: query description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + List the resources contained in this `parent` library or folder schema: type: string - - name: parts + default: root + - name: withoutSubfoldersResources in: query description: | - An optional a set of parts uuid to be exported. This parameter must be composed of parts uuids - separated by commas. For example "59df645f-bb1c-f1b4-b573-d2afc4491f94,34ef645f-1aef-f3bc-1564-34cca4492b87". + For the `parent` = `organization`, do not include resources from subfolders. + By default in the Resource Library UI, we include resources from subfolders, but for example in a picker like LTI, we don't want to include them. + schema: + type: boolean + - name: type + in: query + description: | + Filter the returned resources by type schema: type: string - - name: defaultTrack + enum: + - assignment + - folder + - name: subjects in: query description: | - When `format` is `mp3`, this property is set to true and the score has a default `ScoreTrack` (mp3), this one will be returned instead of the playback file. + Filter the returned resources by subjects schema: - type: boolean - - name: url + type: array + items: + $ref: '#/components/schemas/TeachingTheme' + - name: assignmentTypes in: query description: | - Returns a json with the `url` in it instead of redirecting + Filter the returned resources by assignment types schema: - type: boolean + type: array + items: + $ref: '#/components/schemas/AssignmentType' + - name: grades + in: query + description: | + Filter the returned resources by grades + schema: + type: array + items: + $ref: '#/components/schemas/Grade' + - name: sort + in: query + description: Sort + schema: + type: string + enum: + - creationDate + - updateDate + - title + default: creationDate + - $ref: '#/components/parameters/sortDirection' + - name: limit + in: query + description: This is the maximum number of resources that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - $ref: '#/components/parameters/next' + - $ref: '#/components/parameters/previous' responses: '200': - description: Revision data + description: List of resources content: application/json: schema: - type: string - format: binary - application/vnd.recordare.musicxml+xml: - schema: - type: string - format: binary - application/vnd.recordare.musicxml: - schema: - type: string - format: binary - audio/mp3: - schema: - type: string - format: binary - audio/wav: - schema: - type: string - format: binary - audio/midi: + type: array + items: + $ref: '#/components/schemas/EduResource' + headers: + X-Total-Assignments-Count: + description: Total number of assignments schema: - type: string - format: binary - image/png: + type: integer + X-Total-Folders-Count: + description: Total number of folders schema: - type: string - format: binary - '402': - description: Account overquota + type: integer + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + security: + - OAuth2: + - edu.resources + - edu.resources.readonly + - edu.assignments + - edu.assignments.readonly + post: + tags: + - EduResources + operationId: createEduResource + summary: Create a new education resource + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EduResourceCreation' + required: true + responses: + '200': + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or associated file not found + $ref: '#/components/schemas/EduResource' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.resources + - edu.assignments + /eduResources/libraries: + get: + tags: + - EduResources + operationId: listEduLibraries + summary: List the education libraries + responses: + '200': + description: Fetched resource + content: + application/json: + schema: + type: array + description: List of libraries to display + items: + $ref: '#/components/schemas/EduLibrary' default: description: Error content: @@ -1640,79 +1655,65 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - /scores/{score}/revisions/{revision}/{format}/task: - post: + - edu.resources + - edu.resources.readonly + - edu.assignments + - edu.assignments.readonly + /eduResources/{resource}: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + get: tags: - - Score - summary: Create a new score export task - description: | - Some of the exports of a score takes are longer to process than a simple API requests. - Use this endpoint to launch a new export of one score hosted on Flat. - operationId: createExportTask - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: revision - in: path - description: | - Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. - required: true - schema: - type: string - - name: format - in: path - description: The format of the file that will be generated or the target service name where the file will be exported - required: true - schema: - type: string - enum: - - mp3 - - wav - - practicefirst - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/TaskExportOptions' - required: false + - EduResources + operationId: getEduResource + summary: Get an education resource + parameters: [] responses: '200': - description: Task associated to the generation of the file - content: - application/json: - schema: - $ref: '#/components/schemas/Task' - '402': - description: Account overquota + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/EduResource' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or associated file not found + security: + - OAuth2: + - edu.resources + - edu.resources.readonly + - edu.assignments + - edu.assignments.readonly + put: + tags: + - EduResources + operationId: updateEduResource + summary: Update an education resource metadata + description: | + Update any resources metadata (e.g. title). + + Use this method to rename education resources folders or assignments. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EduResourceUpdate' + required: true + responses: + '200': + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/EduResource' default: description: Error content: @@ -1721,81 +1722,16 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - x-codegen-request-body-name: body - /collections: - get: + - edu.resources + - edu.assignments + delete: tags: - - Collection - summary: List the collections - description: | - Use this method to list the user's collections contained in `parent` (by default in the `root` collection). - If no sort option is provided, the collections are sorted by `creationDate` `desc`. - - Note that this method will not include the `parent` collection in the listing. - For example, if you need the details of the `root` collection, you can use `GET /v2/collections/root`. - - To fetch your app collection details, you can use `GET /v2/collections/app`. - operationId: listCollections - parameters: - - name: parent - in: query - description: | - List the collection contained in this `parent` collection. - - This option doesn't provide a complete multi-level collection support. - When sharing a collection with someone, this one will have as `parent` `sharedWithMe`. - schema: - type: string - default: root - - name: sort - in: query - description: Sort - schema: - type: string - enum: - - creationDate - - title - - name: direction - in: query - description: Sort direction - schema: - type: string - enum: - - asc - - desc - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: next - in: query - description: | - An opaque string cursor to fetch the next page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. - schema: - type: string - - name: previous - in: query - description: | - An opaque string cursor to fetch the previous page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. - schema: - type: string + - EduResources + operationId: deleteEduResource + summary: Delete an education resource responses: - '200': - description: List of collections - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Collection' + '204': + description: Resource deleted default: description: Error content: @@ -1804,34 +1740,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - - collections.readonly + - edu.resources + - edu.assignments + /eduResources/{resource}/move: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string post: tags: - - Collection - summary: Create a new collection - description: | - This method will create a new collection and add it to your `root` collection. - operationId: createCollection + - EduResources + operationId: moveEduResource + summary: Move an education resource requestBody: content: application/json: schema: - $ref: '#/components/schemas/CollectionCreation' + $ref: '#/components/schemas/EduResourceMove' required: true responses: '200': - description: Collection created - content: - application/json: - schema: - $ref: '#/components/schemas/Collection' - '400': - description: Bad collection creation request + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/EduResource' default: description: Error content: @@ -1840,53 +1776,71 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - x-codegen-request-body-name: body - /collections/{collection}: + - edu.resources + - edu.assignments + /eduResources/{resource}/copy: parameters: - - name: collection + - name: resource in: path - description: | - Unique identifier of the collection. - The following aliases are supported: - - `root`: The root collection of the account - - `app`: Alias for the current app collection - - `sharedWithMe`: Automatically contains new resources that have been shared individually - - `trash`: Automatically contains resources that have been deleted required: true + description: Unique identifier of the resource schema: type: string - get: + post: tags: - - Collection - summary: Get collection details - operationId: getCollection - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - EduResources + operationId: copyEduResource + summary: Copy an education resource to a Resource Library + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EduResourceCopy' + required: true responses: '200': - description: Collection details + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/Collection' - '403': - description: Not granted to access to this collection - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection not found + $ref: '#/components/schemas/EduResource' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.resources + - edu.assignments + /eduResources/{resource}/copyToDemoClass: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + post: + tags: + - EduResources + operationId: copyEduResourceToDemoClass + summary: Copy an education assignment to a teacher demo class + description: | + Once a resource library can be published to a class (`Assignment.capabilities.canPublishInClass = true`), + this endpoint can be used for the feature "View as student". + + It will ensure the teacher has a demo class, then copy the assignment to the demo class. + You can then use `POST /classes/{class}/testStudent` to create a testing student account + in the demo class. + responses: + '200': + description: Assignment copied to the demo class + content: + application/json: + schema: + $ref: '#/components/schemas/ClassAssignment' default: description: Error content: @@ -1895,38 +1849,37 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - - collections.readonly - put: + - edu.resources + - edu.assignments + /eduResources/{resource}/useInClass: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + post: tags: - - Collection - summary: Update a collection's metadata - operationId: editCollection + - EduResources + operationId: useEduResourceInClass + summary: Use an education resource in a class + description: | + This endpoint will copy a resource and the underlying resources. + The assignment will be created as a draft that can be completed with other options before publishing (e.g. due date, publication date for scheduling, etc.). requestBody: content: application/json: schema: - $ref: '#/components/schemas/CollectionModification' + $ref: '#/components/schemas/EduResourceUseInClass' required: true responses: '200': - description: Collection details - content: - application/json: - schema: - $ref: '#/components/schemas/Collection' - '403': - description: Not granted to access to this collection - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection not found + description: Assignment copied to the chosen class content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassAssignment' default: description: Error content: @@ -1935,30 +1888,31 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - x-codegen-request-body-name: body - delete: + - edu.resources + - edu.assignments + /eduResources/{resource}/createLtiLink: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + post: tags: - - Collection - summary: Delete the collection + - EduResources + operationId: createEduResourceLtiLink + summary: Create an LTI link for an education resource description: | - This method will schedule the deletion of the collection. Until deleted, the collection will be available in the `trash`. - operationId: deleteCollection + This endpoint will return an LTI link that can be used to launch Flat for Education. + The link, in a context from a class, will ensure the assignment has been copied in the class. responses: - '204': - description: Collection deleted - '403': - description: Not granted to access to this collection - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection not found + '200': + description: Created LTI Link content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/EduResourceLtiLink' default: description: Error content: @@ -1967,37 +1921,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - /collections/{collection}/untrash: + - edu.resources + - edu.assignments + /eduResources/{resource}/assignment: parameters: - - name: collection + - name: resource in: path - description: Unique identifier of the collection. required: true + description: Unique identifier of the resource schema: type: string - post: + put: tags: - - Collection - summary: Untrash a collection - description: | - This method will restore the collection by removing it from the `trash` and add it back to the `root` collection. - operationId: untrashCollection + - EduResources + operationId: updateEduResourceAssignment + summary: Update an education resource assignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentUpdate' + required: true responses: - '204': - description: The score has been untrashed - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + '200': + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/Assignment' default: description: Error content: @@ -2006,145 +1957,114 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - /collections/{collection}/scores: - parameters: - - name: collection - in: path - description: | - Unique identifier of the collection. - The following aliases are supported: - - `root`: The root collection of the account - - `app`: Alias for the current app collection - - `sharedWithMe`: Automatically contains new resources that have been shared individually - - `trash`: Automatically contains resources that have been deleted - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - edu.resources + - edu.assignments + /groups: get: + operationId: listGroups tags: - - Collection - summary: List the scores contained in a collection + - Group + summary: List groups description: | - Use this method to list the scores contained in a collection. - If no sort option is provided, the scores are sorted by `modificationDate` `desc`. - - For example, to list the scores contained in your app collection, you can use `GET /v2/collections/app/scores`. - operationId: listCollectionScores + List all groups of a given type, filtered by either a classroom or an assignment. + security: + - OAuth2: + - edu.classes + - edu.classes.readonly + - edu.admin + - edu.admin.readonly + - edu.admin.users.readonly parameters: - - name: sort - in: query - description: Sort - schema: - type: string - enum: - - creationDate - - modificationDate - - title - - name: direction + - name: type in: query - description: Sort direction + required: true schema: type: string enum: - - asc - - desc - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: next + - classStudentsSubGroup + - assignmentStudentsSubGroup + - name: classroom in: query - description: | - An opaque string cursor to fetch the next page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + description: Classroom ID to filter by schema: type: string - - name: previous + - name: assignment in: query - description: | - An opaque string cursor to fetch the previous page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + description: Assignment ID to filter by schema: type: string responses: '200': - description: List of scores + description: List of groups content: application/json: schema: type: array items: - $ref: '#/components/schemas/ScoreDetails' + $ref: '#/components/schemas/GroupDetails' + '400': + description: Bad Request - Invalid type or missing required parameters + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Forbidden - Insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Classroom or assignment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + post: + operationId: createGroup + tags: + - Group + summary: Create a new group + description: | + Create a group of the given type, tied to a classroom, optionally with initial members. security: - OAuth2: - - collections - /collections/{collection}/scores/{score}: - parameters: - - name: collection - in: path - description: | - Unique identifier of the collection. - The following aliases are supported: - - `root`: The root collection of the account - - `app`: Alias for the current app collection - - `sharedWithMe`: Automatically contains new resources that have been shared individually - - `trash`: Automatically contains resources that have been deleted - required: true - schema: - type: string - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - put: - tags: - - Collection - summary: Add a score to the collection - description: | - This operation will add a score to a collection. The default behavior will make the score available across multiple collections. - You must have the capability `canAddScores` on the provided `collection` to perform the action. - operationId: addScoreToCollection + - edu.classes + - edu.admin + - edu.admin.users + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/GroupCreation' responses: '200': - description: Score details + description: The new group content: application/json: schema: - $ref: '#/components/schemas/ScoreDetails' + $ref: '#/components/schemas/GroupDetails' + '400': + description: Bad Request - Invalid type or missing required parameters + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' '403': - description: Not granted to access to this collection or score + description: Forbidden - Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection or score not found + '409': + description: Conflict - Group name already exists content: application/json: schema: @@ -2155,29 +2075,23 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - collections - - collections.add_scores - delete: + /groups/{group}: + parameters: + - $ref: '#/components/parameters/group' + get: tags: - - Collection - summary: Delete a score from the collection - description: | - This method will delete a score from the collection. Unlike [`DELETE /scores/{score}`](#operation/deleteScore), this score will not remove the score from your account, but only from the collection. - This can be used to *move* a score from one collection to another, or simply remove a score from one collection when this one is contained in multiple collections. - operationId: deleteScoreFromCollection + - Group + summary: Get group information + operationId: getGroupDetails responses: - '204': - description: Score removed from the collection - '403': - description: Not granted to access to this collection + '200': + description: The group details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/GroupDetails' '404': - description: Collection not found + description: Not Found - Group not found or insufficient permissions content: application/json: schema: @@ -2190,29 +2104,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - /tasks/{task}: - parameters: - - name: task - in: path - description: Unique identifier for the task - required: true - schema: - type: string - get: + - edu.admin + - edu.admin.users + - edu.admin.users.readonly + - edu.classes + - edu.classes.readonly + put: + operationId: renameGroup tags: - - Task - summary: Get a task details - description: | - This method can be used to follow a task progression, for example while a score is being exported. - operationId: getTask + - Group + summary: Rename a group + description: Rename a sub-group. Only available for class student groups. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: New name for the group + required: + - name responses: '200': - description: Task details + description: Updated group content: application/json: schema: - $ref: '#/components/schemas/Task' + $ref: '#/components/schemas/GroupDetails' + '400': + description: Bad Request - Invalid group ID or missing name + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Forbidden - Insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '409': + description: Conflict - Group name already exists + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2221,30 +2166,30 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - tasks.readonly - /users/{user}: - parameters: - - name: user - in: path - description: | - This route parameter is the unique identifier of the user. You can specify an email instead of an unique identifier. If you are executing this request authenticated, you can use `me` as a value instead of the current User unique identifier to work on the current authenticated user. - required: true - schema: - type: string - get: + - edu.classes + - edu.admin + - edu.admin.users + delete: + operationId: deleteGroup tags: - - User - summary: Get a public user profile - description: | - Get a profile of a Flat or Flat for Education User. - operationId: getUser + - Group + summary: Delete a group + description: Delete a group. Only available to teachers of the classroom. responses: - '200': - description: The user public details + '204': + description: Group deleted + '403': + description: Forbidden - Insufficient permissions or invalid group type content: application/json: schema: - $ref: '#/components/schemas/UserPublic' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2253,48 +2198,43 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - account.public_profile - - account.education_profile - /users/{user}/likes: + - edu.classes + - edu.admin + - edu.admin.users + /groups/{group}/users: parameters: - - name: user - in: path - description: | - Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. - required: true - schema: - type: string + - $ref: '#/components/parameters/group' get: tags: - - User - - Score - summary: List liked scores - operationId: getUserLikes + - Group + summary: List group's users + operationId: listGroupUsers parameters: - - $ref: '#/components/parameters/next' - - $ref: '#/components/parameters/previous' - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: ids + - name: source in: query - description: Return only the identifiers of the scores + description: | + Filter the users by their source schema: - type: boolean + type: string + enum: + - googleClassroom + - microsoftGraph + - clever responses: '200': - description: List of liked scores + description: The list of users member of the group content: application/json: schema: type: array items: - $ref: '#/components/schemas/ScoreDetails' + $ref: '#/components/schemas/UserPublic' + '404': + description: Not Found - Group not found or insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2303,84 +2243,142 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - account.public_profile - /users/{user}/scores: + - edu.admin + - edu.admin.users + - edu.admin.users.readonly + - edu.classes + - edu.classes.readonly + post: + operationId: addGroupUser + tags: + - Group + summary: Add a student to a group + description: Add a student to the specified group (must be in the same class) + security: + - OAuth2: + - edu.classes + - edu.admin + - edu.admin.users + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + user: + type: string + description: ID of the student to add + required: + - user + responses: + '200': + description: Membership created + content: + application/json: + schema: + type: object + properties: + user: + type: string + description: User ID that was added + '400': + description: Bad Request - Invalid user ID or user not enrolled in class + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Forbidden - Insufficient permissions or invalid group type + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found or user not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + /groups/{group}/users/{user}: parameters: + - $ref: '#/components/parameters/group' - name: user in: path - description: | - Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. required: true + description: User ID schema: type: string - get: + delete: + operationId: removeGroupUser tags: - - User - - Score - summary: List user's scores - description: | - Get the list of public scores owned by a User. - If you want to access to private scores, please use the [Collections API](#tag/Collection). - For example `GET /v2/collections/allScores/scores` to list all recently updated scores. - operationId: getUserScores + - Group + summary: Remove a student from a class group + description: Remove a student from a class group + responses: + '204': + description: Membership removed + '403': + description: Forbidden - Insufficient permissions or invalid group type + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found or user not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + - edu.admin + - edu.admin.users + /groups/{group}/scores: + parameters: + - $ref: '#/components/parameters/group' + get: + tags: + - Group + - Score + summary: List group's scores + description: | + Get the list of scores shared with a group. + operationId: getGroupScores parameters: - - name: paginate - in: query - description: | - When set to `true`, the API will return a paginated result. - When set to `false` or unset, the API will return all the scores. - If this parameter is unset or false, then limit/sort/direction/next/previous will be ignored. - schema: - type: boolean - default: false - - name: sort - in: query - description: Sort - schema: - type: string - enum: - - creationDate - - modificationDate - - title - - name: direction - in: query - description: Sort direction - schema: - type: string - enum: - - asc - - desc - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: next - in: query - description: | - An opaque string cursor to fetch the next page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. - schema: - type: string - - name: previous + - name: parent in: query - description: | - An opaque string cursor to fetch the previous page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + description: Filter the score forked from the score id `parent` schema: type: string responses: '200': - description: The user scores + description: The group's scores content: application/json: schema: type: array items: $ref: '#/components/schemas/ScoreDetails' + '404': + description: Not Found - Group not found or user not member of group + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2391,6 +2389,70 @@ paths: - OAuth2: - scores - scores.readonly + /me: + get: + tags: + - Account + summary: Get current user account + description: | + Get details about the current authenticated User. + operationId: getAuthenticatedUser + parameters: + - name: onlyId + in: query + description: Only return the user id + schema: + type: boolean + default: false + responses: + '200': + description: Current user details + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - account.public_profile + - account.education_profile + x-codeSamples: + - lang: Python + source: | + from pprint import pprint + import os + + import flat_api + from flat_api.rest import ApiException + + configuration = flat_api.Configuration() + configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] + flat_api_client = flat_api.ApiClient(configuration) + try: + pprint(flat_api.AccountApi(flat_api_client).get_authenticated_user()) + except ApiException as e: + print(e) + - lang: PHP + source: | + setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); + + $api = new Flat\APIClient\Api\AccountApi(); + + try { + $result = $api->getAuthenticatedUser(); + print_r($result); + } catch (Exception $e) { + echo 'Exception when calling AccountApi->getAuthenticatedUser: ', $e->getMessage(), PHP_EOL; + } /organizations/users: get: tags: @@ -2417,6 +2479,7 @@ paths: - $ref: '#/components/parameters/searchInputQuery' - $ref: '#/components/parameters/groupIds' - $ref: '#/components/parameters/noActiveLicense' + - $ref: '#/components/parameters/testAccounts' - name: licenseExpirationDate in: query description: Filter users by license expiration date or `active` / `notActive` @@ -2497,6 +2560,7 @@ paths: - $ref: '#/components/parameters/searchInputQuery' - $ref: '#/components/parameters/groupIds' - $ref: '#/components/parameters/noActiveLicense' + - $ref: '#/components/parameters/testAccounts' responses: '200': description: Number of users @@ -2788,6 +2852,10 @@ paths: - Organization summary: List LTI 1.x credentials operationId: listLtiCredentials + deprecated: true + description: | + DEPRECATED. Use the unified endpoints under `/organizations/lti/configurations`. + Note: Teachers may be restricted by the organization privacy setting `lti1p1AllowTeachersCredentials`. responses: '200': description: The list of LTI Credentials @@ -2819,8 +2887,12 @@ paths: - Organization summary: Create a new couple of LTI 1.x credentials description: | + DEPRECATED. Use the unified endpoints under `/organizations/lti/configurations`. + Note: Teachers may be restricted by the organization privacy setting `lti1p1AllowTeachersCredentials`. + Flat for Education is a Certified LTI Provider. You can use these API methods to automate the creation of LTI credentials. You can read more about our LTI implementation, supported components and LTI Endpoints in our [Developer Documentation](https://flat.io/developers/docs/lti/). operationId: createLtiCredentials + deprecated: true requestBody: content: application/json: @@ -2851,6 +2923,7 @@ paths: - edu.admin - edu.admin.lti x-codegen-request-body-name: body + x-logas-allowed-ro: true /organizations/lti/credentials/{credentials}: parameters: - name: credentials @@ -2886,36 +2959,29 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + deprecated: true + description: | + DEPRECATED. Use the unified endpoints under `/organizations/lti/configurations`. + Note: Teachers may be restricted by the organization privacy setting `lti1p1AllowTeachersCredentials`. security: - OAuth2: - edu.admin - edu.admin.lti - /classes: + /organizations/lti/configurations: get: tags: - - Class - summary: List the classes available for the current user - operationId: listClasses - parameters: - - name: state - in: query - description: Filter the classes by state - schema: - type: string - default: active - enum: - - active - - inactive - - archived + - Organization + summary: List LTI configurations (1.1 and 1.3) + operationId: listLtiConfigurations responses: '200': - description: The list of classes + description: The list of LTI configurations for the caller's organization content: application/json: schema: type: array items: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/LtiConfiguration' default: description: Error content: @@ -2924,40 +2990,105 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly + - edu.admin + - edu.admin.lti + - edu.admin.lti.readonly post: tags: - - Class - summary: Create a new class - description: | - Classrooms on Flat allow you to create activities with assignments and post content to a specific group. - - When creating a class, Flat automatically creates two groups: one for the teachers of the course, one for the students. The creator of this class is automatically added to the teachers group. - - If the classsroom is synchronized with another application like Google Classroom, some of the meta information will automatically be updated. - - You can add users to this class using `PUT /classes/{class}/users/{user}`, they will automatically added to the group based on their role on Flat. Users can also enroll themselves to this class using `POST /classes/enroll/{enrollmentCode}` and the `enrollmentCode` returned in the `ClassDetails` response. - operationId: createClass + - Organization + summary: Create a new LTI configuration (1.1 or 1.3) + operationId: createLtiConfiguration requestBody: content: application/json: schema: - $ref: '#/components/schemas/ClassCreation' + $ref: '#/components/schemas/LtiConfigurationCreate' required: true responses: '200': - description: The new class details - content: - application/json: - schema: - $ref: '#/components/schemas/ClassDetails' - '402': - description: Account overquota + description: The created LTI configuration content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + type: object + properties: + id: + type: string + description: Configuration ID + ltiVersion: + type: string + enum: + - 1p3 + description: LTI version (1.3) + organizationId: + type: string + description: Organization ID + organizationName: + type: string + description: Organization name + creatorId: + type: string + description: ID of the user who created this configuration + creationDate: + type: string + format: date-time + description: Configuration creation date + lastUsedDate: + type: string + format: date-time + nullable: true + description: Last time this configuration was used + status: + type: string + description: Configuration status indicator + enum: + - ready-to-use + - in-use + - incomplete-setup + consumerKey: + type: string + description: LTI 1.1 consumer key + consumerSecret: + type: string + description: LTI 1.1 consumer secret (only included for admins) + lms: + type: string + description: LMS type + name: + type: string + description: Configuration name + tool: + type: object + description: Platform/tool product information + properties: + product: + type: string + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance display name + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain + registrationUrl: + type: string + description: One-time registration URL (only for dynamic registration) + required: + - creationDate + - creationDate + - id + - id + - ltiVersion + - ltiVersion default: description: Error content: @@ -2966,23 +3097,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - x-codegen-request-body-name: body - /classes/{class}: + - edu.admin + - edu.admin.lti + /organizations/lti/configurations/{configuration}: parameters: - - $ref: '#/components/parameters/class' - get: + - name: configuration + in: path + required: true + description: Configuration unique identifier + schema: + type: string + put: tags: - - Class - summary: Get the details of a single class - operationId: getClass + - Organization + summary: Update an existing LTI configuration (edit 1.3; 1.1 not editable) + operationId: updateLtiConfiguration + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LtiConfigurationUpdate' + required: true responses: '200': - description: The new class details + description: The updated configuration content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/LtiConfiguration' default: description: Error content: @@ -2991,29 +3133,93 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - put: - tags: - - Class - summary: Update the class + - edu.admin + - edu.admin.lti + delete: + tags: + - Organization + summary: Delete an LTI configuration + operationId: deleteLtiConfiguration + responses: + '204': + description: Configuration deleted + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.admin + - edu.admin.lti + /scores: + post: + tags: + - Score + summary: Create a new score description: | - Update the meta information of the class - operationId: updateClass + Use this API method to **create a new music score in the current User account**. This API endpoints provides 3 ways to create scores: + + * `ScoreCreationBuilderData` : Create a blank score by providing the list of instruments to use. You can optionally customize the initial key signature, time signature, enable TABs, Chord grids, as well as the page layout. + * `ScoreCreationFileImport`: Import a file to create the new Flat document. + + **Preferred formats**: + * **MusicXML**: `.xml`, `.musicxml`, `.mxl` (compressed) — MIME: `vnd.recordare.musicxml+xml`, `vnd.recordare.musicxml`. This is the only format that preserves all notation data (articulations, dynamics, layout, etc.) with full round-trip support. + * **MIDI**: `.mid`, `.midi` — MIME: `audio/midi`. Only preserves pitch, timing, and instrument data; notation details are lost. + + **Also supported** (converted to MusicXML on import, some notation details may be lost): + * **Guitar Pro**: `.gp`, `.gp3`, `.gp4`, `.gp5`, `.gpx`, `.gtp` + * **MuseScore**: `.mscz`, `.mscx` + * **ABC notation**: `.abc` — MIME: `text/vnd.abc` + * **PowerTab**: `.ptb` + * **Capella**: `.cap`, `.capx` + * **MEI**: `.mei` + * **Overture**: `.ove` + * **TablEdit**: `.tef` + * **Band-in-a-Box**: `.mgu`, `.sgu` + * **Karaoke MIDI**: `.kar` + * **MuseData**: `.md` + * **Score Writer**: `.scw` + * **Bagpipe Music Writer**: `.bmw`, `.bww` + * **Encore**: `.enc` + * `ScoreCreationGoogleDriveImport`: Import an existing Google Drive file from the connected Google Drive account. + + This API call will automatically create the first revision of the document, the score can be modified by the using our web application or by uploading a new revision of this file (`POST /v2/scores/{score}/revisions/{revision}`). + + The currently authenticated user will be granted owner of the file and will be able to add other collaborators (users and groups). + + If no `collection` is specified, the API will create the score in the most appropriate collection. When using an OAuth2 access token or a personal token, the score will be automatically added to your dedicated app collection in the account (`/v2/collections/app`). + + If a `collection` is specified and this one has more public privacy settings than the score (e.g. `public` vs `private` for the score), the privacy settings of the created score will be adjusted to the collection ones. + + You can check the adjusted privacy settings in the returned score `privacy`, and optionally adjust these settings if needed using `PUT /scores/{score}`. + operationId: createScore requestBody: - description: Details of the Class content: application/json: schema: - $ref: '#/components/schemas/ClassUpdate' + $ref: '#/components/schemas/ScoreCreation' required: true responses: '200': - description: The new class details + description: Score created content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/ScoreDetails' + '400': + description: Bad score creation request + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '402': + description: Account overquota or feature not included in plan + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3022,48 +3228,127 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes + - scores x-codegen-request-body-name: body - /classes/{class}/archive: + x-codeSamples: + - lang: Ruby + source: | + require 'flat_api' + FlatApi.configure do |config| + config.access_token = 'your_access_token' + end + begin + score_data = File.open("my-score.musicxml", "r:UTF-8") { |f| f.read } + body = FlatApi::ScoreCreationFileImport.new({ + title: 'Score Title', + data: score_data, + }) + p FlatApi::ScoreApi.new.create_score(body) + rescue FlatApi::ApiError => e + puts "Error when calling ScoreApi->create_score: #{e}" + end + - lang: Python + source: | + from pprint import pprint + import os + from urllib.request import urlopen + from urllib.error import HTTPError + + import flat_api + from flat_api.rest import ApiException + + SCORE_TO_IMPORT='https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml' + + configuration = flat_api.Configuration() + configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] + flat_api_client = flat_api.ApiClient(configuration) + + try: + # Download a MusicXML "Hello World" + hello_world = urlopen(SCORE_TO_IMPORT).read().decode('utf-8') + + # The new score meta, including the MusicXML file as `data` + new_score = flat_api.ScoreCreation( + title='Hello World', + privacy='private', + data=hello_world + ) + + # Create the document and print the meta returned by the API + pprint(flat_api.ScoreApi(flat_api_client).create_score(new_score)) + except (ApiException, HTTPError) as e: + print(e) + - lang: PHP + source: | + setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); + + $musicXml = file_get_contents('https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml'); + + try { + $body = new \Flat\APIClient\Model\ScoreCreation(); + $body->setTitle('Hello world'); + $body->setPrivacy('private'); + $body->setData($musicXml); + + $scoreApi = new Flat\APIClient\Api\ScoreApi(); + $result = $scoreApi->createScore($body); + print_r($result); + } catch (Exception $e) { + echo 'Exception when calling ScoreApi->createScore: ', $e->getMessage(), PHP_EOL; + } + /scores/{score}: parameters: - - $ref: '#/components/parameters/class' - post: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + get: tags: - - Class - summary: Archive the class + - Score + summary: Get a score's metadata description: | - Mark the class as `archived`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. - operationId: archiveClass + Get the details of a score identified by the `score` parameter in the URL. + The currently authenticated user must have at least a read access to the document to use this API call. + operationId: getScore + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The class details + description: Score details content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' - default: - description: Error + $ref: '#/components/schemas/ScoreDetails' + '402': + description: Account overquota and this document is out of the granted quota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - delete: - tags: - - Class - summary: Unarchive the class - description: | - Mark the class as `active`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. - operationId: unarchiveClass - responses: - '200': - description: The class details + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3072,24 +3357,51 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /classes/{class}/activate: - parameters: - - $ref: '#/components/parameters/class' - post: + - scores + - scores.readonly + put: tags: - - Class - summary: Activate the class + - Score + summary: Edit a score's metadata description: | - Mark the class as `active`. This is mainly used for classes synchronized from Clever that are initially with an `inactive` state and hidden in the UI. - operationId: activateClass + This API method allows you to change the metadata of a score document (e.g. its `title` or `privacy`), all the properties are optional. + + To edit the file itself, create a new revision using the appropriate method (`POST /v2/scores/{score}/revisions/{revision}`). + + When editing the `title`, `subtitle`, `composer`, `lyricist`, `arranger` or `licenseText`, the metadatas will be instantly be updated, and a real-time action will be pushed to update the document lazily. + This pending document modification will be automatically be saved as a new version by either a connected client or our internal versioning service. + operationId: editScore + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreModification' + required: true responses: '200': - description: The class details + description: Score details content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/ScoreDetails' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3098,51 +3410,41 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /classes/{class}/users/{user}: - parameters: - - $ref: '#/components/parameters/class' - - name: user - in: path - description: Unique identifier of the user - required: true - schema: - type: string - put: + - scores + x-codegen-request-body-name: body + delete: tags: - - Class - summary: Add a user to the class + - Score + summary: Delete a score description: | - This method can be used by a teacher of the class to enroll another Flat user into the class. - - Only users that are part of your Organization can be enrolled in a class of this same Organization. + This method can be used by anyone that has at least read access to the document: - When enrolling a user in the class, Flat will automatically add this user to the corresponding Class group, based on this role in the Organization. - operationId: addClassUser + - When called by an owner/admin, it will schedule the deletion of the score, its revisions, and complete history. The score won't be accessible anymore after calling this method and the user's quota will directly be updated. + - When called by a collaborator, the score will be unshared (i.e. removed from the account & own collections). + - When called by another user that has the score in its collections, the score will be removed from all the user collections. + operationId: deleteScore + parameters: + - name: now + in: query + description: If `true`, the score deletion will be scheduled to be done ASAP + schema: + type: boolean + default: false responses: '204': - description: The user has been added to the class - default: - description: Error + description: The score has been removed + '403': + description: Not granted to manage this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - delete: - tags: - - Class - summary: Remove a user from the class - description: | - This method can be used by a teacher to remove a user from the class, or by a student to leave the classroom. - - Warning: Removing a user from the class will remove the associated resources, including the submissions and feedback related to these submissions. - operationId: deleteClassUser - responses: - '204': - description: The user has been removed from the class default: description: Error content: @@ -3151,32 +3453,38 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /classes/{class}/students/{user}/submissions: + - scores + /scores/{score}/untrash: parameters: - - $ref: '#/components/parameters/class' - - name: user + - name: score in: path - description: Unique identifier of the user + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true schema: type: string - get: + post: tags: - - Class - summary: List the submissions for a student + - Score + summary: Untrash a score description: | - Use this method as a teacher to list all the assignment submissions sent by a student of the class - operationId: listClassStudentSubmissions + This method will remove the score from the `trash` collection and from the deletion queue, and add it back to the original collections. + operationId: untrashScore responses: - '200': - description: The list of submissions + '204': + description: The score has been untrashed + '403': + description: Not granted to manage this score content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/AssignmentSubmission' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3185,27 +3493,33 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - /classes/{class}/assignments: + - scores + /scores/{score}/submissions: parameters: - - $ref: '#/components/parameters/class' + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string get: tags: + - Score - Class - summary: Assignments listing - operationId: listAssignments + summary: List submissions related to the score + description: | + This API call will list the different assignments submissions where the score is attached. This method can be used by anyone that are part of the organization and have at least read access to the document. + operationId: getScoreSubmissions responses: '200': - description: List of assignments for the class + description: List of submissions content: application/json: schema: type: array items: - $ref: '#/components/schemas/ClassAssignment' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -3214,71 +3528,64 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly + - scores + - scores.readonly + /scores/{score}/fork: + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string post: tags: - - Class - summary: Assignment creation + - Score + summary: Fork a score description: | - Use this method as a teacher to create and post a new assignment to a class. + This API call will make a copy of the last revision of the specified score and create a new score. The copy of the score will have a privacy set to `private`. - If the class is synchronized with Google Classroom, the assignment will be automatically posted to your Classroom course. - operationId: createClassAssignment + When using a [Flat for Education](https://flat.io/edu) account, the inline and contextualized comments will be accessible in the child document. + operationId: forkScore + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string requestBody: content: application/json: schema: - $ref: '#/components/schemas/ClassAssignmentUpdate' + $ref: '#/components/schemas/ScoreFork' required: true responses: '200': - description: The assignment has been created + description: Score details content: application/json: schema: - $ref: '#/components/schemas/Assignment' - default: - description: Error + $ref: '#/components/schemas/ScoreDetails' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/copy: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - post: - tags: - - Class - summary: Copy an assignment - description: | - Copy an assignment to a specified class or the resource library - - For class assignments: - - If the original assignment has a due date in the past, this new assignment will be created without a due date. - - If the class is synchronized with an external app (e.g. Google Classroom), the copied assignment will also be posted on the external app. - operationId: copyAssignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentCopy' - required: true - responses: - '200': - description: The new created assignment + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/AssignmentCopyResponse' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3287,51 +3594,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.assignments + - scores x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/archive: + /scores/{score}/collaborators: parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - post: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + get: tags: - - Class - summary: Archive the assignment + - Score + summary: List the collaborators description: | - Archive the assignment - operationId: archiveAssignment + This API call will list the different collaborators of a score and their rights on the document. The returned list will at least contain the owner of the document. + + Collaborators can be a single user (the object `user` will be populated) or a group (the object `group` will be populated). + operationId: getScoreCollaborators + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The assignment details + description: List of collaborators content: application/json: schema: - $ref: '#/components/schemas/Assignment' - default: - description: Error + type: array + items: + $ref: '#/components/schemas/ResourceCollaborator' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - delete: - tags: - - Class - summary: Unarchive the assignment. - description: | - Mark the assignment as `active`. - operationId: unarchiveAssignment - responses: - '200': - description: The assignment details + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/Assignment' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3340,210 +3656,115 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.assignments - /classes/{class}/assignments/{assignment}/submissions: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - get: - tags: - - Class - summary: List the students' submissions - operationId: getSubmissions - responses: - '200': - description: The submissions - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - put: + - scores.readonly + - scores + post: tags: - - Class - summary: Create or edit a submission + - Score + summary: Add a new collaborator description: | - Use this method as a student to create, update and submit a submission related to an assignment. - Students can only set `attachments` and `submit`. - Teachers can use `PUT /classes/{class}/assignments/{assignment}/submissions/{submission}` to update a submission by id. - operationId: createSubmission + Share a score with a single user or a group. This API call allows to add, invite and update the collaborators of a resource. + - To add an existing Flat user to the resource, specify its unique identifier in the `user` property. + - To invite an external user to the resource, specify its email in the `userEmail` property. + - To add a Flat group to the resource, specify its unique identifier in the `group` property. + - To update an existing collaborator, process the same request with different rights. + operationId: addScoreCollaborator requestBody: content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionUpdate' + $ref: '#/components/schemas/ResourceCollaboratorCreation' required: true responses: '200': - description: The submission + description: The newly added collaborator metadata content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error + $ref: '#/components/schemas/ResourceCollaborator' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/submissions/csv: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - get: - tags: - - Class - summary: CSV Grades exports - description: Export list of submissions grades to a CSV file - operationId: exportSubmissionsReviewsAsCsv - responses: - '200': - description: List of submissions - content: - text/csv: - schema: - type: string - format: binary - default: - description: Error + '403': + description: Not granted to manage this score content: - text/csv: + application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - /classes/{class}/assignments/{assignment}/submissions/excel: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - get: - tags: - - Class - summary: Excel Grades exports - description: Export list of submissions grades to an Excel file - operationId: exportSubmissionsReviewsAsExcel - responses: - '200': - description: List of submissions + '404': + description: Score not found content: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: + application/json: schema: - type: string - format: binary + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: + application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - /classes/{class}/assignments/{assignment}/submissions/{submission}: + - scores + x-codegen-request-body-name: body + /scores/{score}/collaborators/{collaborator}: parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: collaborator + in: path + description: | + Unique identifier of a **collaborator permission**, or unique identifier of a **User**, or unique identifier of a **Group** + required: true + schema: + type: string get: tags: - - Class - summary: Get a student submission - operationId: getSubmission + - Score + summary: Get a collaborator + description: | + Get the information about a collaborator (User or Group). + operationId: getScoreCollaborator + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: A submission + description: Collaborator information content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error + $ref: '#/components/schemas/ResourceCollaborator' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - put: - tags: - - Class - summary: Edit a submission - description: | - Use this method as a teacher to update the different submission and give feedback. - Teachers can only set `return`, `draftGrade` and `grade` - operationId: editSubmission - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentSubmissionUpdate' - required: true - responses: - '200': - description: The submission - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error + '403': + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - delete: - tags: - - Class - summary: Reset a submission - description: | - Use this method as a teacher to reset a submission and allow student to start over the assignment - operationId: deleteSubmission - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - responses: - '200': - description: The submission object once reset + '404': + description: Score or collaborator not found content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3552,42 +3773,25 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/submissions/{submission}/history: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - get: + - scores.readonly + delete: tags: - - Class - operationId: getSubmissionHistory - summary: Get the history of the submission + - Score + summary: Delete a collaborator description: | - For teachers only. Returns a detailed history of the submission. This currently includes state and grade histories. - security: - - OAuth2: - - edu.assignments - - edu.assignments.readonly + Remove the specified collaborator from the score + operationId: removeScoreCollaborator responses: - '200': - description: The history of the submission - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/AssignmentSubmissionHistory' + '204': + description: The collaborator has been removed '403': - description: Not granted to access to this submission + description: Not granted to manage this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score or collaborator not found content: application/json: schema: @@ -3598,37 +3802,77 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - /classes/{class}/assignments/{assignment}/submissions/{submission}/comments: + security: + - OAuth2: + - scores + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + parameters: + - $ref: '#/components/parameters/eventProperties' + /scores/{score}/tracks: parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string get: tags: - - Class - operationId: getSubmissionComments - summary: List the feedback comments of a submission - security: - - OAuth2: - - edu.assignments - - edu.assignments.readonly + - Score + summary: List the audio or video tracks linked to a score + description: | + List all audio or video tracks linked to a score. + + **Access Control for Performance Submission Tracks:** + + Tracks with `purpose: 'performanceSubmission'` are filtered based on user role: + + * **Students**: Can only see their own performance submission tracks, plus all non-performance tracks + * **Teachers and score admins**: Can see all tracks from all students + + The `assignment` query parameter can be used to filter tracks for a specific assignment, but the access control rules above still apply. + operationId: listScoreTracks + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + - name: assignment + in: query + description: | + An assignment id with which all the tracks returned will be related to + schema: + type: string + - name: listAutoTrack + in: query + description: | + If true, and if available, return last automatically synchronized Flat's mp3 export as an additional track + schema: + type: boolean responses: '200': - description: The comments of the score + description: List of tracks content: application/json: schema: type: array items: - $ref: '#/components/schemas/AssignmentSubmissionComment' + $ref: '#/components/schemas/ScoreTrack' '403': - description: Not granted to access to this submission + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score not found content: application/json: schema: @@ -3639,35 +3883,40 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - post: - tags: - - Class - operationId: postSubmissionComment - summary: Add a feedback comment to a submission security: - OAuth2: - - edu.assignments + - scores + - scores.readonly + post: + tags: + - Score + summary: Add a new video or audio track to the score + description: | + Use this method to add new track to the score. This track can then be played on flat.io or in an embedded score. + This API method support medias hosted on SoundCloud, YouTube and Vimeo. + operationId: addScoreTrack + parameters: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' + $ref: '#/components/schemas/ScoreTrackCreation' required: true responses: '200': - description: The comment + description: Created track content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionComment' + $ref: '#/components/schemas/ScoreTrackCreationResponse' '403': - description: Not granted to access to this submission + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score not found content: application/json: schema: @@ -3678,41 +3927,53 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - /classes/{class}/assignments/{assignment}/submissions/{submission}/comments/{comment}: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - - $ref: '#/components/parameters/comment' - put: - tags: - - Class - operationId: updateSubmissionComment - summary: Update a feedback comment to a submission security: - OAuth2: - - edu.assignments - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' - required: true + - scores + x-codegen-request-body-name: body + /scores/{score}/tracks/{track}: + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: track + in: path + description: | + Unique identifier of a score audio track + required: true + schema: + type: string + get: + tags: + - Score + summary: Retrieve the details of an audio or video track linked to a score + operationId: getScoreTrack + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The comment + description: Track details content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionComment' + $ref: '#/components/schemas/ScoreTrack' '403': - description: Not granted to access to this submission + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score or Track not found content: application/json: schema: @@ -3723,87 +3984,41 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - delete: - tags: - - Class - operationId: deleteSubmissionComment - summary: Delete a feedback comment to a submission security: - OAuth2: - - edu.assignments - responses: - '204': - description: The comment has been deleted - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - /classes/{class}/testStudent: - parameters: - - $ref: '#/components/parameters/class' - post: + - scores + - scores.readonly + put: tags: - - Class - summary: Create a test student account - description: | - Test students account can be created by teachers an admin and be used to experiment the assignments. - - - They are automatically added to the class. - - They can be reset using this API endpoint (a new account will be created and the previous one scheduled for deletion). - - These accounts don't use a user license. - operationId: createTestStudentAccount - parameters: - - name: reset - in: query - description: | - If true, the testing account will be re-created. - required: false - schema: - type: boolean + - Score + summary: Update an audio or video track linked to a score + operationId: updateScoreTrack + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreTrackUpdate' + required: true responses: '200': - description: Test account created + description: Updated track content: application/json: schema: - $ref: '#/components/schemas/UserDetails' - default: - description: Error + $ref: '#/components/schemas/ScoreTrack' + '403': + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.admin - - edu.classes - /classes/enroll/{enrollmentCode}: - parameters: - - name: enrollmentCode - in: path - description: | - The enrollment code, available to the teacher in `ClassDetails` - required: true - schema: - type: string - post: - tags: - - Class - summary: Join a class - description: | - Use this method to join a class using an enrollment code given one of the teacher of this class. This code is also available in the `ClassDetails` returned to the teachers when creating the class or listing / fetching a specific class. - - Flat will automatically add the user to the corresponding class group based on this role in the organization. - operationId: enrollClass - responses: - '200': - description: The new class details + '404': + description: Score or Track not found content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3812,22 +4027,28 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /groups/{group}: - parameters: - - $ref: '#/components/parameters/group' - get: + - scores + x-codegen-request-body-name: body + delete: tags: - - Group - summary: Get group information - operationId: getGroupDetails + - Score + summary: Remove an audio or video track linked to the score + operationId: deleteScoreTrack responses: - '200': - description: The group details + '204': + description: Track removed + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/GroupDetails' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or Track not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3836,178 +4057,79 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.admin - - edu.admin.users - - edu.admin.users.readonly - - edu.classes - - edu.classes.readonly - /groups/{group}/users: - parameters: - - $ref: '#/components/parameters/group' - get: - tags: - - Group - summary: List group's users - operationId: listGroupUsers - parameters: - - name: source - in: query - description: | - Filter the users by their source - schema: - type: string - enum: [googleClassroom, microsoftGraph, clever] - responses: - '200': - description: The list of users member of the group - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/UserPublic' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.admin - - edu.admin.users - - edu.admin.users.readonly - - edu.classes - - edu.classes.readonly - /groups/{group}/scores: + - scores + /scores/{score}/comments: parameters: - - $ref: '#/components/parameters/group' - get: - tags: - - Group - - Score - summary: List group's scores + - name: score + in: path description: | - Get the list of scores shared with a group. - operationId: getGroupScores - parameters: - - name: parent - in: query - description: Filter the score forked from the score id `parent` - schema: - type: string - responses: - '200': - description: The group's scores - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/ScoreDetails' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - scores - - scores.readonly - /eduResources: + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string get: tags: - - EduResources - operationId: listEduResources - summary: List education resources in a library or folder + - Score + summary: List comments + description: This method lists the different comments added on a music score (documents and inline) sorted by their post dates. + operationId: getScoreComments parameters: - - name: parent - in: query - description: | - List the resources contained in this `parent` library or folder - schema: - type: string - default: root - - name: withoutSubfoldersResources - in: query - description: | - For the `parent` = `organization`, do not include resources from subfolders. - By default in the Resource Library UI, we include resources from subfolders, but for example in a picker like LTI, we don't want to include them. - schema: - type: boolean - name: type in: query - description: | - Filter the returned resources by type + description: Filter the comments by type schema: type: string enum: - - assignment - - folder - - name: subjects - in: query - description: | - Filter the returned resources by subjects - schema: - type: array - items: - $ref: '#/components/schemas/TeachingTheme' - - name: assignmentTypes - in: query - description: | - Filter the returned resources by assignment types - schema: - type: array - items: - $ref: '#/components/schemas/AssignmentType' - - name: grades - in: query - description: | - Filter the returned resources by grades - schema: - type: array - items: - $ref: '#/components/schemas/Grade' + - document + - inline - name: sort in: query description: Sort schema: type: string enum: - - creationDate - - updateDate - - title - default: creationDate - - $ref: '#/components/parameters/sortDirection' - - name: limit + - date + - name: direction in: query - description: This is the maximum number of resources that may be returned + description: Sort direction schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - $ref: '#/components/parameters/next' - - $ref: '#/components/parameters/previous' + type: string + enum: + - asc + - desc responses: '200': - description: List of resources + description: The comments of the score content: application/json: schema: type: array items: - $ref: '#/components/schemas/EduResource' - headers: - X-Total-Assignments-Count: - description: Total number of assignments + $ref: '#/components/schemas/ScoreComment' + '402': + description: Account overquota + content: + application/json: schema: - type: integer - X-Total-Folders-Count: - description: Total number of folders + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: schema: - type: integer + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4016,54 +4138,49 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.resources.readonly - - edu.assignments - - edu.assignments.readonly + - scores.readonly + - scores.social + - scores post: tags: - - EduResources - operationId: createEduResource - summary: Create a new education resource + - Score + summary: Post a new comment + description: | + Post a document or a contextualized comment on a document. + + Please note that this method includes an anti-spam system for public scores. We don't guarantee that your comments will be accepted and displayed to end-user. Comments are be blocked by returning a `403` HTTP error and hidden from other users when the `spam` property is `true`. + operationId: postScoreComment requestBody: content: application/json: schema: - $ref: '#/components/schemas/EduResourceCreation' + $ref: '#/components/schemas/ScoreCommentCreation' required: true responses: '200': - description: Fetched resource + description: The new comment content: application/json: schema: - $ref: '#/components/schemas/EduResource' - default: - description: Error + $ref: '#/components/schemas/ScoreComment' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.resources - - edu.assignments - /eduResources/libraries: - get: - tags: - - EduResources - operationId: listEduLibraries - summary: List the education libraries - responses: - '200': - description: Fetched resource + '403': + description: Not granted to access to this score, to post a comment, or your API call triggered our spam filter. content: application/json: schema: - type: array - description: List of libraries to display - items: - $ref: '#/components/schemas/EduLibrary' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4072,64 +4189,67 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.resources.readonly - - edu.assignments - - edu.assignments.readonly - /eduResources/{resource}: + - scores.social + - scores + x-codegen-request-body-name: body + /scores/{score}/comments/{comment}: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - get: + - name: comment + in: path + description: | + Unique identifier of a sheet music comment + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + put: tags: - - EduResources - operationId: getEduResource - summary: Get an education resource + - Score + summary: Update an existing comment + operationId: updateScoreComment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreCommentUpdate' + required: true responses: '200': - description: Fetched resource + description: The edited comment content: application/json: schema: - $ref: '#/components/schemas/EduResource' - default: - description: Error + $ref: '#/components/schemas/ScoreComment' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.resources - - edu.resources.readonly - - edu.assignments - - edu.assignments.readonly - put: - tags: - - EduResources - operationId: updateEduResource - summary: Update an education resource metadata - description: | - Update any resources metadata (e.g. title). - - Use this method to rename education resources folders or assignments. - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EduResourceUpdate' - required: true - responses: - '200': - description: Fetched resource + '403': + description: Not granted to access to this score or not the original comment creator content: application/json: schema: - $ref: '#/components/schemas/EduResource' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4138,16 +4258,29 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments + - scores.social + - scores + x-codegen-request-body-name: body delete: tags: - - EduResources - operationId: deleteEduResource - summary: Delete an education resource + - Score + summary: Delete a comment + operationId: deleteScoreComment responses: '204': - description: Resource deleted + description: The comment has been deleted + '403': + description: Not granted to access to this score or not the original comment creator + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or comment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4156,34 +4289,57 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/move: + - scores.social + - scores + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + parameters: + - $ref: '#/components/parameters/eventProperties' + /scores/{score}/comments/{comment}/resolved: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - post: + - name: comment + in: path + description: | + Unique identifier of a sheet music comment + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + put: tags: - - EduResources - operationId: moveEduResource - summary: Move an education resource - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EduResourceMove' - required: true + - Score + summary: Mark the comment as resolved + operationId: markScoreCommentResolved responses: - '200': - description: Fetched resource + '204': + description: The comment has been marked as resolved + '403': + description: Not granted to mark this comment as resolved content: application/json: schema: - $ref: '#/components/schemas/EduResource' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or comment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4192,34 +4348,35 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/copy: - parameters: - - name: resource - in: path - required: true - description: Unique identifier of the resource - schema: - type: string - post: + - scores.social + - scores + delete: tags: - - EduResources - operationId: copyEduResource - summary: Copy an education resource to a Resource Library - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EduResourceCopy' - required: true + - Score + summary: Mark the comment as unresolved + operationId: markScoreCommentUnresolved + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: - '200': - description: Fetched resource + '204': + description: The comment has been unmarked as resolved + '403': + description: Not granted to unmark this comment as resolved content: application/json: schema: - $ref: '#/components/schemas/EduResource' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or comment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4228,35 +4385,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/copyToDemoClass: + - scores.social + - scores + /scores/{score}/revisions: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - post: + get: tags: - - EduResources - operationId: copyEduResourceToDemoClass - summary: Copy an education assignment to a teacher demo class + - Score + summary: List the revisions description: | - Once a resource library can be published to a class (`Assignment.capabilities.canPublishInClass = true`), - this endpoint can be used for the feature "View as student". + When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to list all of them, sorted by last modification. - It will ensure the teacher has a demo class, then copy the assignment to the demo class. - You can then use `POST /classes/{class}/testStudent` to create a testing student account - in the demo class. + Depending the plan of the account, this list can be trunked to the few last revisions. + operationId: getScoreRevisions + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: Assignment copied to the demo class + description: List of revisions content: application/json: schema: - $ref: '#/components/schemas/ClassAssignment' + type: array + items: + $ref: '#/components/schemas/ScoreRevision' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4265,37 +4447,47 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/useInClass: - parameters: - - name: resource - in: path - required: true - description: Unique identifier of the resource - schema: - type: string + - scores + - scores.readonly post: tags: - - EduResources - operationId: useEduResourceInClass - summary: Use an education resource in a class + - Score + summary: Create a new revision description: | - This endpoint will copy a resource and the underlying resources. - The assignment will be created as a draft that can be completed with other options before publishing (e.g. due date, publication date for scheduling, etc.). + Update a score by uploading a new revision for this one. + operationId: createScoreRevision + parameters: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/EduResourceUseInClass' + $ref: '#/components/schemas/ScoreRevisionCreation' required: true responses: '200': - description: Assignment copied to the chosen class + description: The new created revision metadata content: application/json: schema: - $ref: '#/components/schemas/ClassAssignment' + $ref: '#/components/schemas/ScoreRevision' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to modify this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4304,31 +4496,63 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/createLtiLink: + - scores + x-codegen-request-body-name: body + /scores/{score}/revisions/{revision}: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - post: + - name: revision + in: path + description: | + Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + get: tags: - - EduResources - operationId: createEduResourceLtiLink - summary: Create an LTI link for an education resource + - Score + summary: Get a score revision description: | - This endpoint will return an LTI link that can be used to launch Flat for Education. - The link, in a context from a class, will ensure the assignment has been copied in the class. + When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to get a specific + revision metadata. + operationId: getScoreRevision responses: '200': - description: Created LTI Link + description: Revision metadata content: application/json: schema: - $ref: '#/components/schemas/EduResourceLtiLink' + $ref: '#/components/schemas/ScoreRevision' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4337,34 +4561,138 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/assignment: + - scores + - scores.readonly + /scores/{score}/revisions/{revision}/{format}: parameters: - - name: resource + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: revision + in: path + description: | + Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. + required: true + schema: + type: string + - name: format in: path + description: The format of the file you will retrieve required: true - description: Unique identifier of the resource schema: type: string - put: + enum: + - json + - mxl + - xml + - mp3 + - wav + - midi + - flat + - thumbnail.png + - synchronizationPoints + get: tags: - - EduResources - operationId: updateEduResourceAssignment - summary: Update an education resource assignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentUpdate' - required: true + - Score + summary: Get a score revision data + description: | + Retrieve the file corresponding to a score revision (the following formats are available): Flat JSON/Adagio JSON `json`, MusicXML + `mxl`/`xml`, MP3 `mp3`, WAV `wav`, MIDI `midi`, Flat `flat`, a tumbnail of the first page `thumbnail.png` or auto sync points `synchronizationPoints`. + operationId: getScoreRevisionData + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + - name: parts + in: query + description: | + An optional a set of parts uuid to be exported. This parameter must be composed of parts uuids + separated by commas. For example "59df645f-bb1c-f1b4-b573-d2afc4491f94,34ef645f-1aef-f3bc-1564-34cca4492b87". + schema: + type: string + - name: defaultTrack + in: query + description: | + When `format` is `mp3`, this property is set to true and the score has a default `ScoreTrack` (mp3), this one will be returned instead of the playback file. + schema: + type: boolean + - name: url + in: query + description: | + Returns a json with the `url` in it instead of redirecting + schema: + type: boolean responses: '200': - description: Fetched resource + description: Revision data + headers: + x-flat-score-revision: + description: The unique identifier of the score revision + schema: + type: string + x-flat-score-revision-date: + description: The date of the score revision (ISO 8601) + schema: + type: string + format: date-time content: application/json: schema: - $ref: '#/components/schemas/Assignment' + type: string + format: binary + application/vnd.recordare.musicxml+xml: + schema: + type: string + format: binary + application/vnd.recordare.musicxml: + schema: + type: string + format: binary + audio/mp3: + schema: + type: string + format: binary + audio/wav: + schema: + type: string + format: binary + audio/midi: + schema: + type: string + format: binary + image/png: + schema: + type: string + format: binary + application/octet-stream: + schema: + type: string + format: binary + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or associated file not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4373,23 +4701,313 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments -components: - securitySchemes: - OAuth2: - type: oauth2 + - scores + - scores.readonly + /scores/{score}/revisions/{revision}/{format}/task: + post: + tags: + - Score + summary: Create a new score export task description: | - OAuth 2.0 authentication for your app or. Please only request the most restrictive and needed scopes. Using some of the scopes may require an additional review from our team. The Flat API supports **authorization code** and **implicit** flows. - flows: - authorizationCode: - authorizationUrl: https://flat.io/auth/oauth - tokenUrl: https://api.flat.io/oauth/access_token - scopes: - account.public_profile: | - Provides access to the basic person's public profile. Education profiles may be anonymized with this scope, you can request the scope `education_profile` to access to the a basic education account profile. - account.email: | - Provices access to the person's email. + Some of the exports of a score takes are longer to process than a simple API requests. + Use this endpoint to launch a new export of one score hosted on Flat. + operationId: createExportTask + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: revision + in: path + description: | + Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. + required: true + schema: + type: string + - name: format + in: path + description: The format of the file that will be generated or the target service name where the file will be exported + required: true + schema: + type: string + enum: + - mp3 + - wav + - practicefirst + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TaskExportOptions' + required: false + responses: + '200': + description: Task associated to the generation of the file + content: + application/json: + schema: + $ref: '#/components/schemas/Task' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or associated file not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - scores + - scores.readonly + x-codegen-request-body-name: body + /tasks/{task}: + parameters: + - name: task + in: path + description: Unique identifier for the task + required: true + schema: + type: string + get: + tags: + - Task + summary: Get a task details + description: | + This method can be used to follow a task progression, for example while a score is being exported. + operationId: getTask + responses: + '200': + description: Task details + content: + application/json: + schema: + $ref: '#/components/schemas/Task' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - tasks.readonly + /tasks/{task}/cancel: + parameters: + - name: task + in: path + description: Unique identifier for the task + required: true + schema: + type: string + /users/{user}: + parameters: + - name: user + in: path + description: | + This route parameter is the unique identifier of the user. You can specify an email instead of an unique identifier. If you are executing this request authenticated, you can use `me` as a value instead of the current User unique identifier to work on the current authenticated user. + required: true + schema: + type: string + get: + tags: + - User + summary: Get a public user profile + description: | + Get a profile of a Flat or Flat for Education User. + operationId: getUser + responses: + '200': + description: The user public details + content: + application/json: + schema: + $ref: '#/components/schemas/UserPublic' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - account.public_profile + - account.education_profile + /users/{user}/likes: + parameters: + - name: user + in: path + description: | + Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. + required: true + schema: + type: string + get: + tags: + - User + - Score + summary: List liked scores + operationId: getUserLikes + parameters: + - $ref: '#/components/parameters/next' + - $ref: '#/components/parameters/previous' + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: ids + in: query + description: Return only the identifiers of the scores + schema: + type: boolean + responses: + '200': + description: List of liked scores + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScoreDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - account.public_profile + /users/{user}/scores: + parameters: + - name: user + in: path + description: | + Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. + required: true + schema: + type: string + get: + tags: + - User + - Score + summary: List user's scores + description: | + Get the list of public scores owned by a User. + If you want to access to private scores, please use the [Collections API](#tag/Collection). + For example `GET /v2/collections/allScores/scores` to list all recently updated scores. + operationId: getUserScores + parameters: + - name: paginate + in: query + description: | + When set to `true`, the API will return a paginated result. + When set to `false` or unset, the API will return all the scores. + If this parameter is unset or false, then limit/sort/direction/next/previous will be ignored. + schema: + type: boolean + default: false + - name: sort + in: query + description: Sort + schema: + type: string + enum: + - creationDate + - modificationDate + - title + - name: direction + in: query + description: Sort direction + schema: + type: string + enum: + - asc + - desc + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: next + in: query + description: | + An opaque string cursor to fetch the next page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + - name: previous + in: query + description: | + An opaque string cursor to fetch the previous page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + responses: + '200': + description: The user scores + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScoreDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - scores + - scores.readonly +components: + securitySchemes: + OAuth2: + type: oauth2 + description: | + OAuth 2.0 authentication for your app or. Please only request the most restrictive and needed scopes. Using some of the scopes may require an additional review from our team. The Flat API supports **authorization code** and **implicit** flows. + flows: + authorizationCode: + authorizationUrl: https://flat.io/auth/oauth + tokenUrl: https://api.flat.io/oauth/access_token + scopes: + account.public_profile: | + Provides access to the basic person's public profile. Education profiles may be anonymized with this scope, you can request the scope `education_profile` to access to the a basic education account profile. + account.email: | + Provices access to the person's email. account.education_profile: | Provides access to the basic person's education profile and public organization information. scores.readonly: | @@ -4415,2058 +5033,3371 @@ components: edu.admin.users.readonly: Read-only access to the users and invitations of the organization. tasks.readonly: Read-only access to export tasks created by this account. schemas: - TutteoProduct: - description: The Tutteo product used by the user account - type: string - default: flat - enum: - - flat - - flatEdu - - msnippet - - embed - FlatLocales: + AppScopes: type: string - description: The user language - default: en + description: Available scopes enum: - - en - - en-GB - - es - - fr - - de - - it - - ja - - ja-HIRA - - ko - - nl - - pl - - pt - - pt-BR - - ro - - ru - - sv - - tr - - zh-Hans - OrganizationRoles: + - account.public_profile + - account.email + - account.education_profile + - scores.readonly + - scores.social + - scores + - collections.readonly + - collections.add_scores + - collections + - notifications.readonly + - edu.resources + - edu.resources.readonly + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + - edu.admin + - edu.admin.lti + - edu.admin.lti.readonly + - edu.admin.users + - edu.admin.users.readonly + - tasks.readonly + AssignmentType: type: string - description: User's Organization Role (for Edu users only) + description: Type of the assignment enum: - - admin - - billing - - teacher - - user - ClassRoles: + - none + - newScore + - scoreTemplate + - sharedWriting + - worksheet + - worksheetText + - performance + Assignment: + type: object + required: + - id + - type + - title + - attachments + - capabilities + properties: + id: + type: string + description: Unique identifier of the assignment + type: + $ref: '#/components/schemas/AssignmentType' + capabilities: + required: + - canEdit + - canPublishInClass + - canArchive + - canUnarchive + type: object + description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. + properties: + canEdit: + type: boolean + description: | + Whether the current user can edit the assignment + canPublishInClass: + type: boolean + description: | + Whether this assignment can be published in a class + canPublishInClassError: + type: object + required: + - code + - message + description: | + If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable and localized message for this error + canArchive: + type: boolean + description: | + Whether the current user can archive the assignment + canUnarchive: + type: boolean + description: | + Whether the current user can unarchive the assignment + title: + type: string + description: Title of the assignment + description: + type: string + description: Student instructions and content of the assignment (plain text) + descriptionHtml: + type: string + description: | + HTML version of student instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + teacherInstructions: + type: string + description: | + Teacher-only instructions for this assignment. + These instructions are only visible to teachers and are not returned when students view the assignment. + If `teacherInstructionsHtml` is provided, this field will contain the plain text version for compatibility. + teacherInstructionsHtml: + type: string + description: | + HTML version of teacher-only instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + cover: + type: string + description: The URL of the cover to display + coverFile: + type: string + description: The id of the cover to display + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + useDedicatedAttachments: + type: boolean + description: | + For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. + This boolean indicates that this assignment only supports dedicated attachments. + maxPoints: + type: number + description: | + If set, the grading will be enabled for the assignement + releaseGrades: + type: string + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + toolset: + type: string + description: The id of the associated toolset + nbPlaybackAuthorized: + type: number + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: + type: string + description: | + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + description: Assignment details + example: + id: 636a724a89a6eaa0a54c3900 + title: My first assignment + description: Get started with Flat + maxPoints: 100 + attachments: + - type: flat + score: '0000000000000000' + - type: link + url: https://flat.io/developers + - type: video + url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw + title: Flat - The online collaborative music notation software + description: Discover Flat on https://flat.io + html: + thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg + thumbnailHeight: 1052 + thumbnailWidth: 1868 + authorName: Flat + authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw + AssignmentUpdate: + type: object + description: Assignment Resource Editing + properties: + type: + $ref: '#/components/schemas/AssignmentType' + title: + type: string + description: Title of the assignment + maxLength: 1000 + minLength: 1 + description: + type: string + maxLength: 100000 + description: Student instructions and content of the assignment (plain text) + descriptionHtml: + type: string + maxLength: 100000 + description: | + HTML version of student instructions. + When provided, the plain text version will be automatically extracted for compatibility. + teacherInstructions: + type: string + maxLength: 100000 + description: Teacher-only instructions (plain text) + teacherInstructionsHtml: + type: string + maxLength: 100000 + description: | + HTML version of teacher-only instructions. + When provided, the plain text version will be automatically extracted for compatibility. + attachments: + type: array + items: + $ref: '#/components/schemas/ClassAttachmentCreation' + nbPlaybackAuthorized: + type: number + nullable: true + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + toolset: + type: string + nullable: true + description: | + The id of the toolset to apply to this assignment. + The toolset will be copied to the assignment as a dedicated object to prevent unexpected changes when making modifications to the template toolset. + This property can be set to null to delete the linked toolset and switch back to all the tools available for this assignment. + coverFile: + type: string + nullable: true + description: The id of the cover to display + cover: + type: string + nullable: true + description: The URL of the cover to display + maxPoints: + type: number + nullable: true + minimum: 0 + maximum: 10000 + description: | + If set, the grading will be enabled for the assignement with this value as the maximum of points + releaseGrades: + type: string + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: + type: string + description: | + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + example: + title: First assignment + description: Get started with Flat + maxPoints: 100 + attachments: + - type: flat + score: '0000000000000000' + - type: link + url: https://flat.io/developers + AssignmentSubmissionStudentsMode: type: string - description: User's Class Role (for Edu users only) + description: | + Submission mode for assignments: + - "single": Individual submissions (default) + - "group": Group submissions (for shared writing assignments) enum: - - teacher - - student - LicenseMode: + - single + - group + AssignmentGroup: + type: object + properties: + id: + type: string + description: The unique identifier of the group + name: + type: string + description: The display name of the group + parent: + type: string + description: The unique identifier of the parent class group. Only available for groups of type 'assignmentStudentsSubGroup'. May be null if the parent class group was deleted. + members: + type: array + items: + type: string + description: Array of user IDs that are members of this group + required: + - id + - name + - members + description: A group assigned to an assignment for shared writing assignments + ClassGroupIdsToApplyToAssignment: + type: array + nullable: true + items: + type: string + description: | + Optional list of specific class group IDs to apply to the assignment. + When transitioning to active state with group submission mode: + - If provided: Only these specific groups will be applied + - If not provided: All class groups will be applied, or randomized groups created if none exist + AssignmentCopy: + type: object + properties: + classroom: + type: string + description: The destination classroom where the assignment will be copied + assignment: + type: string + description: An optional destination assignment where the original assignement will be copied. Must be a draft. + scheduledDate: + type: string + description: | + The publication (scheduled) date of the assignment. + If this one is specified, the assignment will only be listed to the teachers of the class. + Alternatively the existing `scheduledDate` from the copied assignment will be used. + format: date-time + libraryParent: + type: string + description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` + verifyIfNotAlreadyInResourceLibrary: + type: boolean + description: Option to check if the assignment is already in Resource Library + required: + - classroom + - libraryParent + AssignmentSubmissionState: type: string - description: Mode of the license + description: State of the submission enum: - - credit - - site - LicenseSources: + - created + - turnedIn + - returned + - graded + AssignmentSubmissionHistoryState: type: string - description: Source of the license - default: order + description: State of the submission history enum: - - order - - trial - - voucher - - distributor - - subscription - - appStore - - playStore - - musicfirst - UserPublicSummary: + - created + - turnedIn + - returned + - graded + - reset + AssignmentSubmission: + type: object + required: + - id + - state + - classroom + - assignment + - creator + - creationDate + - attachments + - playback + - comments + properties: + id: + type: string + description: Unique identifier of the submission + state: + $ref: '#/components/schemas/AssignmentSubmissionState' + classroom: + type: string + description: | + Unique identifier of the classroom where the assignment was posted + assignment: + type: string + description: Unique identifier of the assignment + creator: + type: string + description: The User identifier of the student who created the submission + creationDate: + type: string + description: The date when the submission was created + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + submissionDate: + type: string + description: The date when the student submitted their work + returnDate: + type: string + description: The date when the teacher returned the work + returnCreator: + type: string + description: | + The User unique identifier of the teacher who returned the submission + grade: + type: number + nullable: true + description: Optional grade. If unset, no grade was set. + draftGrade: + type: number + nullable: true + description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission + maxPoints: + type: number + description: Optional max points for the grade. If set, a corresponding `draftGrade` or `grade` will be set. + exercisesIds: + type: array + items: + type: string + description: The ids of exercises when they need to be in a specific order + playback: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionPlayback' + comments: + type: object + properties: + total: + type: number + description: The total number of comments added to the submission + unread: + type: number + description: The number of unread comments for the current user + googleClassroom: + $ref: '#/components/schemas/GoogleClassroomSubmission' + microsoftGraph: + $ref: '#/components/schemas/MicrosoftGraphSubmission' + lti: + type: object + description: If set, this submission has a linked LTI 1.3 AGS or LTI 1.1 Outcomes + required: + - gradeService + properties: + gradeService: + type: string + description: | + The kind of grading service available for this submission: + + - `ags2p0`: LTI 1.3 Assignment and Grade Services 2.0 + - `outcomes1p1`: LTI 1.1 Outcomes 1.1 + enum: + - ags2p0 + - outcomes1p1 + sourcedid: + type: string + description: The sourcedid of the LTI submission when using LTI Outcomes + description: Assignment Submission + example: + id: 58c4955c226ffff257211a90 + classroom: 58c4725345cd836264f0b29e + assignment: 58c49068524c03ec576ca43c + creator: 559eb5c7f0d4d5e46d03781d + attachments: + - type: flat + score: 58c4955a226ffff257211a8d + title: Hello - Student + returnCreator: 559eb5c7f0d4d5e46d000000 + grade: 80 + draftGrade: 82 + googleClassroom: + id: CgsI-00000000000 + state: turned_in + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission + AssignmentSubmissionUpdate: + type: object + properties: + attachments: + type: array + items: + $ref: '#/components/schemas/ClassAttachmentCreation' + playback: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionPlayback' + submit: + type: boolean + description: If `true`, the submission will be marked as done + draftGrade: + type: number + nullable: true + minimum: 0 + maximum: 10000 + description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission + grade: + type: number + nullable: true + minimum: 0 + maximum: 10000 + description: Optional grade. If unset, no grade was set. + exercisesIds: + type: array + nullable: true + items: + type: string + description: The ids of exercises when they need to be in a specific order + return: + type: boolean + description: If `true`, the submission will be marked as done + description: Assignment Submission creation + example: + attachments: + - type: flat + score: 58c4955a226ffff257211a8d + title: Hello - Student + submit: true + AssignmentSubmissionComment: + description: Feedback comment added to an assignment submission type: object properties: id: type: string - description: The user unique identifier - type: + description: The comment unique identifier + user: type: string - description: The type of user account - enum: [user, guest] - product: - $ref: '#/components/schemas/TutteoProduct' - username: + description: The author unique identifier + submission: type: string - description: The user name (unique for the organization) - printableName: + description: The submission unique identifier + date: type: string - description: The name that can be directly printed (name, firstname & lastname, or username) - firstname: + description: The date when the comment was posted + format: date-time + modificationDate: type: string - description: Firstname of the user (for education users) - lastname: + description: The date of the last comment modification + format: date-time + comment: type: string - description: Lastname of the user (for education users) - name: + description: The comment text + unread: + type: boolean + description: True if the comment is unread by the current user + AssignmentSubmissionCommentCreation: + description: Creation of a assignment submission comment + required: + - comment + type: object + properties: + comment: type: string - description: A displayable name for the user (for consumer users) - picture: + description: The comment text + AssignmentSubmissionPlayback: + type: object + description: Playback used by a student for an assignment submission. + required: + - score + - nbPlayAttempt + properties: + score: type: string - nullable: true - description: The URL of the picture to display - badges: + description: The score unique identifier + nbPlayAttempt: + type: number + description: Number of times the score was played + AssignmentSubmissionHistory: + description: History item of the submission + type: object + required: + - date + - users + properties: + date: + description: The date when the submission was changed + type: string + format: date-time + classroom: + description: The classroom unique identifier where the submission was changed + type: string + assignment: + description: The assignment unique identifier where the submission was changed + type: string + submission: + description: The submission unique identifier + type: string + users: + description: The user(s) unique identifier(s) who made the change type: array - description: | - List of badges for the user profile: - - - `power` - - `staff` - - `composerOfTheMonth` - - `ambassador` - - `challenge` items: type: string - description: Badge name - organization: + source: + description: The source of the change if the change was made by a third-party software type: string - description: Organization ID (for Edu users only) - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - classRole: - $ref: '#/components/schemas/ClassRoles' - htmlUrl: + enum: + - lti + - googleClassroom + - microsoftGraph + state: + $ref: '#/components/schemas/AssignmentSubmissionHistoryState' + draftGrade: + type: number + description: The numerator of the grade at this time in the submission grade history + grade: + type: number + description: The numerator of the grade at this time in the submission grade history + maxPoints: + type: number + description: The denominator of the grade at this time in the submission grade history + comment: type: string - description: Link to user profile (for Indiv. users only) - required: - - id - - picture - - product - - type - - username - UserPublic: + description: The comment that is made to this submission + dueDate: + type: string + description: The due date of this assignment + format: date-time + attachment: + type: object + properties: + score: + type: string + description: The score identifier that changed + revision: + type: string + description: The revision identifier that changed + title: + type: string + description: The title of the score that changed + ClassAssignment: type: object properties: id: type: string - description: The user unique identifier + description: Unique identifier of the assignment type: + $ref: '#/components/schemas/AssignmentType' + capabilities: + required: + - canEdit + - canPublishInClass + - canArchive + - canUnarchive + type: object + description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. + properties: + canEdit: + type: boolean + description: | + Whether the current user can edit the assignment + canPublishInClass: + type: boolean + description: | + Whether this assignment can be published in a class + canPublishInClassError: + type: object + required: + - code + - message + description: | + If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable and localized message for this error + canArchive: + type: boolean + description: | + Whether the current user can archive the assignment + canUnarchive: + type: boolean + description: | + Whether the current user can unarchive the assignment + title: type: string - description: The type of user account - enum: [user, guest] - product: - $ref: '#/components/schemas/TutteoProduct' - username: + description: Title of the assignment + description: type: string - description: The user name (unique for the organization) - printableName: + description: Student instructions and content of the assignment (plain text) + descriptionHtml: type: string - description: The name that can be directly printed (name, firstname & lastname, or username) - firstname: + description: | + HTML version of student instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + teacherInstructions: type: string - description: Firstname of the user (for education users) - lastname: + description: | + Teacher-only instructions for this assignment. + These instructions are only visible to teachers and are not returned when students view the assignment. + If `teacherInstructionsHtml` is provided, this field will contain the plain text version for compatibility. + teacherInstructionsHtml: type: string - description: Lastname of the user (for education users) - name: + description: | + HTML version of teacher-only instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + cover: type: string - description: A displayable name for the user (for consumer users) - picture: + description: The URL of the cover to display + coverFile: + type: string + description: The id of the cover to display + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + useDedicatedAttachments: + type: boolean + description: | + For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. + This boolean indicates that this assignment only supports dedicated attachments. + maxPoints: + type: number + description: | + If set, the grading will be enabled for the assignement + releaseGrades: + type: string + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + toolset: + type: string + description: The id of the associated toolset + nbPlaybackAuthorized: + type: number + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: type: string - nullable: true - description: The URL of the picture to display - badges: - type: array description: | - List of badges for the user profile: + For performance assignments: recording type that will be either 'audio' or 'video'. - - `power` - - `staff` - - `composerOfTheMonth` - - `ambassador` - - `challenge` - items: - type: string - description: Badge name - organization: + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + creator: type: string - description: Organization ID (for Edu users only) - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - classRole: - $ref: '#/components/schemas/ClassRoles' - htmlUrl: + description: | + The User unique identifier of the creator of this assignment + state: type: string - description: Link to user profile (for Indiv. users only) - bio: + description: State of the assignment + enum: + - draft + - active + - archived + classroom: type: string - description: User's biography - registrationDate: + description: The unique identifier of the class where this assignment was posted + creationDate: type: string - description: Date the user signed up + description: The creation date of this assignment format: date-time - likedScoresCount: - type: integer - description: Number of the scores liked by the user - followersCount: - type: integer - description: Number of followers the user have - followingCount: - type: integer - description: Number of people the user follow - ownedPublicScoresCount: - type: integer - description: Number of public scores the user have - likesCount: - type: integer - description: Number of likes on the user published scores - playsCount: - type: integer - description: Number of plays on the user published scores - coverPicture: + scheduledDate: type: string - description: Cover picture (backgroud) for the profile - nullable: true - profileTheme: + description: | + The publication (scheduled) date of the assignment. + If this one is specified, the assignment will only be listed to the teachers of the class. + format: date-time + dueDate: type: string - description: Theme (background) for the profile - instruments: - type: array description: | - An array of the instrument identifiers. - The format of the strings is `{instrument-group}.{instrument-id}`. + The due date of this assignment, late submissions will be marked as + paste due. + format: date-time + assigneeMode: + type: string + description: Possible modes of assigning assignments + enum: + - everyone + - selected + assignedStudents: + type: array items: type: string - links: - $ref: '#/components/schemas/UserCommunityProfileLinks' + description: Identifiers for the students that have access to the assignment + assignedGroups: + type: array + items: + $ref: '#/components/schemas/AssignmentGroup' + description: Groups that have access to the assignment (for shared writing assignments) + submissions: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmission' + googleClassroom: + $ref: '#/components/schemas/GoogleClassroomCoursework' + microsoftGraph: + $ref: '#/components/schemas/MicrosoftGraphAssignment' + mfc: + type: object + description: A MusicFirst Classroom assignment + properties: + id: + type: string + description: Unique identifier of the course on MusicFirst Task + alternateLink: + type: string + description: Link to MusicFirst Classroom task + canvas: + type: object + description: A Canvas LMS assignment + properties: + id: + type: string + description: Unique identifier of the course on Canvas assignment + alternateLink: + type: string + description: Link to Canvas assignment + lti: + type: object + description: An LTI assignment + properties: + id: + type: string + description: Resource ID in the LMS + issue: + type: string + description: Detected issue for this assignment required: + - attachments + - capabilities - id - - picture - - product + - title - type - - username - UserDetailsAdmin: + ClassAssignmentUpdate: type: object properties: - id: - type: string - description: The user unique identifier type: + $ref: '#/components/schemas/AssignmentType' + title: type: string - description: The type of user account - enum: [user, guest] - product: - $ref: '#/components/schemas/TutteoProduct' - username: + description: Title of the assignment + maxLength: 1000 + minLength: 1 + description: type: string - description: The user name (unique for the organization) - printableName: + maxLength: 100000 + description: Student instructions and content of the assignment (plain text) + descriptionHtml: type: string - description: The name that can be directly printed (name, firstname & lastname, or username) - firstname: + maxLength: 100000 + description: | + HTML version of student instructions. + When provided, the plain text version will be automatically extracted for compatibility. + teacherInstructions: type: string - description: Firstname of the user (for education users) - lastname: + maxLength: 100000 + description: Teacher-only instructions (plain text) + teacherInstructionsHtml: type: string - description: Lastname of the user (for education users) - name: + maxLength: 100000 + description: | + HTML version of teacher-only instructions. + When provided, the plain text version will be automatically extracted for compatibility. + attachments: + type: array + items: + $ref: '#/components/schemas/ClassAttachmentCreation' + nbPlaybackAuthorized: + type: number + nullable: true + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + toolset: type: string - description: A displayable name for the user (for consumer users) - picture: + nullable: true + description: | + The id of the toolset to apply to this assignment. + The toolset will be copied to the assignment as a dedicated object to prevent unexpected changes when making modifications to the template toolset. + This property can be set to null to delete the linked toolset and switch back to all the tools available for this assignment. + coverFile: type: string nullable: true - description: The URL of the picture to display - badges: - type: array + description: The id of the cover to display + cover: + type: string + nullable: true + description: The URL of the cover to display + maxPoints: + type: number + nullable: true + minimum: 0 + maximum: 10000 description: | - List of badges for the user profile: - - - `power` - - `staff` - - `composerOfTheMonth` - - `ambassador` - - `challenge` - items: - type: string - description: Badge name - organization: + If set, the grading will be enabled for the assignement with this value as the maximum of points + releaseGrades: type: string - description: Organization ID (for Edu users only) - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - classRole: - $ref: '#/components/schemas/ClassRoles' - htmlUrl: + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: type: string - description: Link to user profile (for Indiv. users only) - email: + description: | + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + state: + type: string + description: State of the assignment + enum: + - draft + - active + dueDate: type: string - description: Email of the user - format: email - lastActivityDate: + nullable: true + description: | + The due date of this assignment, late submissions will be marked as paste due. If not set, the assignment won't have a due date. + format: date-time + scheduledDate: type: string - description: Date of the last user activity + nullable: true + description: | + The publication (scheduled) date of the assignment. + If this one is specified, the assignment will only be listed to the teachers of the class. format: date-time - license: + googleClassroom: type: object + description: Google Classroom options for this assignment properties: - id: - type: string - description: ID of the current license - expirationDate: + topicId: type: string - description: Date when the license expires - format: date-time - source: - $ref: '#/components/schemas/LicenseSources' - mode: - $ref: '#/components/schemas/LicenseMode' - active: - type: boolean - description: ID of the current license - description: Current active license of the user - groups: - description: For Flat for Education accounts, list of Group identifiers the user is part of. + nullable: true + description: Identifier of the topic where the assignment is created + microsoftGraph: + type: object + description: Microsoft Graph options for this assignment + properties: + categories: + description: List of categories this assignment belongs to + type: array + nullable: true + items: + type: string + assigneeMode: + type: string + description: Possible modes of assigning assignments + enum: + - everyone + - selected + assignedStudents: type: array items: type: string - description: Unique group identifier - required: - - id - - picture - - product - - type - - username - UserCreation: - required: - - password - - username + description: Identifiers for the students that have access to the assignment + classGroupIds: + $ref: '#/components/schemas/ClassGroupIdsToApplyToAssignment' + ApiAccessToken: type: object properties: - username: - maxLength: 30 - minLength: 1 - pattern: ^[A-Za-z0-9\-_.]+$ - type: string - description: Username of the new account - firstname: - maxLength: 60 + id: type: string - description: First name of the user - lastname: - maxLength: 60 + description: Unique identifier of this private token + name: type: string - description: Last name of the user - email: + description: Name of the personal access token + token: type: string - description: Email of the new account - format: email - password: - minLength: 6 - maxLength: 1000 + description: | + The token. This token will only be returned once, then only the first 4 characters will be returned. + issuedDate: type: string - description: Password of the new account - format: password - locale: - $ref: '#/components/schemas/FlatLocales' - role: - description: Role of the new account + description: | + The date then this token was issued + format: date-time + expirationDate: type: string - default: user - enum: - - user - - teacher - - admin - description: User creation - UserAdminUpdate: + description: | + The date then this token will expire + format: date-time + scopes: + type: array + description: | + The list of scopes associated to the token + items: + $ref: '#/components/schemas/AppScopes' + description: An API access token + example: + id: '0000000000000000' + name: API Access Token name + token: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + scopes: + - account.public_profile + - account.education_profile + - collections.readonly + ClassRoles: + type: string + description: User's Class Role (for Edu users only) + enum: + - teacher + - student + ClassCreation: + required: + - name type: object properties: - password: - minLength: 6 - maxLength: 1000 - type: string - description: Password of the account - format: password - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - username: - maxLength: 30 - minLength: 1 - pattern: ^[A-Za-z0-9\-_.]+$ - type: string - description: Username of the account - firstname: - maxLength: 60 - type: string - description: First name of the user - lastname: - maxLength: 60 + name: + maxLength: 255 type: string - description: Last name of the user - email: + description: The name of the new class + section: + maxLength: 255 type: string - description: Email of the account - format: email - description: User update as an organization admin - UserAzureDetails: + description: The section of the new class + level: + $ref: '#/components/schemas/ClassGradeLevel' + skillsFocused: + $ref: '#/components/schemas/EduSkillsFocused' + size: + type: number + minimum: 0 + nullable: true + description: Number of students in the classroom + description: Creation of a classroom + example: + name: Music Theory Course + section: Music Theory 101 + ClassUpdate: type: object properties: - oid: - type: string - description: User object identifier on Azure AD - hd: + name: + maxLength: 255 type: string - description: User tenant (domain name) - preferredUsername: + description: The name of the class + section: + maxLength: 255 type: string - description: User Preferred Username (UPN), i.e. the main email of the user - UserDetails: + description: The section of the class + level: + $ref: '#/components/schemas/ClassGradeLevel' + skillsFocused: + $ref: '#/components/schemas/EduSkillsFocused' + size: + type: number + minimum: 0 + nullable: true + description: Number of students in the classroom + description: Update of a classroom + example: + name: Music Theory Course + section: Music Theory 101 + ClassDetails: type: object + required: + - id + - name + - state + - creationDate properties: id: type: string - description: The user unique identifier - type: - type: string - description: The type of user account - enum: [user, guest] - product: - $ref: '#/components/schemas/TutteoProduct' - username: - type: string - description: The user name (unique for the organization) - printableName: - type: string - description: The name that can be directly printed (name, firstname & lastname, or username) - firstname: - type: string - description: Firstname of the user (for education users) - lastname: - type: string - description: Lastname of the user (for education users) + description: The unique identifier of the class + state: + $ref: '#/components/schemas/ClassState' name: type: string - description: A displayable name for the user (for consumer users) - picture: - type: string - nullable: true - description: The URL of the picture to display - badges: - type: array - description: | - List of badges for the user profile: - - - `power` - - `staff` - - `composerOfTheMonth` - - `ambassador` - - `challenge` - items: - type: string - description: Badge name + description: The name of the class + section: + type: string + description: The section of the class + description: + type: string + description: An optionnal description for this class organization: type: string - description: Organization ID (for Edu users only) - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - classRole: - $ref: '#/components/schemas/ClassRoles' - htmlUrl: + description: The unique identifier of the Organization owning this class + owner: type: string - description: Link to user profile (for Indiv. users only) - bio: + description: The unique identifier of the User owning this class + creationDate: type: string - description: User's biography - registrationDate: + description: The date when the class was create + format: date-time + modificationDate: type: string - description: Date the user signed up + description: The date when the class was last modified format: date-time - likedScoresCount: - type: integer - description: Number of the scores liked by the user - followersCount: - type: integer - description: Number of followers the user have - followingCount: - type: integer - description: Number of people the user follow - ownedPublicScoresCount: - type: integer - description: Number of public scores the user have - likesCount: - type: integer - description: Number of likes on the user published scores - playsCount: - type: integer - description: Number of plays on the user published scores - coverPicture: + enrollmentCode: type: string - description: Cover picture (backgroud) for the profile + description: | + [Teachers only] The enrollment code that can be used by the students to join the class + theme: + type: string + description: The theme identifier using in Flat User Interface + assignmentsCount: + type: number + description: The number of assignments created in the class + studentsGroup: + $ref: '#/components/schemas/GroupDetails' + teachersGroup: + $ref: '#/components/schemas/GroupDetails' + issues: + type: object + description: Detected issues for this class + properties: + sync: + type: array + description: Synchronization issues for the class + items: + type: object + description: A sync issue + properties: + id: + type: string + description: The account user identifier + email: + type: string + description: The email address of the user concerned by this sync issue + reason: + type: string + enum: + - otherOrgnanization + - productMigration + - disabledAccount + description: The reason why the account cannot be synced + googleClassroom: + type: object + properties: + id: + type: string + description: The course identifier on Google Classroom + alternateLink: + type: string + description: Absolute link to this course in the Classroom web UI + description: Google Classroom course-related information + googleDrive: + type: object + properties: + teacherFolderId: + type: string + description: | + [Teachers only] The Drive directory identifier of the teachers' folder + teacherFolderAlternateLink: + type: string + description: | + [Teachers only] The Drive URL of the teachers' folder + description: Google Drive course-related information provided by Google Classroom + microsoftGraph: + type: object + properties: + id: + type: string + description: The course identifier on Microsoft Graph + lti: + description: Info about LTI context (1.1 and 1.3) + type: object + properties: + contextId: + type: string + description: Unique context identifier provided + contextTitle: + type: string + description: Context title + contextLabel: + type: string + description: Context label + hasNrpsService: + type: boolean + description: If true, the class has been synchronized with the LTI 1.3 NRPS 2.0 service + canvas: + type: object + properties: + id: + type: string + description: Unique identifier of the course on Canvas + domain: + type: string + description: Canvas instance domain (e.g. "canvas.instructure.com") + description: Meta information provided by Canvs LMS + mfc: + type: object + properties: + id: + type: string + description: Unique identifier of the course on MusicFirst Classroom + alternateLink: + type: string + description: Link to MusicFirst Classroom class + description: Meta information provided by Canvs LMS + clever: + type: object + properties: + id: + type: string + description: Clever section unique identifier + creationDate: + type: string + description: The creation date of the section on clever + format: date-time + modificationDate: + type: string + description: The last modification date of the section on clever + format: date-time + subject: + type: string + description: Normalized subject of the course + enum: + - english/language arts + - math + - science + - social studies + - language + - homeroom/advisory + - interventions/online learning + - technology and engineering + - PE and health + - arts and music + - other + termName: + type: string + description: Name of the term when this course happens + termStartDate: + type: string + description: Beginning date of the term + format: date-time + termEndDate: + type: string + description: End date of the term + format: date-time + description: Clever.com section-related information + level: + $ref: '#/components/schemas/ClassGradeLevel' + skillsFocused: + $ref: '#/components/schemas/EduSkillsFocused' + size: + type: number nullable: true - profileTheme: + description: Number of students in the classroom + description: A classroom + example: + id: '100000000000000000000001' + state: active + name: Music Theory 101 + section: Music Theory 101 + organization: '100000000000000000000002' + owner: '100000000000000000000003' + enrollmentCode: jm447ear + theme: blue-8 + assignmentsCount: 10 + googleClassroom: + id: '00000000' + alternateLink: http://classroom.google.com/c/music-theory + microsoftGraph: + id: 00000000-0000-0000-0000-000000000000 + googleDrive: + teacherFolderAlternateLink: https://drive.google.com/drive/folders/0B-0000000000000000 + teacherFolderId: 0B-0000000000000000 + lti: + contextId: '042' + contextLabel: MUSIC + contextTitle: Music Theory 101 + canvas: + id: '000000000' + ClassAttachmentCreation: + type: object + properties: + type: type: string - description: Theme (background) for the profile - instruments: - type: array description: | - An array of the instrument identifiers. - The format of the strings is `{instrument-group}.{instrument-id}`. - items: - type: string - links: - $ref: '#/components/schemas/UserCommunityProfileLinks' - azureDetails: - $ref: '#/components/schemas/UserAzureDetails' - privateProfile: - type: boolean - description: Tell either this user profile is private or not (individual accounts only) - locale: - $ref: '#/components/schemas/FlatLocales' - groups: - description: For Flat for Education accounts, list of Group identifiers the user is part of. - type: array - items: - type: string - description: Unique group identifier - pictureFile: + The type of the attachment posted: + * `rich`, `photo`, `video` are attachment types that are automatically resolved from a `link` attachment. + * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. + enum: + - rich + - photo + - video + - link + - flat + - googleDrive + - worksheet + score: + type: string + description: | + A unique Flat score identifier. The user creating the assignment must at least have read access to the document. If the user has admin rights, new group permissions will be automatically added for the + teachers and students of the class. + worksheet: + type: string + description: An unique worksheet identifier + revision: type: string - nullable: true - description: The ID of the user profile picture - coverPictureFile: + description: An unique revision identifier of a score + partUuid: type: string - nullable: true - description: The ID of the user profile cover picture - required: - - id - - picture - - product - - type - - username - UserSigninLinkCreation: - type: object - properties: - destinationPath: + description: The UUID of the instrument part selected for this attachment (for performance submissions) + sharingMode: + $ref: '#/components/schemas/MediaScoreSharingMode' + lockScoreTemplate: + type: boolean + description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. + url: type: string - description: Path to redirect to after signin - default: / + description: The URL of the attachment. + googleDriveFileId: + type: string + description: The ID of the Google Drive File + teacherOnly: + type: boolean + description: Flag indicating if this attachment should only be visible to teachers + default: false + description: | + Attachment creation for an assignment or stream post. + This attachment must contain a `score` or an `url`, all the details of this one will be resolved and returned as `ClassAttachment` once the assignment or stream post is created. example: - destinationPath: /class - UserSigninLink: + type: flat + score: '000000000000000001' + sharingMode: copy + ClassGradeLevel: + type: string + description: Class grade level + enum: + - elementary + - middle + - high + - university + - other + EduResourceUseInClass: + description: Use an education resource in class type: object + required: + - classroom properties: - url: + classroom: type: string - description: URL to use to sign in to this account - expirationDate: + description: The destination classroom where the resource will be copied. + assignment: type: string - description: Date when the link expires - format: date-time - example: - url: https://demo.flat.io/auth/signin-link/00000000-0000-0000-0000-000000000000?next=%2F - expirationDate: 2022-01-01T00:00:00Z - Group: + description: An optional destination assignment where the original assignement will be copied. Must be a draft. + MicrosoftGraphAssignment: type: object + description: A Microsoft Teams assignment properties: id: type: string - description: The unique identifier of the group - name: - type: string - description: The display name of the group - type: + description: Identifier of the assignment assigned by Microsoft Teams + state: type: string description: | - The type of the group: - * `generic`: A group created by a Flat user - * `classTeachers`: A group created automaticaly by Flat that contains - the teachers of a class - * `classStudents`: A group created automaticaly by Flat that contains - the studnets of a class + State of the assignment on Microsoft Teams. + + * `draft`: Assignment is in draft mode + * `scheduled`: Assignment is scheduled to be published at a future date + * `published`: Assignment has been published to students + * `assigned`: Assignment has been assigned (legacy status) + * `inactive`: Assignment is inactive enum: - - generic - - classTeachers - - classStudents - usersCount: - type: number - description: The number of users in this group - readOnly: - type: boolean - description: | - `True` if the group is set in read-only - organization: + - draft + - scheduled + - published + - assigned + - inactive + alternateLink: type: string - description: | - If the group is related to an organization, this field will contain - the unique identifier of the organization - creationDate: + description: Absolute link to this assignment in the Microsoft Teams web UI + assignDateTime: type: string - description: The creation date of the group format: date-time - description: A group of users - example: - id: '0000000000000000000000043' - name: 5th grade - type: classTeachers - userCount: 24 - readOnly: true - organization: '0000000000000000000000042' - creationDate: 2015-01-19T00:22:02.387000Z - ResourceRights: - type: object - required: - - aclRead - - aclWrite - - aclAdmin - properties: - aclRead: - type: boolean - default: false - description: | - `True` if the current user can read the current document - aclWrite: - type: boolean - default: false description: | - `True` if the current user can modify the current document. + The date when the assignment will become active on Microsoft Teams. - If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. - aclAdmin: - type: boolean - default: false + If set to a future date, the assignment will have status `scheduled` and won't be visible to students until this date. + categories: + type: array + description: List of categories where this assignment is published under + items: + type: string + description: A Microsoft Teams assignment category ID + assignToType: + type: string description: | - `True` if the current user can manage the current document (i.e. share, delete) + Recipient configuration for this assignment on Microsoft Teams. - If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. - isCollaborator: - type: boolean - default: false + * `class`: Assignment is visible to all students in the class + * `individual`: Assignment is visible only to specific assigned students + enum: + - class + - individual + assignedStudentsMsIds: + type: array description: | - `True` if the current user is a collaborator of the current document (direct or via group). - collaboratorType: + When assignToType is 'individual', array of Microsoft Azure user IDs of students assigned to this assignment. + These are the students who can see and submit to this assignment on Teams. + items: + type: string + example: + id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda + state: scheduled + alternateLink: https://teams.microsoft.com/l/entity + assignDateTime: 2025-10-20T09:00:00Z + categories: + - 0a012acd-6e78-4cd0-89a9-80d296e48f82 + GoogleClassroomCoursework: + type: object + properties: + id: type: string - enum: [owner, user, group] - description: | - The type of the collaborator for the resource - description: The rights of the current user on a score or collection + description: Identifier of the coursework assigned by Classroom + state: + type: string + description: State of the coursework + alternateLink: + type: string + description: Absolute link to this coursework in the Classroom web UI + topicId: + type: string + nullable: true + description: Identifier of the topic where the assignment is created + description: A coursework on Google Classroom example: - aclRead: true - aclWrite: true - aclAdmin: true - isCollaborator: true - ResourceCollaborator: + id: '1235665432' + state: draft + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/detail + GoogleClassroomSubmission: type: object + required: + - id + - state + - alternateLink properties: - aclRead: - type: boolean - default: false - description: | - `True` if the current user can read the current document - aclWrite: - type: boolean - default: false - description: | - `True` if the current user can modify the current document. - - If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. - aclAdmin: - type: boolean - default: false - description: | - `True` if the current user can manage the current document (i.e. share, delete) - - If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. - isCollaborator: - type: boolean - default: false - description: | - `True` if the current user is a collaborator of the current document (direct or via group). - collaboratorType: + id: type: string - enum: [owner, user, group] - description: | - The type of the collaborator for the resource + description: Identifier of the coursework submission assigned by Classroom + state: + type: string + description: State of the submission on Google Classroom + alternateLink: + type: string + description: Absolute link to this coursework in the Classroom web UI + description: A coursework submission on Google Classroom + example: + id: CgsI-00000000000 + state: turned_in + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission + ClassState: + type: string + description: The state of a classroom + enum: + - active + - inactive + - archived + - deleted + Collection: + type: object + required: + - id + - title + - htmlUrl + - type + - privacy + - creationDate + - capabilities + - contents + properties: id: type: string - description: The unique identifier of the permission - date: + description: Unique identifier of the collection + title: type: string - format: date-time - description: The date when the permission was added - score: + description: The title of the collection + htmlUrl: + type: string + description: The url where the collection can be viewed in a web browser + format: url + type: + $ref: '#/components/schemas/CollectionType' + labelKey: + type: string + description: | + Product-specific translation key for the collection type. + + Only set for specific collection types: + * For `regular` type: `playlist` (Flat) or `collection` (Flat for Education) + * For `collaborations` type: `collaboration` (Flat) or `shared-scores` (Flat for Education) + + Not set for other collection types. + privacy: + $ref: '#/components/schemas/CollectionPrivacy' + sharingKey: + type: string + description: The private sharing key of the collection (available when the `privacy` mode is set to `privateLink`) + app: + $ref: '#/components/schemas/CollectionApp' + creationDate: type: string - description: If this object is a permission of a score, this property will contain the unique identifier of the score - collection: + description: The date when the collection was created + format: date-time + modificationDate: type: string - description: If this object is a permission of a collection, this property will contain the unique identifier of the collection + description: The date when the collection was last modified + format: date-time user: - $ref: '#/components/schemas/UserPublic' - group: - $ref: '#/components/schemas/Group' - userEmail: + $ref: '#/components/schemas/UserPublicSummary' + organization: type: string description: | - If the collaborator is not a user of Flat yet, this field will contain their email. - invited: + If the score has been created in an organization, the identifier of this organization. + rights: + $ref: '#/components/schemas/ResourceRights' + collaborators: + type: array + description: The list of the collaborators of the collection + items: + $ref: '#/components/schemas/ResourceCollaborator' + isPinned: type: boolean - description: | - If this property is `true`, this is still a pending invitation - required: - - aclAdmin - - aclRead - - aclWrite - ResourceCollaboratorCreation: + description: Whether the collection is pinned by the owner + contents: + type: object + description: The contents of the collection + required: + - scoresCount + properties: + scoresCount: + type: integer + description: The number of scores in the collection + capabilities: + type: object + required: + - canEdit + - canShare + - canDelete + - canAddScores + - canDeleteScores + properties: + canEdit: + type: boolean + description: | + Whether the current user can modify the metadata for the collection + canShare: + type: boolean + description: | + Whether the current user can modify the sharing settings for the collection + canDelete: + type: boolean + description: | + Whether the current user can delete the collection + canAddScores: + type: boolean + description: | + Whether the current user can add scores to the collection + + If this collection has the `type` `trash`, this property will be set to `false`. Use `DELETE /v2/scores/{score}` to trash a score. + canDeleteScores: + type: boolean + description: | + Whether the current user can delete scores from the collection + + If this collection has the `type` `trash`, this property will be set to `false`. Use `POST /v2/scores/{score}/untrash` to restore a score. + description: Capabilities the current user has on this collection. Each capability corresponds to a fine-grained action that a user may take. + collections: + type: array + description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. + items: + type: string + description: Collection of scores + CollectionCreation: type: object properties: - user: - type: string - description: The unique identifier of a Flat user - group: - type: string - description: The unique identifier of a Flat group - userEmail: - type: string - description: | - Fill this field to invite an individual user by email. - userToken: + title: + maxLength: 300 + minLength: 1 type: string - description: | - Token received in an invitation to join the score. - aclRead: - type: boolean - description: | - `True` if the related user can read the score. (probably true if the user has a permission on the document). - default: true - aclWrite: - type: boolean - description: | - `True` if the related user can modify the score. - default: false - aclAdmin: - type: boolean - description: | - `True` if the related user can can manage the current document, i.e. changing the document permissions and deleting the document - default: false - description: Add a collaborator to a resource. + description: The title of the collection + privacy: + $ref: '#/components/schemas/CollectionPrivacy' example: - userEmail: jdoe@flat.io - aclRead: true - aclWrite: true - aclAdmin: false - ScoreLicense: + title: Jazz scores + privacy: private + CollectionModification: + type: object + properties: + title: + maxLength: 300 + minLength: 1 + type: string + description: The title of the collection + privacy: + $ref: '#/components/schemas/CollectionPrivacy' + description: Edit the collection metadata + CollectionType: type: string - nullable: true description: | - License of the creation. Read more about the Creative Commons licenses on https://creativecommons.org/licenses/ + Type of the collection. + The type will influence the capabilitied available on the collections and how this collection is/can be populated. + + - `root`: **Deprecated.** Previously the root collection of the user. The `allScores` virtual collection should be used instead. + - `regular`: A regular collection created by the user. This collection can be deleted and modified by the user. + - `app`: An automatically created collection containing the scores created by an app (e.g. Music Snippet) + - `trash`: An automatically created collection containing the trashed scores. + + Virtual collections: + + - `allScores`: All the scores contained in the user account + - `collaborations`: All shared scores by the user or someone else + - `likes`: Liked scores enum: - - copyright - - cc0 - - cc-by - - cc-by-sa - - cc-by-nd - - cc-by-nc - - cc-by-nc-sa - - cc-by-nc-nd - - - ScoreCreationType: + - root + - regular + - app + - trash + - allScores + - collaborations + - likes + CollectionPrivacy: type: string - nullable: true - description: The type of creation (an orginal, an arrangement) + default: private + description: | + The collection main privacy mode. + + - `private`: The collection is private and can only be accessed, modified, and administered by specified collaborators. enum: - - original - - arrangement - - other - - - ScoreDetails: + - private + CollectionApp: type: object + description: For App collections, the details of the app that created the collection properties: id: type: string - description: The unique identifier of the score - sharingKey: - type: string - description: The private sharing key of the score (available when the `privacy` mode is set to `privateLink`) - title: - type: string - description: The title of the score - privacy: - $ref: '#/components/schemas/ScorePrivacy' - user: - $ref: '#/components/schemas/UserPublic' - htmlUrl: - type: string - description: The url where the score can be viewed in a web browser - format: url - editHtmlUrl: - type: string - description: The url where the score can be edited in a web browser - format: url - subtitle: + description: The app unique identifier + name: type: string - description: Subtitle of the score - lyricist: + description: The name of the app + logo: type: string - description: Lyricist of the score - arranger: + description: The app logo url + FlatLocalesString: + type: string + description: | + The user language. Input values will be automatically normalized to a supported locale code. Unknown locales will default to `en`. + + Current supported locales include: `da`, `de`, `en`, `en-GB`, `es`, `fi`, `fil`, `fr`, `fr-CA`, `hi`, `id`, `it`, `ja`, `ja-HIRA`, `ko`, `ms`, `nb`, `nl`, `pl`, `pt`, `pt-BR`, `ro`, `ru`, `sv`, `tr`, `zh-Hans`, `zh-HK`, `zh-TW` + default: en + ScoreTrackCreationResponse: + type: object + required: + - track + properties: + track: + $ref: '#/components/schemas/ScoreTrack' + description: Response for track creation including optional upload information + AssignmentCopyResponse: + type: object + properties: + id: type: string - description: Arranger of the score - composer: + description: Unique identifier of the assignment + type: + $ref: '#/components/schemas/AssignmentType' + capabilities: + required: + - canEdit + - canPublishInClass + - canArchive + - canUnarchive + type: object + description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. + properties: + canEdit: + type: boolean + description: | + Whether the current user can edit the assignment + canPublishInClass: + type: boolean + description: | + Whether this assignment can be published in a class + canPublishInClassError: + type: object + required: + - code + - message + description: | + If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable and localized message for this error + canArchive: + type: boolean + description: | + Whether the current user can archive the assignment + canUnarchive: + type: boolean + description: | + Whether the current user can unarchive the assignment + title: type: string - description: Composer of the score + description: Title of the assignment description: type: string - description: Description of the creation - tags: - type: array - description: Tags describing the score - items: - pattern: ^[a-zA-Z0-9]{1,30}$ - type: string - creationType: - $ref: '#/components/schemas/ScoreCreationType' - license: - $ref: '#/components/schemas/ScoreLicense' - licenseText: + description: Student instructions and content of the assignment (plain text) + descriptionHtml: type: string - description: Additional license text written on the exported/printed score - durationTime: - type: number - description: In seconds, an approximative duration of the score - numberMeasures: - type: integer - description: The number of measures in the score - mainTempoQpm: - type: number - description: The main tempo of the score (in QPM) - mainKeySignature: - type: number - description: The main key signature of the score (expressed between -7 and 7). - rights: - $ref: '#/components/schemas/ResourceRights' - collaborators: - type: array - description: The list of the collaborators of the score - items: - $ref: '#/components/schemas/ResourceCollaborator' - creationDate: + description: | + HTML version of student instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + teacherInstructions: type: string - description: The date when the score was created - format: date-time - modificationDate: + description: | + Teacher-only instructions for this assignment. + These instructions are only visible to teachers and are not returned when students view the assignment. + If `teacherInstructionsHtml` is provided, this field will contain the plain text version for compatibility. + teacherInstructionsHtml: type: string - description: The date of the last revision of the score - format: date-time - publicationDate: + description: | + HTML version of teacher-only instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + cover: type: string - description: The date when the score was published on Flat - format: date-time - scheduledDeletionDate: + description: The URL of the cover to display + coverFile: type: string + description: The id of the cover to display + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + useDedicatedAttachments: + type: boolean description: | - The date when the score will be definitively deleted. - This date can be in the past if the score will be deleted at the next deletion batch, in this case you can display something like "Deleted shortly". - - Schedule: - - * For all paying users, the scores will be definitively deleted after 90 days. - * For free users, the scores are no longer available after 24 hours, an can be restored with a paying account up to 90 days. - format: date-time - highlightedDate: - type: string - description: The date when the score was highlighted (featured) on our community - format: date-time - organization: + For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. + This boolean indicates that this assignment only supports dedicated attachments. + maxPoints: + type: number + description: | + If set, the grading will be enabled for the assignement + releaseGrades: type: string + enum: + - auto + - manual description: | - If the score has been created in an organization, the identifier of this organization. This property is especially used with the score privacy `organizationPublic`. - parentScore: + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + toolset: + type: string + description: The id of the associated toolset + nbPlaybackAuthorized: + type: number + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: type: string description: | - If the score has been forked, the unique identifier of the parent score. - instruments: - type: array - items: - type: string + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean description: | - An array of the instrument identifiers used in the last version of the score. - This is mainly used to display a list of the instruments in the Flat's UI or instruments icons. - The format of the strings is `{instrument-group}.{instrument-id}`. - instrumentsNames: - type: array - items: - type: string + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean description: | - An array of the instrument names used in the last version of the score. - This list is localized and ready-to-display and will match the indexes from the `instruments` list. - samples: - type: array - items: - type: string + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean description: | - An array of the audio samples identifiers used the different score parts. - The format of the strings is `{instrument-group}.{sample-id}`. - googleDriveFileId: + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + resource: type: string - description: | - If the user uses Google Drive and the score exists on Google Drive, this field will contain the unique identifier of the Flat score on Google Drive. You can access the document using the url: `https://drive.google.com/open?id={googleDriveFileId}` - likes: - $ref: '#/components/schemas/ScoreLikesCounts' - comments: - $ref: '#/components/schemas/ScoreCommentsCounts' - views: - $ref: '#/components/schemas/ScoreViewsCounts' - plays: - $ref: '#/components/schemas/ScorePlaysCounts' - collections: - type: array - description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. - items: - type: string + description: If this assignment is stored as a resource in the Flat for Education Resource Library, the unique identifier of the resource. required: - - htmlUrl + - attachments + - capabilities - id - - privacy - title - - user - ScorePrivacy: + - type + FlatErrorResponse: + description: An API Error response + type: object + required: + - code + - message + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable message for this error + id: + type: string + description: An unique error identifier generated for the request + param: + type: string + description: The related parameter that caused the error + example: + code: CLIENT_ERROR + message: Invalid request + id: '123456789' + EduSkillsFocused: + type: array + description: Specific skills that will be focused in classroom + items: + type: string + enum: + - notation + - sight-reading + - performance-instrumental + - ear-training + - music-theory + - composition + - jazz-ensemble + - music-technology + - other + EduLibrary: + description: A Flat for Education Library + type: object + required: + - id + - name + - type + - visibility + properties: + id: + type: string + description: | + Unique identifier of the library. + + This one can be used to list the underlying resources using + `GET /v2/eduResources?parent={library-id}` + name: + type: string + description: Name of the lirbary + type: + type: string + description: Type of the library + enum: + - myResources + - organizationResources + - flatEduContent + visibility: + description: Visibility of the library + type: string + enum: + - private + - organization + - public + example: + id: root + name: My resources + visibility: private + EduResourcePrivacy: type: string - default: private description: | - The score main privacy mode. - - - `public`: The score is public on the Internet. This one can be accessible at the url `https://flat.io/score/{score}` and can be modified and administred by specified collaborators users. - - `private`: The score is private and can be only accessed, modified and administred by specified collaborators users. - - `privateLink`: The score is private but can be accessed using a private link `htmlUrl` or the private key in the property `sharingKey`. - - `organizationPublic`: _Available only with [Flat for Education](https://flat.io/edu)._ The score is public in the organization: users of the same organization can access to this one. The score can be modified and administred by specified collaborators users. - - The score can also be individually shared to a set of users or groups using the different collaborators API methods. - - When a file is synchronized from an external source (e.g. Google Drive) and the sharing options are changed on the source, Flat will chose the best privacy mode for the file. - - When using a [Flat for Education](https://flat.io/edu) account, some of the modes may not be available if disabled by an administrator of the organization (e.g. by default the `public` mode is not available). + The Education resource privacy mode. + default: private enum: - - public - private - organizationPublic - - privateLink - ScoreTrack: + - public + EduResource: + description: A Flat for Education resource contained in a resources library type: object required: - id - - state - - score - - creator - - default - type - - creationDate - - modificationDate - - purpose + - title + - capabilities properties: id: type: string - description: The unique identifier of the score track - title: - type: string - description: Title of the track - score: - type: string - description: The unique identifier of the score + description: Resource unique identifier creator: type: string - description: The unique identifier of the track creator - creationDate: + description: The User identifier of the resource creator + type: + $ref: '#/components/schemas/EduResourceType' + privacy: + $ref: '#/components/schemas/EduResourcePrivacy' + tags: + type: array + description: Specific attributes for the resource (e.g. sample resources with custom design) + items: + type: string + parent: type: string - description: The creation date of the track - format: date-time - modificationDate: + description: Identifier of the parent resource, e.g. a folder or root + title: type: string - description: The modification date of the track - format: date-time - default: - type: boolean - description: True if the track should be used as default audio source - state: - $ref: '#/components/schemas/ScoreTrackState' - type: - $ref: '#/components/schemas/ScoreTrackType' - purpose: - $ref: '#/components/schemas/ScoreTrackPurpose' - url: + description: Title of the resource + sharingDescription: type: string - description: The URL of the track - mediaId: + description: Sharing description of this resource + sharingDescriptionHtml: type: string description: | - The unique identifier of the track when hosted on an external service. - For example, if the url is `https://www.youtube.com/watch?v=dQw4w9WgXcQ`, `mediaId` will be `dQw4w9WgXcQ` - synchronizationPoints: - type: array - items: - $ref: '#/components/schemas/ScoreTrackPoint' - description: An audio track for a score - example: - id: 59ecb20e563736b1e1f75dce - title: Rick Astley - Never Gonna Give You Up - type: youtube - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ - mediaId: dQw4w9WgXcQ - creationDate: 2017-10-22T14:58:22.753000Z - modificationDate: 2017-10-22T14:58:33.424000Z - default: true - state: completed - creator: 5815d4b53269d90d2c80b71c - score: 59a29d96f35a6411d7508bdd - synchronizationPoints: - - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - - type: end - time: 213 - ScoreTrackCreation: - type: object - properties: - title: + HTML version of sharing description with rich text formatting. + + Supports safe HTML tags: p, br, strong, b, em, i, u, a. + creationDate: type: string - description: Title of the track - default: - type: boolean - description: True if the track should be used as default audio source - state: - $ref: '#/components/schemas/ScoreTrackState' - purpose: - $ref: '#/components/schemas/ScoreTrackPurpose' - url: + format: date-time + description: The date when the resource was created + updateDate: type: string - description: The URL of the track - synchronizationPoints: - type: array - items: - $ref: '#/components/schemas/ScoreTrackPoint' - description: | - Creation of a new track. This one must contain the URL of the track or the corresponding file - example: - title: Rick Astley - Never Gonna Give You Up - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ - default: true - state: draft - synchronizationPoints: - - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - - type: end - time: 213 - ScoreTrackUpdate: + format: date-time + description: The date when the resource was updated + resource: + type: object + properties: + id: + type: string + description: Unique identifier of the assignment + type: + $ref: '#/components/schemas/AssignmentType' + capabilities: + required: + - canEdit + - canPublishInClass + - canArchive + - canUnarchive + type: object + description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. + properties: + canEdit: + type: boolean + description: | + Whether the current user can edit the assignment + canPublishInClass: + type: boolean + description: | + Whether this assignment can be published in a class + canPublishInClassError: + type: object + required: + - code + - message + description: | + If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable and localized message for this error + canArchive: + type: boolean + description: | + Whether the current user can archive the assignment + canUnarchive: + type: boolean + description: | + Whether the current user can unarchive the assignment + title: + type: string + description: Title of the folder + description: + type: string + description: Student instructions and content of the assignment (plain text) + descriptionHtml: + type: string + description: | + HTML version of student instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + teacherInstructions: + type: string + description: | + Teacher-only instructions for this assignment. + These instructions are only visible to teachers and are not returned when students view the assignment. + If `teacherInstructionsHtml` is provided, this field will contain the plain text version for compatibility. + teacherInstructionsHtml: + type: string + description: | + HTML version of teacher-only instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + cover: + type: string + description: The URL of the cover to display + coverFile: + type: string + description: The id of the cover to display + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + useDedicatedAttachments: + type: boolean + description: | + For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. + This boolean indicates that this assignment only supports dedicated attachments. + maxPoints: + type: number + description: | + If set, the grading will be enabled for the assignement + releaseGrades: + type: string + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + toolset: + type: string + description: The id of the associated toolset + nbPlaybackAuthorized: + type: number + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: + type: string + description: | + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + assignmentsTypes: + description: The assignment type of the resources that are included in the folder, + type: array + items: + $ref: '#/components/schemas/AssignmentType' + resourcesCount: + description: The number of resources inside the folder + type: number + required: + - attachments + - capabilities + - id + - title + - type + capabilities: + description: Capabilities available for this resource + type: object + properties: + canEdit: + type: boolean + description: | + Whether the current user can modify this resource + canAddResources: + type: boolean + description: | + Whether the current user can add resources within this resource (e.g. `assignment` inside a `folder`) + canAddFolders: + type: boolean + description: | + Whether the current user can add folders within this resource (e.g. `folder` inside `root`) + canChangePrivacy: + type: boolean + description: | + Whether the current user can change the privacy of this resource (e.g. to share as `organizationPublic` or unshare it with `private`) + subjects: + $ref: '#/components/schemas/EduResourceSubjects' + grades: + $ref: '#/components/schemas/EduResourceGrades' + EduResourceCreation: + description: Creation of an education resource type: object + required: + - type + - title properties: + type: + $ref: '#/components/schemas/EduResourceType' title: type: string - description: Title of the track - default: - type: boolean - description: True if the track should be used as default audio source - state: - $ref: '#/components/schemas/ScoreTrackState' - purpose: - $ref: '#/components/schemas/ScoreTrackPurpose' - synchronizationPoints: - type: array - items: - $ref: '#/components/schemas/ScoreTrackPoint' + description: Title of the resource + maxLength: 1000 + minLength: 1 + parent: + type: string + default: root + description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` + sharingDescription: + type: string + description: Sharing description of the resource + maxLength: 400 + sharingDescriptionHtml: + type: string + description: | + HTML version of sharing description with rich text formatting. + + Supports safe HTML tags: p, br, strong, b, em, i, u, a. + maxLength: 10000 + resource: + $ref: '#/components/schemas/EduResourceAssignmentCreation' + EduResourceAssignmentCreation: description: | - Update an existing track. - example: - title: Rick Astley - Never Gonna Give You Up - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ - default: true - state: draft - synchronizationPoints: - - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - - type: end - time: 213 - ScoreTrackPoint: - required: - - time - - type + Assignment-specific creation options. + Only applicable when creating a resource with `type: assignment`. + If `type` is not provided, defaults to `none`. type: object properties: type: + $ref: '#/components/schemas/AssignmentType' + EduResourceUpdate: + description: Update of an education resource + type: object + properties: + title: type: string - description: The type of the synchronization point. If the type is `measure`, the measure uuid must be present in `measureUuid` - enum: - - measure - - end - measureUuid: + description: Title of the resource + maxLength: 1000 + minLength: 1 + sharingDescription: type: string - description: The measure unique identifier - format: uuid - time: - type: number - description: The corresponding time in seconds - description: A track synchronization point - example: - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - ScoreTrackType: - type: string - description: The type of an audio track - enum: - - audio - - soundcloud - - youtube - - vimeo - ScoreTrackPurpose: - type: string - description: The purpose of the audio track - default: common - enum: - - common - - performanceSubmission - ScoreTrackState: + description: Sharing description of the resource + maxLength: 400 + sharingDescriptionHtml: + type: string + description: | + HTML version of sharing description with rich text formatting. + + Supports safe HTML tags: p, br, strong, b, em, i, u, a. + maxLength: 10000 + privacy: + $ref: '#/components/schemas/EduResourcePrivacy' + subjects: + $ref: '#/components/schemas/EduResourceSubjects' + grades: + $ref: '#/components/schemas/EduResourceGrades' + EduResourceType: + description: Type of an education resource type: string - description: State of the track - default: draft enum: - - draft - - completed - - deleted - ScoreLikesCounts: + - assignment + - folder + EduResourceMove: + description: Move an education resource type: object + required: + - destination properties: - total: - type: number - description: The total number of likes of the score - weekly: - type: number - description: The number of new likes during the last week - monthly: - type: number - description: The number of new likes during the last month - description: | - A computed version of the weekly, monthly and total of number of likes - for a score - example: - total: 42 - weekly: 10 - monthly: 30 - ScoreCommentsCounts: + destination: + type: string + description: | + Unique identifier of the destination of the folder where to move this resource. + This can also be `root` to move the resource at the root of the user resource library. + EduResourceCopy: + description: Copy an education resource type: object + required: + - destination properties: - total: - type: number - description: The total number of comments added to the score - unique: - type: number - description: The unique (1/user) number of comments added to the score - weekly: - type: number - description: The weekly unique number of comments added to the score - monthly: - type: number - description: The monthly unique number of comments added to the score - description: | - A computed version of the total, unique, weekly and monthly number of - comments added on the documents (this doesn't include inline comments). - example: - total: 42 - unique: 35 - weekly: 10 - monthly: 30 - ScoreViewsCounts: + destination: + type: string + description: | + Unique identifier of the destination of the folder where to copy this resource. + This can also be `root` to copy the resource at the root of the user resource library. + EduResourceLtiLink: + description: LTI Link details for the class type: object + required: + - ltiUrl properties: - total: - type: number - description: The total number of views of the score - weekly: - type: number - description: The weekly number of views of the score - monthly: - type: number - description: The monthly number of views of the score - description: | - A computed version of the total, weekly, and monthly number of views of - the score - example: - total: 42 - weekly: 10 - monthly: 30 - ScorePlaysCounts: + ltiUrl: + type: string + description: An URL that can be used to launch LTI with this resource in a classroom. + EduResourceSubjects: + description: The subjects of this resource, or the subjects of the resources included in the folder + type: array + items: + $ref: '#/components/schemas/TeachingTheme' + EduResourceGrades: + description: The grades of this resource, or the grades of the resources included in the folder. + type: array + items: + $ref: '#/components/schemas/Grade' + GroupCreation: type: object properties: - total: - type: number - description: The total number of plays of the score - weekly: - type: number - description: The weekly number of plays of the score - monthly: + type: + type: string + enum: + - classStudentsSubGroup + description: Type of group (currently only classStudentsSubGroup is supported) + classroom: + type: string + description: Classroom ID + name: + type: string + description: | + Name of the group (optional - auto-generated if not provided). + + **Special names:** + + * `edu:testing-students`: Creates a group tagged for test student accounts. The display name will be localized (e.g., "Test Students") and the group will be tagged with `edu:testing-students`. + members: + type: array + description: Array of student IDs to add to the group + items: + type: string + required: + - type + - classroom + Group: + type: object + properties: + id: + type: string + description: The unique identifier of the group + name: + type: string + description: The display name of the group + type: + $ref: '#/components/schemas/GroupType' + usersCount: type: number - description: The monthly number of plays of the score - description: | - A computed version of the total, weekly, and monthly number of plays of - the score + description: The number of users in this group + readOnly: + type: boolean + description: | + `True` if the group is set in read-only + organization: + type: string + description: | + If the group is related to an organization, this field will contain + the unique identifier of the organization + creationDate: + type: string + description: The creation date of the group + format: date-time + description: A group of users example: - total: 42 - weekly: 10 - monthly: 30 - ScoreRevisionStatistics: + id: '0000000000000000000000043' + name: 5th grade + type: classTeachers + userCount: 24 + readOnly: true + organization: '0000000000000000000000042' + GroupDetails: type: object + required: + - id + - name + - type + - creationDate + - usersCount + - readOnly + - tags properties: - additions: - type: number - description: The number of additions operations in the last revision - deletions: - type: number - description: The number of deletions operations in the last revision - startDate: + id: type: string - format: date-time - description: The date of the first action included in this revision - endDate: + description: The unique identifier of the group + name: + type: string + description: The displayable name of the group + type: + $ref: '#/components/schemas/GroupType' + organization: + type: string + description: The unique identifier of the Organization owning the group + classroom: + type: string + description: The unique identifier of the classroom owning the group. Only available for groups of type 'classromStudentsSubGroup' or 'assignmentStudentsSubGroup' + assignment: type: string + description: The unique identifier of the assignment owning the group. Only available for groups of type 'assignmentStudentsSubGroup'. + parent: + type: string + description: The unique identifier of the parent class group. Only available for groups of type 'assignmentStudentsSubGroup'. May be null if the parent class group was deleted. + creationDate: + type: string + description: The date when the group was create format: date-time - description: The date of the latest action included in this revision - description: | - The statistics related to the score revision (additions and deletions) + usersCount: + type: number + description: The number of students in this group + readOnly: + type: boolean + description: | + `true` if the properties and members of this group are in in read-only + tags: + type: array + description: | + Tags for categorizing groups. + + * `edu:testing-students`: Marks this group as containing test student accounts + items: + type: string + description: The details of a group example: - additions: 24 - deletions: 5 - ScoreSource: + id: 58c4955c226ffff257211a00 + name: 5th Grade - Teachers + type: classTeachers + organization: '0000000000000000000000042' + usersCount: 2 + readOnly: false + GroupType: + type: string + description: | + The type of the group: + * `generic`: A group created by a Flat user + * `classTeachers`: A group created automaticaly by Flat that contains + the teachers of a class + * `classStudents`: A group created automaticaly by Flat that contains + the studnets of a class + * `classStudentsSubGroup`: Manually created sub-group of students of a class. + * `assignmentStudentsSubGroup`: Manually created Sub-group of students of a class, in relation to a specific assignment. + enum: + - generic + - classTeachers + - classStudents + - classStudentsSubGroup + - assignmentStudentsSubGroup + LtiCredentialsCreation: + required: + - lms + - name type: object properties: - googleDrive: + name: + maxLength: 300 type: string - description: | - If the score is a file on Google Drive, this field property must contain its identifier. To use this method, the Drive file must be public or the Flat Drive App must have access to the file. + description: Name of the couple of credentials + lms: + $ref: '#/components/schemas/LmsName' + description: Creation of a couple of LTI 1.x OAuth credentials example: - googleDrive: 0B-0000000000000001 - ScoreCreation: + name: My couple of credentials for Canvas + lms: canvas + LtiCredentials: type: object properties: - title: + id: type: string - description: | - The title of the new score. If the title is too long, the API may trim this one. - - If this title is not specified, the API will try to (in this order): - - Use the title contained in the file (e.g. [`movement-title`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-movement-title.htm) or [`credit-words`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-credit-words.htm) for [MusicXML](http://www.musicxml.com/) files). - - Use the name of the file for files from a specified `source` (e.g. Google Drive) or the one in the `filename` property - - Set a default title (e.g. "New Music Score") - privacy: - $ref: '#/components/schemas/ScorePrivacy' - collection: + description: The unique identifier of this couple of credentials + name: type: string - description: | - Unique identifier of a collection where the score will be created. - If no collection identifier is provided, the score will be stored in the `root` directory. - googleDriveFolder: + description: Name of the couple of credentials + lms: + $ref: '#/components/schemas/LmsName' + organization: type: string - description: | - If the user uses Google Drive and this properties is specified, the file will be created in this directory. The currently user creating the file must be granted to write in this directory. - builderData: - type: object - required: - - scoreData - properties: - scoreData: - required: - - instruments - type: object - properties: - useTabStaff: - type: boolean - description: true if the TAB staff is displayed with fretted instruments - useChordGrid: - type: boolean - description: true if the chord grid must be displayed with fretted instruments - fifths: - type: number - description: The key signature of the score (expressed between -7 and 7). Major C is used when the value is not provided. - nbBeats: - type: number - description: The number of beats in the measure - beatType: - type: number - description: The duration of a beat in the measure - instruments: - type: array - description: | - The list of instruments to add to the score. - See https://prod.flat-cdn.com/fixtures/instruments_en.json for the possible values for `group` and `instrument`. - items: - required: - - group - - instrument - type: object - properties: - group: - type: string - description: The of the instrument group (e.g. `keyboards`, `brass`) - instrument: - type: string - description: The identifier of the instrument (e.g. `piano`, `trumpet`) - longName: - type: string - description: The full name of the instrument - shortName: - type: string - description: The abbreviation of the name of the instrument - hasQuarterTone: - type: boolean - description: True if the part can use quarter tone (prevent the part to have a TAB/chord grid) - layoutData: - type: object - description: Control the appearance of the score. If missing, default values are used. - properties: - notesSpacingCoeff: - type: number - description: A float value >= 1 that controls the spacing between notes. - lengthUnit: - description: The unit to use for layout customizations - type: string - default: cm - enum: - - cm - - inch - pageHeight: - type: number - description: The height of the page in chosen unit (`lengthUnit`). - pageWidth: - type: number - description: The width of the page in chosen unit (`lengthUnit`). - pageMarginTop: - type: number - description: The top margin of the page in chosen unit (`lengthUnit`). - pageMarginBottom: - type: number - description: The bottom margin of the page in chosen unit (`lengthUnit`). - pageMarginLeft: - type: number - description: The left margin of the page in chosen unit (`lengthUnit`). - pageMarginRight: - type: number - description: The right margin of the page in chosen unit (`lengthUnit`). - filename: + description: The unique identifier of the Organization associated to these credentials + creator: type: string - description: If this is an imported file, its filename - data: + description: Unique identifier of the user who created these credentials + creationDate: type: string - description: | - The data of the score file. It must be a MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`) or a Flat.json (aka Adagio.json) file. - Binary payloads (`vnd.recordare.musicxml` and `audio/midi`) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. - dataEncoding: + description: The creation date of thse credentials + format: date-time + lastUsage: type: string - description: The optional encoding of the score data. This property must match the encoding used for the `data` property. - enum: - - base64 - source: - $ref: '#/components/schemas/ScoreSource' - ScoreFork: - type: object - properties: - collection: + description: The last time these credentials were used + format: date-time + consumerKey: type: string - default: root - nullable: true - description: | - Unique identifier of a collection where the score will be copied. - If no collection identifier is provided, the score will be stored in the `root` directory. - If null is provided, the score won't be added to any collections - googleDriveDisabled: - type: boolean - default: false - description: | - If set to `true`, the API won't create the score on Google Drive - keepOriginalTitle: + description: OAuth 1 Consumer Key + consumerSecret: + type: string + description: OAuth 1 Consumer Secret + enableEmailMatching: type: boolean + default: true description: | - Option to keep the original title of the score (i.e. don't prepend it with "Copy of ", or add the student name in assignment usage). - description: Options to fork the score - ScoreModification: + Enable email-based user matching during LTI authentication. + + When true (default): If a user with the same email exists in the organization, + they will be matched and logged in instead of creating a new account. + + When false: Email matching is disabled. Only LTI ID matching is used, which means + multiple LTI users can share the same email address and have separate Flat accounts. + This is useful for cases like siblings sharing a parent email in the LMS. + description: A couple of LTI 1.x OAuth credentials + example: + id: 59368be5c66caf895ee02387 + name: My couple of credentials for Canvas + lms: canvas + organization: 5832c801a4bedc05f4fb4993 + creator: 5832bf149995c4024bd6de7d + consumerKey: 200082F5-FAFD-4C6E-BB19-7DAB5D6264D4 + consumerSecret: ABCDE1234 + enableEmailMatching: true + LtiConfiguration: type: object properties: - title: + id: + type: string + description: Configuration ID + ltiVersion: + type: string + enum: + - 1p3 + description: LTI version (1.3) + organizationId: + type: string + description: Organization ID + organizationName: + type: string + description: Organization name + creatorId: type: string - description: The title of the score - subtitle: + description: ID of the user who created this configuration + creationDate: type: string - nullable: true - description: The subtitle of the score - composer: + format: date-time + description: Configuration creation date + lastUsedDate: type: string + format: date-time nullable: true - description: The composer of the score - lyricist: + description: Last time this configuration was used + status: type: string - nullable: true - description: The lyricist of the score - arranger: + description: Configuration status indicator + enum: + - ready-to-use + - in-use + - incomplete-setup + consumerKey: type: string - nullable: true - description: The arranger of the score - privacy: - $ref: '#/components/schemas/ScorePrivacy' - sharingKey: - pattern: ^[a-f0-9]{128}$ + description: LTI 1.1 consumer key + consumerSecret: type: string - description: When using the `privacy` mode `privateLink`, this property can be used to set a custom sharing key, otherwise a new key will be generated. - description: + description: LTI 1.1 consumer secret (only included for admins) + lms: type: string - maxLength: 2000 - nullable: true - description: Description of the creation - tags: - type: array - description: Tags describing the score - items: - type: string - creationType: - $ref: '#/components/schemas/ScoreCreationType' - license: - $ref: '#/components/schemas/ScoreLicense' - licenseText: + description: LMS type + name: type: string - nullable: true - description: The rights info written on the score - description: Edit the score metadata - example: - privacy: private - Collection: - type: object + description: Configuration name + tool: + type: object + description: Platform/tool product information + properties: + product: + type: string + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance display name + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain required: - - id - - title - - htmlUrl - - type - - privacy - creationDate - - capabilities - - contents + - creationDate + - id + - id + - ltiVersion + - ltiVersion + LtiConfiguration1p3Manual: + type: object properties: - id: + mode: type: string - description: Unique identifier of the collection - title: + enum: + - 1p3-manual + description: Manual LTI 1.3 configuration mode + platformIss: type: string - description: The title of the collection - htmlUrl: + description: Platform issuer URL + platformName: + type: string + description: Platform display name + clientId: + type: string + description: OAuth2 client_id allocated by the platform + deploymentId: + type: string + description: Deployment ID linking the tool to a tenant/class (varies by platform) + accessTokenUrl: type: string - description: The url where the collection can be viewed in a web browser format: url - type: - $ref: '#/components/schemas/CollectionType' - privacy: - $ref: '#/components/schemas/CollectionPrivacy' - sharingKey: + description: OAuth2 token endpoint (for AGS/NRPS) + authorizationUrl: type: string - description: The private sharing key of the collection (available when the `privacy` mode is set to `privateLink`) - app: - $ref: '#/components/schemas/CollectionApp' - creationDate: + format: url + description: OIDC authorization/login endpoint + jwksUrl: type: string - description: The date when the collection was created - format: date-time - user: - $ref: '#/components/schemas/UserPublicSummary' - organization: + format: url + description: Platform JWKS endpoint (public keys) + deploymentMode: type: string - description: | - If the score has been created in an organization, the identifier of this organization. - rights: - $ref: '#/components/schemas/ResourceRights' - collaborators: - type: array - description: The list of the collaborators of the collection - items: - $ref: '#/components/schemas/ResourceCollaborator' - contents: + enum: + - single + - multi + description: Deployment mode (single for organization-specific, multi for shared parent platforms) + supportedServices: type: object - description: The contents of the collection - required: - - scoresCount + description: LTI services support information properties: - scoresCount: - type: integer - description: The number of scores in the collection - capabilities: + ags: + type: object + description: Assignment and Grade Services support + properties: + available: + type: boolean + description: Whether AGS claims were detected in launches from this platform + version: + type: string + description: AGS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have AGS enabled for this platform + lineitemsUrl: + type: string + description: Base URL for line items operations as provided by the platform + nrps: + type: object + description: Names and Role Provisioning Services support + properties: + available: + type: boolean + description: Whether NRPS claims were detected in launches from this platform + version: + type: string + description: NRPS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have NRPS enabled for this platform + deepLinking: + type: object + description: Deep Linking support + properties: + available: + type: boolean + description: Whether Deep Linking claims were detected in launches from this platform + version: + type: string + description: Deep Linking version supported (e.g., "2.0") + tool: type: object - required: - - canEdit - - canShare - - canDelete - - canAddScores - - canDeleteScores + description: Platform/tool product information properties: - canEdit: - type: boolean - description: | - Whether the current user can modify the metadata for the collection - canShare: - type: boolean - description: | - Whether the current user can modify the sharing settings for the collection - canDelete: - type: boolean - description: | - Whether the current user can delete the collection - canAddScores: - type: boolean - description: | - Whether the current user can add scores to the collection - - If this collection has the `type` `trash`, this property will be set to `false`. Use `DELETE /v2/scores/{score}` to trash a score. - canDeleteScores: - type: boolean - description: | - Whether the current user can delete scores from the collection - - If this collection has the `type` `trash`, this property will be set to `false`. Use `POST /v2/scores/{score}/untrash` to restore a score. - description: Capabilities the current user has on this collection. Each capability corresponds to a fine-grained action that a user may take. - collections: + product: + type: string + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance name (e.g., 'My University Canvas') + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain + publicKeysetUrl: + type: string + description: Public keyset URL for the platform to retrieve Flat's public keys + initiateLoginUrl: + type: string + description: URL for the platform to initiate LTI login + redirectUris: type: array - description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. items: type: string - description: Collection of scores - CollectionCreation: + description: Redirect URI for LTI launches + description: Allowed redirect URIs for LTI launches + enableEmailMatching: + type: boolean + default: true + description: | + Enable email-based user matching during LTI authentication. + + When true (default): If a user with the same email exists in the organization, + they will be matched and logged in instead of creating a new account. + + When false: Email matching is disabled. Only LTI ID matching is used, which means + multiple LTI users can share the same email address and have separate Flat accounts. + This is useful for cases like siblings sharing a parent email in the LMS. + LtiConfiguration1p3Deployment: type: object properties: - title: - maxLength: 300 - minLength: 1 + mode: type: string - description: The title of the collection - privacy: - $ref: '#/components/schemas/CollectionPrivacy' - example: - title: Jazz scores - privacy: private - CollectionModification: - type: object - properties: - title: - maxLength: 300 - minLength: 1 + enum: + - 1p3-deployment + description: Deployment-based LTI 1.3 configuration mode + platformIss: type: string - description: The title of the collection - privacy: - $ref: '#/components/schemas/CollectionPrivacy' - description: Edit the collection metadata - CollectionType: - type: string - description: | - Type of the collection. - The type will influence the capabilitied available on the collections and how this collection is/can be populated. - enum: - - root - - regular - - sharedWithMe - - sharedWithGroup - - app - - trash - CollectionPrivacy: - type: string - description: | - The collection main privacy mode. - - `private`: The collection is private and can be only accessed, modified and administred by specified collaborators users. - enum: - - private - CollectionApp: - type: object - description: For App collections, the details of the app that created the collection - properties: - id: + description: Platform issuer URL + platformName: type: string - description: The app unique identifier - name: + description: Platform display name + clientId: type: string - description: The name of the app - logo: + description: OAuth2 client_id allocated by the platform + deploymentId: type: string - description: The app logo url - ScoreRevision: - type: object - required: - - id - - score - - date - properties: - id: + description: Deployment ID linking the tool to a tenant/class (varies by platform) + accessTokenUrl: type: string - description: The unique identifier of the revision. - user: + format: url + description: OAuth2 token endpoint (for AGS/NRPS) + authorizationUrl: + type: string + format: url + description: OIDC authorization/login endpoint + jwksUrl: + type: string + format: url + description: Platform JWKS endpoint (public keys) + deploymentMode: + type: string + enum: + - single + - multi + description: Deployment mode (single for organization-specific, multi for shared parent platforms) + supportedServices: + type: object + description: LTI services support information + properties: + ags: + type: object + description: Assignment and Grade Services support + properties: + available: + type: boolean + description: Whether AGS claims were detected in launches from this platform + version: + type: string + description: AGS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have AGS enabled for this platform + lineitemsUrl: + type: string + description: Base URL for line items operations as provided by the platform + nrps: + type: object + description: Names and Role Provisioning Services support + properties: + available: + type: boolean + description: Whether NRPS claims were detected in launches from this platform + version: + type: string + description: NRPS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have NRPS enabled for this platform + deepLinking: + type: object + description: Deep Linking support + properties: + available: + type: boolean + description: Whether Deep Linking claims were detected in launches from this platform + version: + type: string + description: Deep Linking version supported (e.g., "2.0") + tool: + type: object + description: Platform/tool product information + properties: + product: + type: string + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance name (e.g., 'My University Canvas') + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain + publicKeysetUrl: type: string - description: The user identifier who created the revision - score: + description: Public keyset URL for the platform to retrieve Flat's public keys + initiateLoginUrl: type: string - description: The score identifier - collaborators: + description: URL for the platform to initiate LTI login + redirectUris: type: array items: type: string - description: | - The list of user identifier or collaborators who worked on this - revision. This is list is built from the history of the revision - specified during the creation of the revision. - date: + description: Redirect URI for LTI launches + description: Allowed redirect URIs for LTI launches + enableEmailMatching: + type: boolean + default: true + description: | + Enable email-based user matching during LTI authentication. + + When true (default): If a user with the same email exists in the organization, + they will be matched and logged in instead of creating a new account. + + When false: Email matching is disabled. Only LTI ID matching is used, which means + multiple LTI users can share the same email address and have separate Flat accounts. + This is useful for cases like siblings sharing a parent email in the LMS. + parentId: type: string - description: The date when this revision was created - format: date-time - event: + description: Parent configuration ID (for deployment-based configs) + deploymentKey: type: string - description: The last event (action id) of the revision - description: + description: Deployment key (e.g., schoology, classlink) + deploymentBreakdownBy: type: string - description: A description associated to the revision - autosave: - type: boolean - description: | - True if this revision was automatically generated by Flat and not on - purpose by the user. - statistics: - $ref: '#/components/schemas/ScoreRevisionStatistics' - description: A score revision metadata - example: - user: '000000000000000000000020' - collaborators: - - '000000000000000000000010' - - '000000000000000000000020' - description: New revision - creationDate: 2017-01-26T20:29:10.622000Z - autosave: true - ScoreRevisionCreation: - required: - - data + description: Custom claim used for tenant identification (parent platforms only, read-only) + deploymentBreakdownId: + type: string + description: Value of the custom claim that identifies this specific tenant (child platforms only) + LtiConfiguration1p3Dynamic: type: object properties: - data: - type: string - description: | - The data of the score file. It must be a MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`) or a Flat.json (aka Adagio.json) file. - Binary payloads (`vnd.recordare.musicxml` and `audio/midi`) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. - example: - dataEncoding: + mode: type: string - description: The optional encoding of the score data. This property must match the encoding used for the `data` property. enum: - - base64 - autosave: - type: boolean - description: | - Must be set to `true` if the revision was created automatically. - description: + - 1p3-dynamic + description: Dynamic registration LTI 1.3 configuration mode + platformIss: type: string - description: A description associated to the revision - description: A new created revision - example: - data: - history: - - id: b278ad43-2e99-4e60-a782-ac119b294ab8 - userId: '000000000000000000000010' - fnc: action.AddMeasure - args: - previousUuid: 888cb742-2110-a050-ba71-28300ba6d61f - measureUuid: 0be9f739-3213-f312-bb0a-00ad0c787ef7 - autosave: true - description: New revision - TaskExportOptions: - type: object - properties: - parts: - type: array - description: A list of parts to specifically export - items: - type: string - description: | - Options for the requested export - example: - parts: - - 49b7d7c5-7490-4f76-9813-607f79e5b92b - - 96b5066b-54ed-4c6b-b3fc-cb7281403a89 - ScoreCommentContext: - required: - - measureUuids - - partUuid - - startDpq - - startTimePos - - stopDpq - - stopTimePos - type: object - properties: - partUuid: + description: Platform issuer URL + platformName: type: string - description: The unique identifier (UUID) of the score part - staffIdx: - type: number - description: (Deprecated, use `staffUuid`) The identififer of the staff - staffUuid: + description: Platform display name + clientId: type: string - description: The unique identififer (UUID) of the staff - measureUuids: - type: array - description: The list of measure UUIds - items: - type: string - startTimePos: - type: number - stopTimePos: - type: number - startDpq: - type: number - stopDpq: - type: number - description: | - The context of the comment (for inline/contextualized comments). A context will include all the information related to the location of the comment (i.e. score parts, range of measure, time position). - example: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - ScoreCommentCreation: - required: - - comment - type: object - properties: - revision: + description: OAuth2 client_id allocated by the platform + deploymentId: type: string - description: | - The unique indentifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. - comment: + description: Deployment ID linking the tool to a tenant/class (varies by platform) + accessTokenUrl: type: string - description: | - The comment text that can includes mentions using the following format: `@[id:username]`. - rawComment: + format: url + description: OAuth2 token endpoint (for AGS/NRPS) + authorizationUrl: type: string - description: | - A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. - mentions: + format: url + description: OIDC authorization/login endpoint + jwksUrl: + type: string + format: url + description: Platform JWKS endpoint (public keys) + deploymentMode: + type: string + enum: + - single + - multi + description: Deployment mode (single for organization-specific, multi for shared parent platforms) + supportedServices: + type: object + description: LTI services support information + properties: + ags: + type: object + description: Assignment and Grade Services support + properties: + available: + type: boolean + description: Whether AGS claims were detected in launches from this platform + version: + type: string + description: AGS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have AGS enabled for this platform + lineitemsUrl: + type: string + description: Base URL for line items operations as provided by the platform + nrps: + type: object + description: Names and Role Provisioning Services support + properties: + available: + type: boolean + description: Whether NRPS claims were detected in launches from this platform + version: + type: string + description: NRPS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have NRPS enabled for this platform + deepLinking: + type: object + description: Deep Linking support + properties: + available: + type: boolean + description: Whether Deep Linking claims were detected in launches from this platform + version: + type: string + description: Deep Linking version supported (e.g., "2.0") + tool: + type: object + description: Platform/tool product information + properties: + product: + type: string + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance name (e.g., 'My University Canvas') + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain + publicKeysetUrl: + type: string + description: Public keyset URL for the platform to retrieve Flat's public keys + initiateLoginUrl: + type: string + description: URL for the platform to initiate LTI login + redirectUris: type: array - description: The list of user identifiers mentioned in this comment items: type: string - replyTo: - type: string + description: Redirect URI for LTI launches + description: Allowed redirect URIs for LTI launches + enableEmailMatching: + type: boolean + default: true description: | - When the comment is a reply to another comment, the unique identifier of the parent comment - context: - $ref: '#/components/schemas/ScoreCommentContext' - description: Creation of a comment - example: - revision: '000000000000000000000010' - comment: '@[000000000000000000000000:flat] Great work!' - rawComment: '@flat: Great work!' - mentions: - - '000000000000000000000000' - replyTo: '000000000000000000000000' - context: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - ScoreCommentUpdate: - type: object - properties: - revision: + Enable email-based user matching during LTI authentication. + + When true (default): If a user with the same email exists in the organization, + they will be matched and logged in instead of creating a new account. + + When false: Email matching is disabled. Only LTI ID matching is used, which means + multiple LTI users can share the same email address and have separate Flat accounts. + This is useful for cases like siblings sharing a parent email in the LMS. + registrationToken: type: string - description: | - The unique indentifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. - comment: - maxLength: 10000 - minLength: 1 + description: Only included for admins + registrationUrl: type: string - description: | - The comment text that can includes mentions using the following format: `@[id:username]`. - rawComment: - maxLength: 10000 - minLength: 1 + format: url + description: Dynamic registration URL (only included for admins when available) + registrationTokenUsed: + type: boolean + description: Whether dynamic registration token has been used + registrationCompletionDate: type: string - description: | - A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. - context: - $ref: '#/components/schemas/ScoreCommentContext' - description: Update of a comment - example: - revision: '000000000000000000000011' - comment: '@[000000000000000000000000:flat] Great work!' - rawComment: '@flat: Great work!' - mentions: - - '000000000000000000000000' - replyTo: '000000000000000000000000' - context: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - ScoreComment: + format: date-time + nullable: true + description: Date when dynamic registration completed (null when not completed) + LtiConfigurationCreate: type: object - required: - - id - - type - - user - - score - - comment - - rawComment - - date properties: - id: - type: string - description: The comment unique identifier - type: + mode: type: string - description: The type of the comment enum: - - document - - inline - user: + - 1p3-manual + description: LTI 1.3 manual creation mode + name: type: string - description: The author unique identifier - score: + description: Display name for LTI 1.1 credentials + lms: type: string - description: The unique identifier of the score where the comment was posted - revision: + description: LMS identifier for LTI 1.1 credentials + platformInfo: + type: object + description: Optional platform information for dynamic registration + properties: + name: + type: string + description: Platform display name + url: + type: string + description: Optional platform homepage or admin URL for reference + locale: type: string - description: The unique identifier of revision the comment was posted - replyTo: + description: Optional locale code for registration URL. Input values will be automatically normalized to a supported locale code. + deploymentType: type: string - description: | - When the comment is a reply to another comment, the unique identifier of the parent comment - date: + description: Parent platform key (e.g., canvas, blackboard, schoology, classlink) + deploymentId: type: string - description: The date when the comment was posted - format: date-time - modificationDate: + description: Deployment identifier provided by the platform + clientId: type: string - description: The date of the last comment modification - format: date-time - comment: + description: OAuth2 client_id allocated by the platform + deploymentBreakdownId: type: string - description: | - The comment text that can includes mentions using the following - format: `@[id:username]`. - rawComment: + description: Value of the custom claim that identifies this specific tenant (for multi-tenant platforms like Schoology) + platformIss: type: string - description: | - A raw version of the comment, that can be displayed without parsing - the mentions. - context: - $ref: '#/components/schemas/ScoreCommentContext' - mentions: - type: array - description: The list of user identifier mentioned on the score - items: - type: string - resolved: + description: Platform issuer URL + platformName: + type: string + description: Platform display name + accessTokenUrl: + type: string + format: url + description: Platform access token endpoint URL + authorizationUrl: + type: string + format: url + description: Platform OIDC authorization endpoint URL + jwksUrl: + type: string + format: url + description: Platform JWKS endpoint URL for public keys + enableEmailMatching: type: boolean - description: | - For inline comments, the comment can be marked as resolved and will be hidden in the future responses - resolvedBy: + description: Enable email-based user matching during LTI authentication + required: + - deploymentId + - deploymentType + - mode + - mode + - mode + - mode + LtiConfigurationUpdate: + description: Update an existing LTI 1.3 configuration (deployment clone or standalone) + anyOf: + - $ref: '#/components/schemas/LtiConfigurationUpdateDeployment' + - $ref: '#/components/schemas/LtiConfigurationUpdateStandalone' + LtiConfigurationUpdateDeployment: + type: object + description: Update fields allowed for deployment-based configurations + properties: + deploymentId: type: string - description: | - If the user is marked as resolved, this will contain the unique identifier of the User who marked this comment as resolved - moderation: - type: object - description: Information about the comment being moderated - properties: - hidden: - type: boolean - description: If true, this comment will be hidden from other users - reason: - type: string - description: If the comment is hidden, the reason why this one has been moderated - enum: [spam, inappropriate] - spam: + description: Deployment identifier provided by the platform + deploymentBreakdownId: + type: string + description: Specific tenant identifier for multi-tenant platforms + enableEmailMatching: type: boolean - description: | - `true if the message has been detected as spam and hidden from other users - description: Comment added on a sheet music + description: Enable email-based user matching during LTI authentication + LtiConfigurationUpdateStandalone: + type: object + description: Update fields allowed for standalone (manual/dynamic) configurations + properties: + deploymentId: + type: string + description: Deployment identifier provided by the platform + platformIss: + type: string + description: Platform issuer URL + platformName: + type: string + description: Platform display name + clientId: + type: string + description: OAuth2 client_id allocated by the platform + accessTokenUrl: + type: string + format: url + description: Platform access token endpoint URL + authorizationUrl: + type: string + format: url + description: Platform OIDC authorization endpoint URL + jwksUrl: + type: string + format: url + description: Platform JWKS endpoint URL for public keys + enableEmailMatching: + type: boolean + description: Enable email-based user matching during LTI authentication + MicrosoftGraphSubmission: + type: object + description: A Microsoft Teams submission + required: + - id + - state + properties: + id: + type: string + description: Identifier of the submission assigned by Microsoft Teams + state: + type: string + description: State of the submission example: - id: '000000000000000000000010' - type: inline - user: '000000000000000000000001' - score: '000000000000000000000042' - revision: '000000000000000000000011' - replyTo: '000000000000000000000000' - date: 2017-01-26T20:29:10.622000Z - modificationDate: 2017-01-26T21:29:10.622000Z - comment: '@[000000000000000000000000:flat] Great work!' - rawComment: '@flat: Great work!' - context: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - mentions: - - '000000000000000000000000' - resolved: true - resolvedBy: '000000000000000000000000' - spam: false - AppScopes: + id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda + state: returned + TutteoProduct: + description: | + A Tutteo product. + + * `flat`: [Flat](https://flat.io) - Music notation software for individual users + * `flatEdu`: [Flat for Education](https://flat.io/edu) - Music notation software for schools and educators + * `msnippet`: [Music Snippet](https://musicsnippet.com) - Embeddable music snippets for websites + * `embed`: [Flat Embed](https://flat.io/developers/embed) - Embeddable music notation editor type: string - description: Available scopes + default: flat enum: - - account.public_profile - - account.email - - account.education_profile - - scores.readonly - - scores.social - - scores - - collections.readonly - - collections.add_scores - - collections - - notifications.readonly - - edu.resources - - edu.resources.readonly - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - - edu.admin - - edu.admin.lti - - edu.admin.lti.readonly - - edu.admin.users - - edu.admin.users.readonly - - tasks.readonly - OrganizationUserAccessTokenCreation: - required: - - scopes + - flat + - flatEdu + - msnippet + - embed + LicenseMode: + type: string + description: Mode of the license + enum: + - credit + - site + LicenseSources: + type: string + description: Source of the license + default: order + enum: + - order + - trial + - voucher + - distributor + - subscription + - appStore + - playStore + - musicfirst + ResourceRights: type: object + required: + - aclRead + - aclWrite + - aclAdmin properties: - scopes: - type: array - description: List of requested scopes for this credential - items: - $ref: '#/components/schemas/AppScopes' - description: Creation of a delegated API access token for an organization user + aclRead: + type: boolean + default: false + description: | + `True` if the current user can read the current document + aclWrite: + type: boolean + default: false + description: | + `True` if the current user can modify the current document. + + If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. + aclAdmin: + type: boolean + default: false + description: | + `True` if the current user can manage the current document (i.e. share, delete) + + If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. + isCollaborator: + type: boolean + default: false + description: | + `True` if the current user is a collaborator of the current document (direct or via group). + collaboratorType: + type: string + enum: + - owner + - user + - group + description: | + The type of the collaborator for the resource + description: The rights of the current user on a score or collection example: - scopes: - - account.public_profile - - account.education_profile - - edu.classes.readonly - ApiAccessToken: + aclRead: true + aclWrite: true + aclAdmin: true + isCollaborator: true + ResourceCollaborator: type: object properties: + aclRead: + type: boolean + default: false + description: | + `True` if the current user can read the current document + aclWrite: + type: boolean + default: false + description: | + `True` if the current user can modify the current document. + + If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. + aclAdmin: + type: boolean + default: false + description: | + `True` if the current user can manage the current document (i.e. share, delete) + + If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. + isCollaborator: + type: boolean + default: false + description: | + `True` if the current user is a collaborator of the current document (direct or via group). + collaboratorType: + type: string + enum: + - owner + - user + - group + description: | + The type of the collaborator for the resource id: type: string - description: Unique identifier of this private token - name: + description: The unique identifier of the permission + date: type: string - description: Name of the personal access token - token: + format: date-time + description: The date when the permission was added + score: type: string - description: | - The token. This token will only be returned once, then only the first 4 characters will be returned. - issuedDate: + description: If this object is a permission of a score, this property will contain the unique identifier of the score + collection: type: string - description: | - The date then this token was issued - format: date-time - expirationDate: + description: If this object is a permission of a collection, this property will contain the unique identifier of the collection + user: + $ref: '#/components/schemas/UserPublic' + group: + $ref: '#/components/schemas/Group' + userEmail: type: string description: | - The date then this token will expire - format: date-time - scopes: - type: array + If the collaborator is not a user of Flat yet, this field will contain their email. + invited: + type: boolean description: | - The list of scopes associated to the token - items: - $ref: '#/components/schemas/AppScopes' - description: An API access token - example: - id: '0000000000000000' - name: API Access Token name - token: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' - issuedDate: 2022-01-01T00:00:00Z - expirationDate: 2022-01-01T00:00:00Z - scopes: [account.public_profile, account.education_profile, collections.readonly] - OrganizationInvitationCreation: - type: object - properties: - email: - type: string - description: The email address you want to send the invitation to - organizationRole: - type: string - description: User's Organization Role - default: teacher - enum: - - admin - - teacher - description: The parameters to create an organization invitation - example: - email: edu@flat.io - organizationRole: teacher - OrganizationInvitation: - type: object + If this property is `true`, this is still a pending invitation required: - - organization - - organizationRole - - customCode - - allowMultipleUse + - aclAdmin + - aclRead + - aclWrite + ResourceCollaboratorCreation: + type: object properties: - id: - type: string - description: The invitation unique identifier - creationDate: - type: string - description: The creation date of the invitation - format: date-time - organization: + user: type: string - description: The unique identifier of the Organization owning this class - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - customCode: + description: The unique identifier of a Flat user + group: type: string - nullable: true - description: Enrollment code to use when joining this organization - email: + description: The unique identifier of a Flat group + userEmail: type: string - description: The email address this invitation was sent to - invitedBy: + description: | + Fill this field to invite an individual user by email. + userToken: type: string - description: The unique identifier of the User who created this invitation - allowMultipleUse: + description: | + Token received in an invitation to join the score. + aclRead: type: boolean description: | - If true, the invitation can be used multiple times. - If false, the invitation can only be used once. - usedBy: - type: array - description: List of users who used this invitation - items: - type: string - description: Details of an invitation to join an organization + `True` if the related user can read the score. (probably true if the user has a permission on the document). + default: true + aclWrite: + type: boolean + description: | + `True` if the related user can modify the score. + default: false + aclAdmin: + type: boolean + description: | + `True` if the related user can can manage the current document, i.e. changing the document permissions and deleting the document + default: false + description: Add a collaborator to a resource. example: - creationDate: 2017-07-02T15:05:15.576000Z - customCode: u5raQ7pZ - email: edu@flat.io - id: 59590bab53b1af260610000 - invitedBy: 55b8d8f395c8db031ed00000 - organization: 55df29a6694e4a3953100000 - organizationRole: teacher + userEmail: jdoe@flat.io + aclRead: true + aclWrite: true + aclAdmin: false LmsName: type: string description: LMS name @@ -6479,1189 +8410,1163 @@ components: - sakai - schoolbox - other - LtiCredentialsCreation: - required: - - lms - - name - type: object - properties: - name: - maxLength: 300 - type: string - description: Name of the couple of credentials - lms: - $ref: '#/components/schemas/LmsName' - description: Creation of a couple of LTI 1.x OAuth credentials - example: - name: My couple of credentials for Canvas - lms: canvas - LtiCredentials: + MediaAttachment: type: object - properties: - id: - type: string - description: The unique identifier of this couple of credentials - name: - type: string - description: Name of the couple of credentials - lms: - $ref: '#/components/schemas/LmsName' - organization: - type: string - description: The unique identifier of the Organization associated to these credentials - creator: - type: string - description: Unique identifier of the user who created these credentials - creationDate: - type: string - description: The creation date of thse credentials - format: date-time - lastUsage: - type: string - description: The last time these credentials were used - format: date-time - consumerKey: - type: string - description: OAuth 1 Consumer Key - consumerSecret: - type: string - description: OAuth 1 Consumer Secret - description: A couple of LTI 1.x OAuth credentials - example: - id: 59368be5c66caf895ee02387 - name: My couple of credentials for Canvas - lms: canvas - organization: 5832c801a4bedc05f4fb4993 - creator: 5832bf149995c4024bd6de7d - creationDate: 2017-06-06T11:03:01.955000Z - lastUsage: 2017-06-13T16:02:34.324000Z - consumerKey: 200082F5-FAFD-4C6E-BB19-7DAB5D6264D4 - consumerSecret: ABCDE1234 - ClassCreation: required: - - name - type: object - properties: - name: - maxLength: 255 - type: string - description: The name of the new class - section: - maxLength: 255 - type: string - description: The section of the new class - level: - $ref: '#/components/schemas/ClassGradeLevel' - skillsFocused: - $ref: '#/components/schemas/EduSkillsFocused' - size: - type: number - minimum: 0 - nullable: true - description: Number of students in the classroom - description: Creation of a classroom - example: - name: Music Theory Course - section: Music Theory 101 - ClassUpdate: - type: object + - type properties: - name: - maxLength: 255 - type: string - description: The name of the class - section: - maxLength: 255 + type: type: string - description: The section of the class - level: - $ref: '#/components/schemas/ClassGradeLevel' - skillsFocused: - $ref: '#/components/schemas/EduSkillsFocused' - size: - type: number - minimum: 0 - nullable: true - description: Number of students in the classroom - description: Update of a classroom - example: - name: Music Theory Course - section: Music Theory 101 - ClassDetails: - type: object - required: - - id - properties: - id: + description: | + The type of the assignment resolved: + * `rich`, `photo`, `video` are automatically resolved as `link` + * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. + enum: + - rich + - photo + - video + - link + - flat + - googleDrive + - worksheet + score: type: string - description: The unique identifier of the class - state: - $ref: '#/components/schemas/ClassState' - name: + description: An unique Flat score identifier + revision: type: string - description: The name of the class - section: + description: An unique revision identifier of a score + worksheet: type: string - description: The section of the class - description: + description: An unique worksheet identifier + dedicated: + type: boolean + description: True if the resource is dedicated for the assignment (for scores and worksheets), meaning on the user-side this one is stored in the assignment + track: type: string - description: An optionnal description for this class - organization: + description: A unique track identifier + partUuid: type: string - description: The unique identifier of the Organization owning this class - owner: + description: The UUID of the instrument part selected for this attachment (for performance submissions) + sharingMode: + $ref: '#/components/schemas/MediaScoreSharingMode' + lockScoreTemplate: + type: boolean + description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. + title: type: string - description: The unique identifier of the User owning this class - creationDate: + description: The resolved title of the attachment + description: type: string - description: The date when the class was create - format: date-time - enrollmentCode: + description: The resolved description of the attachment + html: type: string description: | - [Teachers only] The enrollment code that can be used by the students to join the class - theme: - type: string - description: The theme identifier using in Flat User Interface - assignmentsCount: + If the attachment type is `rich` or `video`, the HTML code of the + media to display + htmlWidth: type: number - description: The number of assignments created in the class - studentsGroup: - $ref: '#/components/schemas/GroupDetails' - teachersGroup: - $ref: '#/components/schemas/GroupDetails' - issues: - type: object - description: Detected issues for this class - properties: - sync: - type: array - description: Synchronization issues for the class - items: - type: object - description: A sync issue - properties: - id: - type: string - description: The account user identifier - email: - type: string - description: The email address of the user concerned by this sync issue - reason: - type: string - enum: [otherOrgnanization, personalSubscription] - description: The reason why the account cannot be synced - googleClassroom: - type: object - properties: - id: - type: string - description: The course identifier on Google Classroom - alternateLink: - type: string - description: Absolute link to this course in the Classroom web UI - description: Google Classroom course-related information - googleDrive: - type: object - properties: - teacherFolderId: - type: string - description: | - [Teachers only] The Drive directory identifier of the teachers' folder - teacherFolderAlternateLink: - type: string - description: | - [Teachers only] The Drive URL of the teachers' folder - description: Google Drive course-related information provided by Google Classroom - microsoftGraph: - type: object - properties: - id: - type: string - description: The course identifier on Microsoft Graph - lti: - type: object - properties: - contextId: - type: string - description: Unique context identifier provided - contextTitle: - type: string - description: Context title - contextLabel: - type: string - description: Context label - description: Meta information provided by the LTI consumer - canvas: - type: object - properties: - id: - type: string - description: Unique identifier of the course on Canvas - domain: - type: string - description: Canvas instance domain (e.g. "canvas.instructure.com") - description: Meta information provided by Canvs LMS - mfc: - type: object - properties: - id: - type: string - description: Unique identifier of the course on MusicFirst Classroom - alternateLink: - type: string - description: Link to MusicFirst Classroom class - description: Meta information provided by Canvs LMS - clever: - type: object - properties: - id: - type: string - description: Clever section unique identifier - creationDate: - type: string - description: The creation date of the section on clever - format: date-time - modificationDate: - type: string - description: The last modification date of the section on clever - format: date-time - subject: - type: string - description: Normalized subject of the course - enum: - - english/language arts - - math - - science - - social studies - - language - - homeroom/advisory - - interventions/online learning - - technology and engineering - - PE and health - - arts and music - - other - termName: - type: string - description: Name of the term when this course happens - termStartDate: - type: string - description: Beginning date of the term - format: date-time - termEndDate: - type: string - description: End date of the term - format: date-time - description: Clever.com section-related information - level: - $ref: '#/components/schemas/ClassGradeLevel' - skillsFocused: - $ref: '#/components/schemas/EduSkillsFocused' - size: + description: If the `html` is available, the width of the widget + htmlHeight: type: number - nullable: true - description: Number of students in the classroom - description: A classroom + description: If the `html` is available, the height of the widget + url: + type: string + description: The url of the attachment + thumbnailUrl: + type: string + description: | + If the attachment type is `rich`, `video`, `photo` or `link`, a + displayable thumbnail for this attachment + thumbnailWidth: + type: integer + description: | + If the `thumbnailUrl` is available, the width of the thumbnail + thumbnailHeight: + type: integer + description: | + If the `thumbnailUrl` is available, the width of the thumbnail + authorName: + type: string + description: The resolved author name of the attachment + authorUrl: + type: string + description: The resolved author url of the attachment + iconUrl: + type: string + description: The URL of the icon + mimeType: + type: string + description: The mine type of the file + googleDriveFileId: + type: string + description: The ID of the Google Drive File + teacherOnly: + type: boolean + description: | + If true, this attachment is only visible to teachers. + When students view the assignment, attachments with this flag will be filtered out. + default: false + description: | + Media attachment. The API will automatically resolve the details, oEmbed, + and media available if possible and return them in this object example: - id: '100000000000000000000001' - state: active - name: Music Theory 101 - section: Music Theory 101 - organization: '100000000000000000000002' - owner: '100000000000000000000003' - enrollmentCode: jm447ear - theme: blue-8 - assignmentsCount: 10 - creationTime: 2017-01-25T09:47:34.544000Z - googleClassroom: - id: '00000000' - alternateLink: http://classroom.google.com/c/music-theory - microsoftGraph: - id: 00000000-0000-0000-0000-000000000000 - googleDrive: - teacherFolderAlternateLink: https://drive.google.com/drive/folders/0B-0000000000000000 - teacherFolderId: 0B-0000000000000000 - lti: - contextId: '042' - contextLabel: MUSIC - contextTitle: Music Theory 101 - canvas: - id: '000000000' - ClassAttachmentCreation: + type: video + url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw + title: Flat - The online collaborative music notation software + description: Discover Flat on https://flat.io + html: + thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg + thumbnailHeight: 1052 + thumbnailWidth: 1868 + authorName: Flat + authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw + TeachingTheme: + type: string + description: Teaching theme + enum: + - composition + - music-theory + - general-music + - band + - choir + - orchestra + - jazz-ensemble + - music-technology + - other + Grade: + type: string + description: Class grade of the resource + enum: + - '1' + - '2' + - '3' + - '4' + - '5' + - '6' + - '7' + - '8' + - '9' + - '10' + - '11' + - '12' + - university + OrganizationRoles: + type: string + description: User's Organization Role (for Edu users only) + enum: + - admin + - teacher + - user + OrganizationInvitationCreation: type: object properties: - type: + email: type: string - description: | - The type of the attachment posted: - * `rich`, `photo`, `video` are attachment types that are automatically resolved from a `link` attachment. - * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. + description: The email address you want to send the invitation to + organizationRole: + type: string + description: User's Organization Role + default: teacher enum: - - rich - - photo - - video - - link - - flat - - googleDrive - - worksheet - score: + - admin + - teacher + description: The parameters to create an organization invitation + example: + email: edu@flat.io + organizationRole: teacher + OrganizationInvitation: + type: object + required: + - organization + - organizationRole + - customCode + - allowMultipleUse + properties: + id: type: string - description: | - A unique Flat score identifier. The user creating the assignment must at least have read access to the document. If the user has admin rights, new group permissions will be automatically added for the - teachers and students of the class. - worksheet: + description: The invitation unique identifier + creationDate: type: string - description: An unique worksheet identifier - sharingMode: - $ref: '#/components/schemas/MediaScoreSharingMode' - lockScoreTemplate: - type: boolean - description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. - url: + description: The creation date of the invitation + format: date-time + organization: type: string - description: The URL of the attachment. - googleDriveFileId: + description: The unique identifier of the Organization owning this class + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + customCode: type: string - description: The ID of the Google Drive File - description: | - Attachment creation for an assignment or stream post. - This attachment must contain a `score` or an `url`, all the details of this one will be resolved and returned as `ClassAttachment` once the assignment or stream post is created. + nullable: true + description: Enrollment code to use when joining this organization + email: + type: string + description: The email address this invitation was sent to + invitedBy: + type: string + description: The unique identifier of the User who created this invitation + htmlUrl: + type: string + description: URL to join the organization using this invitation + allowMultipleUse: + type: boolean + description: | + If true, the invitation can be used multiple times. + If false, the invitation can only be used once. + usedBy: + type: array + description: List of users who used this invitation + items: + type: string + description: Details of an invitation to join an organization example: - type: flat - score: '000000000000000001' - sharingMode: copy - ClassGradeLevel: + customCode: code + email: edu@flat.io + id: 59590bab53b1af260610000 + invitedBy: 55b8d8f395c8db031ed00000 + organization: 55df29a6694e4a3953100000 + htmlUrl: https://school.flat.io/organization/enroll?enrollcode=code + organizationRole: teacher + ScoreLicense: type: string - description: Class grade level + nullable: true + description: | + License of the creation. Read more about the Creative Commons licenses on https://creativecommons.org/licenses/ enum: - - elementary - - middle - - high - - university + - copyright + - cc0 + - cc-by + - cc-by-sa + - cc-by-nd + - cc-by-nc + - cc-by-nc-sa + - cc-by-nc-nd + - + ScoreCreationType: + type: string + nullable: true + description: The type of creation (an orginal, an arrangement) + enum: + - original + - arrangement - other - EduSkillsFocused: - type: array - description: Specific skills that will be focused in classroom - items: - type: string - enum: - - notation - - sight-reading - - performance-instrumental - - ear-training - - music-theory - - composition - - jazz-ensemble - - music-technology - - other - AssignmentUpdate: + - + ScoreDetails: type: object - description: Assignment Resource Editing properties: - type: - $ref: '#/components/schemas/AssignmentType' + id: + type: string + description: The unique identifier of the score + sharingKey: + type: string + description: The private sharing key of the score (available when the `privacy` mode is set to `privateLink`) title: type: string - description: Title of the assignment - maxLength: 1000 - minLength: 1 - description: + description: The title of the score + privacy: + $ref: '#/components/schemas/ScorePrivacy' + user: + $ref: '#/components/schemas/UserPublic' + htmlUrl: + type: string + description: The url where the score can be viewed in a web browser + format: url + editHtmlUrl: + type: string + description: The url where the score can be edited in a web browser + format: url + subtitle: + type: string + description: Subtitle of the score + lyricist: + type: string + description: Lyricist of the score + arranger: + type: string + description: Arranger of the score + composer: + type: string + description: Composer of the score + description: + type: string + description: Description of the creation + tags: + type: array + description: Tags describing the score + items: + pattern: ^[a-zA-Z0-9]{1,30}$ + type: string + creationType: + $ref: '#/components/schemas/ScoreCreationType' + license: + $ref: '#/components/schemas/ScoreLicense' + licenseText: + type: string + description: Additional license text written on the exported/printed score + durationTime: + type: number + description: In seconds, an approximative duration of the score + numberMeasures: + type: integer + description: The number of measures in the score + mainTempoQpm: + type: number + description: The main tempo of the score (in QPM) + mainKeySignature: + type: number + description: The main key signature of the score (expressed between -7 and 7). + rights: + $ref: '#/components/schemas/ResourceRights' + collaborators: + type: array + description: The list of the collaborators of the score + items: + $ref: '#/components/schemas/ResourceCollaborator' + creationDate: + type: string + description: The date when the score was created + format: date-time + modificationDate: + type: string + description: The date of the last revision of the score + format: date-time + publicationDate: + type: string + description: The date when the score was published on Flat + format: date-time + scheduledDeletionDate: + type: string + description: | + The date when the score will be definitively deleted. + This date can be in the past if the score will be deleted at the next deletion batch, in this case you can display something like "Deleted shortly". + + Schedule: + + * For all paying users, the scores will be definitively deleted after 90 days. + * For free users, the scores are no longer available after 24 hours, an can be restored with a paying account up to 90 days. + format: date-time + highlightedDate: + type: string + description: The date when the score was highlighted (featured) on our community + format: date-time + organization: type: string - description: Description and content of the assignment - attachments: + description: | + If the score has been created in an organization, the identifier of this organization. This property is especially used with the score privacy `organizationPublic`. + parentScore: + type: string + description: | + If the score has been forked, the unique identifier of the parent score. + instruments: type: array items: - $ref: '#/components/schemas/ClassAttachmentCreation' - nbPlaybackAuthorized: - type: number - nullable: true - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - toolset: - type: string - nullable: true + type: string description: | - The id of the toolset to apply to this assignment. - The toolset will be copied to the assignment as a dedicated object to prevent unexpected changes when making modifications to the template toolset. - This property can be set to null to delete the linked toolset and switch back to all the tools available for this assignment. - coverFile: - type: string - nullable: true - description: The id of the cover to display - cover: - type: string - nullable: true - description: The URL of the cover to display - maxPoints: - type: number - nullable: true - minimum: 0 - maximum: 10000 + An array of the instrument identifiers used in the last version of the score. + This is mainly used to display a list of the instruments in the Flat's UI or instruments icons. + The format of the strings is `{instrument-group}.{instrument-id}`. + instrumentsNames: + type: array + items: + type: string description: | - If set, the grading will be enabled for the assignement with this value as the maximum of points - releaseGrades: + An array of the instrument names used in the last version of the score. + This list is localized and ready-to-display and will match the indexes from the `instruments` list. + samples: + type: array + items: + type: string + description: | + An array of the audio samples identifiers used the different score parts. + The format of the strings is `{instrument-group}.{sample-id}`. + googleDriveFileId: type: string - enum: [auto, manual] description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: - type: boolean - description: Mixing worksheets exercises for each student - example: - title: First assignment - description: Get started with Flat - maxPoints: 100 - attachments: - - type: flat - score: '0000000000000000' - - type: link - url: https://flat.io/developers - ClassAssignmentUpdate: + If the user uses Google Drive and the score exists on Google Drive, this field will contain the unique identifier of the Flat score on Google Drive. You can access the document using the url: `https://drive.google.com/open?id={googleDriveFileId}` + likes: + $ref: '#/components/schemas/ScoreLikesCounts' + comments: + $ref: '#/components/schemas/ScoreCommentsCounts' + views: + $ref: '#/components/schemas/ScoreViewsCounts' + plays: + $ref: '#/components/schemas/ScorePlaysCounts' + collections: + type: array + description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. + items: + type: string + me: + type: object + description: Information about the authenticated user and this score + required: + - isLiked + - isInLibrary + properties: + isLiked: + type: boolean + description: True if the current user likes this score + isInLibrary: + type: boolean + description: True if the score is stored in one of the user's collections + required: + - htmlUrl + - id + - privacy + - title + - user + ScorePrivacy: + type: string + default: private + description: | + The score main privacy mode. + + - `public`: The score is public on the Internet. This one can be accessible at the url `https://flat.io/score/{score}` and can be modified and administred by specified collaborators users. + - `private`: The score is private and can be only accessed, modified and administred by specified collaborators users. + - `privateLink`: The score is private but can be accessed using a private link `htmlUrl` or the private key in the property `sharingKey`. + - `organizationPublic`: _Available only with [Flat for Education](https://flat.io/edu)._ The score is public in the organization: users of the same organization can access to this one. The score can be modified and administred by specified collaborators users. + + The score can also be individually shared to a set of users or groups using the different collaborators API methods. + + When a file is synchronized from an external source (e.g. Google Drive) and the sharing options are changed on the source, Flat will chose the best privacy mode for the file. + + When using a [Flat for Education](https://flat.io/edu) account, some of the modes may not be available if disabled by an administrator of the organization (e.g. by default the `public` mode is not available). + enum: + - public + - private + - organizationPublic + - privateLink + ScoreTrack: type: object + required: + - id + - state + - score + - creator + - default + - type + - creationDate + - modificationDate + - purpose properties: - type: - $ref: '#/components/schemas/AssignmentType' - title: + id: type: string - description: Title of the assignment - maxLength: 1000 - minLength: 1 - description: + description: The unique identifier of the score track + title: type: string - description: Description and content of the assignment - attachments: - type: array - items: - $ref: '#/components/schemas/ClassAttachmentCreation' - nbPlaybackAuthorized: - type: number - nullable: true - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - toolset: + description: Title of the track + score: type: string - nullable: true - description: | - The id of the toolset to apply to this assignment. - The toolset will be copied to the assignment as a dedicated object to prevent unexpected changes when making modifications to the template toolset. - This property can be set to null to delete the linked toolset and switch back to all the tools available for this assignment. - coverFile: + description: The unique identifier of the score + creator: type: string - nullable: true - description: The id of the cover to display - cover: + description: The unique identifier of the track creator + creationDate: type: string - nullable: true - description: The URL of the cover to display - maxPoints: - type: number - nullable: true - minimum: 0 - maximum: 10000 - description: | - If set, the grading will be enabled for the assignement with this value as the maximum of points - releaseGrades: + description: The creation date of the track + format: date-time + modificationDate: type: string - enum: [auto, manual] - description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: + description: The modification date of the track + format: date-time + default: type: boolean - description: Mixing worksheets exercises for each student + description: True if the track should be used as default audio source state: + $ref: '#/components/schemas/ScoreTrackState' + type: + $ref: '#/components/schemas/ScoreTrackType' + purpose: + $ref: '#/components/schemas/ScoreTrackPurpose' + url: type: string - description: State of the assignment - enum: - - draft - - active - dueDate: - type: string - nullable: true - description: | - The due date of this assignment, late submissions will be marked as paste due. If not set, the assignment won't have a due date. - format: date-time - scheduledDate: + description: The URL of the track + mediaId: type: string - nullable: true description: | - The publication (scheduled) date of the assignment. - If this one is specified, the assignment will only be listed to the teachers of the class. - format: date-time - googleClassroom: - type: object - description: Google Classroom options for this assignment - properties: - topicId: - type: string - nullable: true - description: Identifier of the topic where the assignment is created - microsoftGraph: - type: object - description: Microsoft Graph options for this assignment - properties: - categories: - description: List of categories this assignment belongs to - type: array - nullable: true - items: - type: string - assigneeMode: - type: string - description: Possible modes of assigning assignments - enum: - - everyone - - selected - assignedStudents: + The unique identifier of the track when hosted on an external service. + For example, if the url is `https://www.youtube.com/watch?v=dQw4w9WgXcQ`, `mediaId` will be `dQw4w9WgXcQ` + synchronizationPoints: type: array items: - type: string - description: Identifiers for the students that have access to the assignment - AssignmentCopy: + $ref: '#/components/schemas/ScoreTrackPoint' + description: An audio track for a score + ScoreTrackCreation: type: object properties: - classroom: - type: string - description: The destination classroom where the assignment will be copied - assignment: + title: type: string - description: An optional destination assignment where the original assignement will be copied. Must be a draft. - scheduledDate: + description: Title of the track + default: + type: boolean + description: True if the track should be used as default audio source + state: + $ref: '#/components/schemas/ScoreTrackState' + purpose: + $ref: '#/components/schemas/ScoreTrackPurpose' + url: type: string - description: | - The publication (scheduled) date of the assignment. - If this one is specified, the assignment will only be listed to the teachers of the class. - Alternatively the existing `scheduledDate` from the copied assignment will be used. - format: date-time - libraryParent: + description: The URL of the track + synchronizationPoints: + type: array + items: + $ref: '#/components/schemas/ScoreTrackPoint' + description: | + Creation of a new track. This one must contain the URL of the track or the corresponding file + example: + title: Rick Astley - Never Gonna Give You Up + url: https://www.youtube.com/watch?v=dQw4w9WgXcQ + default: true + state: draft + synchronizationPoints: + - type: measure + time: 0 + measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c + - type: end + time: 213 + ScoreTrackUpdate: + type: object + properties: + title: type: string - description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` - verifyIfNotAlreadyInResourceLibrary: + description: Title of the track + default: type: boolean - description: Option to check if the assignment is already in Resource Library + description: True if the track should be used as default audio source + state: + $ref: '#/components/schemas/ScoreTrackState' + purpose: + $ref: '#/components/schemas/ScoreTrackPurpose' + synchronizationPoints: + type: array + items: + $ref: '#/components/schemas/ScoreTrackPoint' + description: | + Update an existing track. + example: + title: Rick Astley - Never Gonna Give You Up + url: https://www.youtube.com/watch?v=dQw4w9WgXcQ + default: true + state: draft + synchronizationPoints: + - type: measure + time: 0 + measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c + - type: end + time: 213 + ScoreTrackPoint: required: - - classroom - - libraryParent - AssignmentCopyResponse: + - time + - type type: object properties: - id: - type: string - description: Unique identifier of the assignment type: - $ref: '#/components/schemas/AssignmentType' - capabilities: - required: - - canEdit - - canPublishInClass - - canArchive - - canUnarchive - type: object - description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. - properties: - canEdit: - type: boolean - description: | - Whether the current user can edit the assignment - canPublishInClass: - type: boolean - description: | - Whether this assignment can be published in a class - canPublishInClassError: - type: object - required: - - code - - message - description: | - If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class - properties: - code: - type: string - description: A corresponding code for this error - message: - type: string - description: A printable and localized message for this error - canArchive: - type: boolean - description: | - Whether the current user can archive the assignment - canUnarchive: - type: boolean - description: | - Whether the current user can unarchive the assignment - title: - type: string - description: Title of the assignment - description: - type: string - description: Description and content of the assignment - cover: type: string - description: The URL of the cover to display - coverFile: + description: The type of the synchronization point. If the type is `measure`, the measure uuid must be present in `measureUuid` + enum: + - measure + - end + measureUuid: type: string - description: The id of the cover to display - attachments: - type: array - items: - $ref: '#/components/schemas/MediaAttachment' - useDedicatedAttachments: - type: boolean - description: | - For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. - This boolean indicates that this assignment only supports dedicated attachments. - maxPoints: + description: The measure unique identifier + format: uuid + time: + type: number + description: The corresponding time in seconds + description: A track synchronization point + example: + type: measure + time: 0 + measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c + ScoreTrackType: + type: string + description: The type of an audio track + enum: + - audio + - soundcloud + - youtube + - vimeo + ScoreTrackPurpose: + type: string + description: The purpose of the audio track + default: common + enum: + - common + - performanceSubmission + ScoreTrackState: + type: string + description: State of the track + default: draft + enum: + - draft + - completed + - deleted + ScoreLikesCounts: + type: object + properties: + total: + type: number + description: The total number of likes of the score + weekly: + type: number + description: The number of new likes during the last week + monthly: + type: number + description: The number of new likes during the last month + yearly: + type: number + description: The number of new likes during the last year + description: | + A computed version of the weekly, monthly, yearly and total number of likes + for a score + example: + total: 500 + weekly: 10 + monthly: 30 + yearly: 120 + ScoreCommentsCounts: + type: object + properties: + total: + type: number + description: The total number of comments added to the score + unique: + type: number + description: The unique (1/user) number of comments added to the score + weekly: + type: number + description: The weekly unique number of comments added to the score + monthly: + type: number + description: The monthly unique number of comments added to the score + yearly: + type: number + description: The yearly unique number of comments added to the score + description: | + A computed version of the total, unique, weekly, monthly and yearly number of + comments added on the documents (this doesn't include inline comments). + example: + total: 500 + unique: 35 + weekly: 10 + monthly: 30 + yearly: 200 + ScoreViewsCounts: + type: object + properties: + total: + type: number + description: The total number of views of the score + weekly: + type: number + description: The weekly number of views of the score + monthly: + type: number + description: The monthly number of views of the score + yearly: + type: number + description: The yearly number of views of the score + description: | + A computed version of the total, weekly, monthly, and yearly number of views of + the score + example: + total: 42 + weekly: 10 + monthly: 30 + yearly: 365 + ScorePlaysCounts: + type: object + properties: + total: + type: number + description: The total number of plays of the score + weekly: + type: number + description: The weekly number of plays of the score + monthly: + type: number + description: The monthly number of plays of the score + yearly: type: number - description: | - If set, the grading will be enabled for the assignement - releaseGrades: - type: string - enum: [auto, manual] - description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: - type: boolean - description: Mixing worksheets exercises for each student - toolset: - type: string - description: The id of the associated toolset - nbPlaybackAuthorized: + description: The yearly number of plays of the score + description: | + A computed version of the total, weekly, monthly, and yearly number of plays of + the score + example: + total: 42 + weekly: 10 + monthly: 30 + yearly: 400 + ScoreRevisionStatistics: + type: object + properties: + additions: type: number - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - resource: + description: The number of additions operations in the last revision + deletions: + type: number + description: The number of deletions operations in the last revision + startDate: type: string - description: If this assignment is stored as a resource in the Flat for Education Resource Library, the unique identifier of the resource. - required: - - attachments - - capabilities - - id - - title - - type - AssignmentType: - type: string - description: Type of the assignment - enum: - - none - - newScore - - scoreTemplate - - sharedWriting - - worksheet - - performance - Assignment: + format: date-time + description: The date of the first action included in this revision + endDate: + type: string + format: date-time + description: The date of the latest action included in this revision + description: | + The statistics related to the score revision (additions and deletions) + example: + additions: 24 + deletions: 5 + ScoreSource: type: object - required: - - id - - type - - title - - attachments - - capabilities properties: - id: + googleDrive: type: string - description: Unique identifier of the assignment - type: - $ref: '#/components/schemas/AssignmentType' - capabilities: - required: - - canEdit - - canPublishInClass - - canArchive - - canUnarchive - type: object - description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. - properties: - canEdit: - type: boolean - description: | - Whether the current user can edit the assignment - canPublishInClass: - type: boolean - description: | - Whether this assignment can be published in a class - canPublishInClassError: - type: object - required: - - code - - message - description: | - If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class - properties: - code: - type: string - description: A corresponding code for this error - message: - type: string - description: A printable and localized message for this error - canArchive: - type: boolean - description: | - Whether the current user can archive the assignment - canUnarchive: - type: boolean - description: | - Whether the current user can unarchive the assignment + description: | + If the score is a file on Google Drive, this field property must contain its identifier. To use this method, the Drive file must be public or the Flat Drive App must have access to the file. + example: + googleDrive: 0B-0000000000000001 + ScoreCreation: + type: object + properties: title: type: string - description: Title of the assignment - description: - type: string - description: Description and content of the assignment - cover: - type: string - description: The URL of the cover to display - coverFile: - type: string - description: The id of the cover to display - attachments: - type: array - items: - $ref: '#/components/schemas/MediaAttachment' - useDedicatedAttachments: - type: boolean - description: | - For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. - This boolean indicates that this assignment only supports dedicated attachments. - maxPoints: - type: number description: | - If set, the grading will be enabled for the assignement - releaseGrades: + The title of the new score. If the title is too long, the API may trim this one. + + If this title is not specified, the API will try to (in this order): + - Use the title contained in the file (e.g. [`movement-title`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-movement-title.htm) or [`credit-words`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-credit-words.htm) for [MusicXML](http://www.musicxml.com/) files). + - Use the name of the file for files from a specified `source` (e.g. Google Drive) or the one in the `filename` property + - Set a default title (e.g. "New Music Score") + privacy: + $ref: '#/components/schemas/ScorePrivacy' + collection: type: string - enum: [auto, manual] description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: - type: boolean - description: Mixing worksheets exercises for each student - toolset: - type: string - description: The id of the associated toolset - nbPlaybackAuthorized: - type: number - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - description: Assignment details - example: - id: 636a724a89a6eaa0a54c3900 - title: My first assignment - description: Get started with Flat - maxPoints: 100 - attachments: - - type: flat - score: '0000000000000000' - - type: link - url: https://flat.io/developers - - type: video - url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw - title: Flat - The online collaborative music notation software - description: Discover Flat on https://flat.io - html: - thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg - thumbnailHeight: 1052 - thumbnailWidth: 1868 - authorName: Flat - authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw - ClassAssignment: - type: object - properties: - id: + Unique identifier of a collection where the score will be created. + If no collection identifier is provided, the score will not be added to any collection and will only be visible in the `allScores` virtual collection. + googleDriveFolder: type: string - description: Unique identifier of the assignment - type: - $ref: '#/components/schemas/AssignmentType' - capabilities: - required: - - canEdit - - canPublishInClass - - canArchive - - canUnarchive + description: | + If the user uses Google Drive and this properties is specified, the file will be created in this directory. The currently user creating the file must be granted to write in this directory. + builderData: type: object - description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. + required: + - scoreData properties: - canEdit: - type: boolean - description: | - Whether the current user can edit the assignment - canPublishInClass: - type: boolean - description: | - Whether this assignment can be published in a class - canPublishInClassError: + scoreData: + required: + - instruments + type: object + properties: + useTabStaff: + type: boolean + description: true if the TAB staff is displayed with fretted instruments + useChordGrid: + type: boolean + description: true if the chord grid must be displayed with fretted instruments + fifths: + type: number + description: The key signature of the score (expressed between -7 and 7). Major C is used when the value is not provided. + nbBeats: + type: number + description: The number of beats in the measure + beatType: + type: number + description: The duration of a beat in the measure + instruments: + type: array + description: | + The list of instruments to add to the score. + See https://prod.flat-cdn.com/fixtures/instruments_en.json for the possible values for `group` and `instrument`. + items: + required: + - group + - instrument + type: object + properties: + group: + type: string + description: The of the instrument group (e.g. `keyboards`, `brass`) + instrument: + type: string + description: The identifier of the instrument (e.g. `piano`, `trumpet`) + longName: + type: string + description: The full name of the instrument + shortName: + type: string + description: The abbreviation of the name of the instrument + hasQuarterTone: + type: boolean + description: True if the part can use quarter tone (prevent the part to have a TAB/chord grid) + layoutData: type: object - required: - - code - - message - description: | - If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class + description: Control the appearance of the score. If missing, default values are used. properties: - code: - type: string - description: A corresponding code for this error - message: + notesSpacingCoeff: + type: number + description: A float value >= 1 that controls the spacing between notes. + lengthUnit: + description: The unit to use for layout customizations type: string - description: A printable and localized message for this error - canArchive: - type: boolean - description: | - Whether the current user can archive the assignment - canUnarchive: - type: boolean - description: | - Whether the current user can unarchive the assignment - title: - type: string - description: Title of the assignment - description: - type: string - description: Description and content of the assignment - cover: + default: cm + enum: + - cm + - inch + pageHeight: + type: number + description: The height of the page in chosen unit (`lengthUnit`). + pageWidth: + type: number + description: The width of the page in chosen unit (`lengthUnit`). + pageMarginTop: + type: number + description: The top margin of the page in chosen unit (`lengthUnit`). + pageMarginBottom: + type: number + description: The bottom margin of the page in chosen unit (`lengthUnit`). + pageMarginLeft: + type: number + description: The left margin of the page in chosen unit (`lengthUnit`). + pageMarginRight: + type: number + description: The right margin of the page in chosen unit (`lengthUnit`). + filename: type: string - description: The URL of the cover to display - coverFile: + description: If this is an imported file, its filename + data: type: string - description: The id of the cover to display - attachments: - type: array - items: - $ref: '#/components/schemas/MediaAttachment' - useDedicatedAttachments: - type: boolean - description: | - For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. - This boolean indicates that this assignment only supports dedicated attachments. - maxPoints: - type: number description: | - If set, the grading will be enabled for the assignement - releaseGrades: + The data of the score file. See the `POST /scores` endpoint description for the full list of supported formats. + Binary payloads (e.g. compressed MusicXML, MIDI, Guitar Pro) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. + dataEncoding: type: string - enum: [auto, manual] - description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: - type: boolean - description: Mixing worksheets exercises for each student - toolset: + description: The optional encoding of the score data. This property must match the encoding used for the `data` property. + enum: + - base64 + source: + $ref: '#/components/schemas/ScoreSource' + ScoreFork: + type: object + properties: + collection: type: string - description: The id of the associated toolset - nbPlaybackAuthorized: - type: number - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: + nullable: true + description: | + Unique identifier of a collection where the score will be copied. + + If no collection identifier is provided, a virtual collection is used, or `null` is provided, the score won't be added to any collection and will only be visible in the `allScores` virtual collection. + googleDriveDisabled: type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: + default: false + description: | + If set to `true`, the API won't create the score on Google Drive + keepOriginalTitle: type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - creator: - type: string description: | - The User unique identifier of the creator of this assignment - state: + Option to keep the original title of the score (i.e. don't prepend it with "Copy of ", or add the student name in assignment usage). + description: Options to fork the score + ScoreModification: + type: object + properties: + title: type: string - description: State of the assignment - enum: - - draft - - active - - archived - classroom: + description: The title of the score + subtitle: type: string - description: The unique identifier of the class where this assignment was posted - creationDate: + nullable: true + description: The subtitle of the score + composer: type: string - description: The creation date of this assignment - format: date-time - scheduledDate: + nullable: true + description: The composer of the score + lyricist: type: string - description: | - The publication (scheduled) date of the assignment. - If this one is specified, the assignment will only be listed to the teachers of the class. - format: date-time - dueDate: + nullable: true + description: The lyricist of the score + arranger: type: string - description: | - The due date of this assignment, late submissions will be marked as - paste due. - format: date-time - assigneeMode: + nullable: true + description: The arranger of the score + privacy: + $ref: '#/components/schemas/ScorePrivacy' + sharingKey: + pattern: ^[a-f0-9]{128}$ type: string - description: Possible modes of assigning assignments - enum: - - everyone - - selected - assignedStudents: + description: When using the `privacy` mode `privateLink`, this property can be used to set a custom sharing key, otherwise a new key will be generated. + description: + type: string + maxLength: 2000 + nullable: true + description: Description of the creation + tags: type: array + description: Tags describing the score items: type: string - description: Identifiers for the students that have access to the assignment - submissions: - type: array - items: - $ref: '#/components/schemas/AssignmentSubmission' - googleClassroom: - $ref: '#/components/schemas/GoogleClassroomCoursework' - microsoftGraph: - $ref: '#/components/schemas/MicrosoftGraphAssignment' - mfc: - type: object - description: A MusicFirst Classroom assignment - properties: - id: - type: string - description: Unique identifier of the course on MusicFirst Task - alternateLink: - type: string - description: Link to MusicFirst Classroom task - canvas: - type: object - description: A Canvas LMS assignment - properties: - id: - type: string - description: Unique identifier of the course on Canvas assignment - alternateLink: - type: string - description: Link to Canvas assignment - lti: - type: object - description: An LTI assignment - properties: - id: - type: string - description: Resource ID in the LMS - issue: + creationType: + $ref: '#/components/schemas/ScoreCreationType' + license: + $ref: '#/components/schemas/ScoreLicense' + licenseText: type: string - description: Detected issue for this assignment - required: - - attachments - - capabilities - - id - - title - - type - AssignmentSubmissionUpdate: - type: object - properties: - attachments: - type: array - items: - $ref: '#/components/schemas/ClassAttachmentCreation' - submit: - type: boolean - description: If `true`, the submission will be marked as done - draftGrade: - type: number - nullable: true - minimum: 0 - maximum: 10000 - description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission - grade: - type: number nullable: true - minimum: 0 - maximum: 10000 - description: Optional grade. If unset, no grade was set. - exercisesIds: + description: The rights info written on the score + description: Edit the score metadata + example: + privacy: private + ScoreRevision: + type: object + required: + - id + - score + - date + properties: + id: + type: string + description: The unique identifier of the revision. + user: + type: string + description: The user identifier who created the revision + score: + type: string + description: The score identifier + collaborators: type: array - nullable: true items: type: string - description: The ids of exercises when they need to be in a specific order - return: + description: | + The list of user identifier or collaborators who worked on this + revision. This is list is built from the history of the revision + specified during the creation of the revision. + date: + type: string + description: The date when this revision was created + format: date-time + event: + type: string + description: The last event (action id) of the revision + description: + type: string + description: A description associated to the revision + autosave: type: boolean - description: If `true`, the submission will be marked as done - description: Assignment Submission creation + description: | + True if this revision was automatically generated by Flat and not on + purpose by the user. + statistics: + $ref: '#/components/schemas/ScoreRevisionStatistics' + description: A score revision metadata example: - attachments: - - type: flat - score: 58c4955a226ffff257211a8d - title: Hello - Student - submit: true - AssignmentSubmissionState: - type: string - description: State of the submission - enum: - - created - - turnedIn - - returned - - graded - AssignmentSubmissionHistoryState: - type: string - description: State of the submission history - enum: - - created - - turnedIn - - returned - - graded - - reset - AssignmentSubmission: - type: object + user: '000000000000000000000020' + collaborators: + - '000000000000000000000010' + - '000000000000000000000020' + description: New revision + autosave: true + ScoreRevisionCreation: required: - - id - - state - - classroom - - assignment - - creator - - creationDate - - attachments - - playback - - comments + - data + type: object properties: - id: + data: type: string - description: Unique identifier of the submission - state: - $ref: '#/components/schemas/AssignmentSubmissionState' - classroom: + description: | + The data of the score file. It must be a MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`) or a Flat.json (aka Adagio.json) file. + Binary payloads (`vnd.recordare.musicxml` and `audio/midi`) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. + example: + dataEncoding: type: string + description: The optional encoding of the score data. This property must match the encoding used for the `data` property. + enum: + - base64 + autosave: + type: boolean description: | - Unique identifier of the classroom where the assignment was posted - assignment: + Must be set to `true` if the revision was created automatically. + description: type: string - description: Unique identifier of the assignment - creator: + description: A description associated to the revision + description: A new created revision + example: + data: + history: + - id: b278ad43-2e99-4e60-a782-ac119b294ab8 + userId: '000000000000000000000010' + fnc: action.AddMeasure + args: + previousUuid: 888cb742-2110-a050-ba71-28300ba6d61f + measureUuid: 0be9f739-3213-f312-bb0a-00ad0c787ef7 + autosave: true + description: New revision + ScoreCommentContext: + required: + - measureUuids + - partUuid + - startDpq + - startTimePos + - stopDpq + - stopTimePos + type: object + properties: + partUuid: type: string - description: The User identifier of the student who created the submission - creationDate: + description: The unique identifier (UUID) of the score part + staffIdx: + type: number + description: (Deprecated, use `staffUuid`) The identififer of the staff + deprecated: true + staffUuid: type: string - description: The date when the submission was created - attachments: + description: The unique identififer (UUID) of the staff + measureUuids: type: array + description: The list of measure UUIds items: - $ref: '#/components/schemas/MediaAttachment' - submissionDate: + type: string + startTimePos: + type: number + stopTimePos: + type: number + startDpq: + type: number + stopDpq: + type: number + description: | + The context of the comment (for inline/contextualized comments). A context will include all the information related to the location of the comment (i.e. score parts, range of measure, time position). + example: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + ScoreCommentCreation: + required: + - comment + type: object + properties: + revision: type: string - description: The date when the student submitted their work - returnDate: + description: | + The unique identifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. + comment: type: string - description: The date when the teacher returned the work - returnCreator: + description: | + The comment text that can includes mentions using the following format: `@[id:username]`. + rawComment: type: string description: | - The User unique identifier of the teacher who returned the submission - grade: - type: number - nullable: true - description: Optional grade. If unset, no grade was set. - draftGrade: - type: number - nullable: true - description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission - maxPoints: - type: number - description: Optional max points for the grade. If set, a corresponding `draftGrade` or `grade` will be set. - exercisesIds: + A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. + mentions: type: array + description: The list of user identifiers mentioned in this comment items: type: string - description: The ids of exercises when they need to be in a specific order - playback: - type: array - items: - type: object - description: Playback used by student in this submission (used to limit the playback for the assignment) - required: - - score - - nbPlayAttempt - properties: - score: - type: string - description: The score unique identifier - nbPlayAttempt: - type: number - description: The number of playback used by the student - comments: - type: object - properties: - total: - type: number - description: The total number of comments added to the submission - unread: - type: number - description: The number of unread comments for the current user - googleClassroom: - $ref: '#/components/schemas/GoogleClassroomSubmission' - microsoftGraph: - $ref: '#/components/schemas/MicrosoftGraphSubmission' - lti: - type: object - description: If set, this submission has a linked LTI 1.3 AGS or LTI 1.1 Outcomes - required: - - gradeService - properties: - gradeService: - type: string - description: | - The kind of grading service available for this submission: - - - `ags2p0`: LTI 1.3 Assignment and Grade Services 2.0 - - `outcomes1p1`: LTI 1.1 Outcomes 1.1 - enum: [ags2p0, outcomes1p1] - sourcedid: - type: string - description: The sourcedid of the LTI submission when using LTI Outcomes - description: Assignment Submission + replyTo: + type: string + description: | + When the comment is a reply to another comment, the unique identifier of the parent comment + context: + $ref: '#/components/schemas/ScoreCommentContext' + description: Creation of a comment + example: + revision: '000000000000000000000010' + comment: '@[000000000000000000000000:flat] Great work!' + rawComment: '@flat: Great work!' + mentions: + - '000000000000000000000000' + replyTo: '000000000000000000000000' + context: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + ScoreCommentUpdate: + type: object + properties: + revision: + type: string + description: | + The unique identifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. + comment: + maxLength: 10000 + minLength: 1 + type: string + description: | + The comment text that can includes mentions using the following format: `@[id:username]`. + rawComment: + maxLength: 10000 + minLength: 1 + type: string + description: | + A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. + context: + $ref: '#/components/schemas/ScoreCommentContext' + description: Update of a comment example: - id: 58c4955c226ffff257211a90 - classroom: 58c4725345cd836264f0b29e - assignment: 58c49068524c03ec576ca43c - creator: 559eb5c7f0d4d5e46d03781d - creationDate: 2020-08-12T00:25:00.748000Z - submissionDate: 2020-08-12T00:45:22.748000Z - attachments: - - type: flat - score: 58c4955a226ffff257211a8d - title: Hello - Student - returnDate: 2020-08-15T00:25:00.748000Z - returnCreator: 559eb5c7f0d4d5e46d000000 - grade: 80 - draftGrade: 82 - googleClassroom: - id: CgsI-00000000000 - state: turned_in - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission - AssignmentSubmissionComment: - description: Feedback comment added to an assignment submission + revision: '000000000000000000000011' + comment: '@[000000000000000000000000:flat] Great work!' + rawComment: '@flat: Great work!' + mentions: + - '000000000000000000000000' + replyTo: '000000000000000000000000' + context: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + ScoreComment: type: object + required: + - id + - type + - user + - score + - comment + - rawComment + - date properties: id: type: string description: The comment unique identifier + type: + type: string + description: The type of the comment + enum: + - document + - inline user: type: string description: The author unique identifier - submission: + score: type: string - description: The submission unique identifier + description: The unique identifier of the score where the comment was posted + revision: + type: string + description: The unique identifier of revision the comment was posted + replyTo: + type: string + description: | + When the comment is a reply to another comment, the unique identifier of the parent comment date: type: string description: The date when the comment was posted @@ -7672,725 +9577,686 @@ components: format: date-time comment: type: string - description: The comment text - unread: - type: boolean - description: True if the comment is unread by the current user - AssignmentSubmissionCommentCreation: - description: Creation of a assignment submission comment - required: - - comment - type: object - properties: - comment: - type: string - description: The comment text - AssignmentSubmissionHistory: - description: History item of the submission - type: object - required: - - date - - users - properties: - date: - description: The date when the submission was changed - type: string - format: date-time - classroom: - description: The classroom unique identifier where the submission was changed - type: string - assignment: - description: The assignment unique identifier where the submission was changed - type: string - submission: - description: The submission unique identifier + description: | + The comment text that can includes mentions using the following + format: `@[id:username]`. + rawComment: type: string - users: - description: The user(s) unique identifier(s) who made the change + description: | + A raw version of the comment, that can be displayed without parsing + the mentions. + context: + $ref: '#/components/schemas/ScoreCommentContext' + mentions: type: array + description: The list of user identifier mentioned on the score items: type: string - source: - description: The source of the change if the change was made by a third-party software - type: string - enum: - - lti - - googleClassroom - - microsoftGraph - state: - $ref: '#/components/schemas/AssignmentSubmissionHistoryState' - draftGrade: - type: number - description: The numerator of the grade at this time in the submission grade history - grade: - type: number - description: The numerator of the grade at this time in the submission grade history - maxPoints: - type: number - description: The denominator of the grade at this time in the submission grade history - comment: - type: string - description: The comment that is made to this submission - dueDate: + resolved: + type: boolean + description: | + For inline comments, the comment can be marked as resolved and will be hidden in the future responses + resolvedBy: type: string - description: The due date of this assignment - format: date-time - attachment: + description: | + If the user is marked as resolved, this will contain the unique identifier of the User who marked this comment as resolved + moderation: type: object + description: Information about the comment being moderated properties: - score: - type: string - description: The score identifier that changed - revision: - type: string - description: The revision identifier that changed - title: + hidden: + type: boolean + description: If true, this comment will be hidden from other users + reason: type: string - description: The title of the score that changed - EduLibrary: - description: A Flat for Education Library - type: object - required: - - id - - name - - type - - visibility - properties: - id: - type: string + description: If the comment is hidden, the reason why this one has been moderated + enum: + - spam + - inappropriate + spam: + type: boolean description: | - Unique identifier of the library. - - This one can be used to list the underlying resources using - `GET /v2/eduResources?parent={library-id}` - name: - type: string - description: Name of the lirbary - type: - type: string - description: Type of the library - enum: - - myResources - - organizationResources - - flatEduSamples - visibility: - description: Visibility of the library - type: string - enum: - - private - - organization - - public + `true if the message has been detected as spam and hidden from other users + description: Comment added on a sheet music example: - id: root - name: My resources - visibility: private - EduResourcePrivacy: + id: '000000000000000000000010' + type: inline + user: '000000000000000000000001' + score: '000000000000000000000042' + revision: '000000000000000000000011' + replyTo: '000000000000000000000000' + comment: '@[000000000000000000000000:flat] Great work!' + rawComment: '@flat: Great work!' + context: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + mentions: + - '000000000000000000000000' + resolved: true + resolvedBy: '000000000000000000000000' + spam: false + MediaScoreSharingMode: type: string + description: The sharing mode of the score for classes post and assignments + default: read + enum: + - read + - write + - copy + - performance + TaskExportOptions: + type: object + properties: + parts: + type: array + description: A list of parts to specifically export + items: + type: string description: | - The Education resource privacy mode. - default: private - enum: - - private - - organizationPublic - - public - EduResource: - description: A Flat for Education resource contained in a resources library + Options for the requested export + example: + parts: + - 49b7d7c5-7490-4f76-9813-607f79e5b92b + - 96b5066b-54ed-4c6b-b3fc-cb7281403a89 + Task: type: object + description: An asynchronous task required: - id - - type - - title - - capabilities + - state properties: id: type: string - description: Resource unique identifier - creator: - type: string - description: The User identifier of the resource creator + description: Unique identifier of the task type: - $ref: '#/components/schemas/EduResourceType' - privacy: - $ref: '#/components/schemas/EduResourcePrivacy' - tags: - type: array - description: Specific attributes for the resource (e.g. sample resources with custom design) - items: - type: string - parent: type: string - description: Identifier of the parent resource, e.g. a folder or root - title: + description: | + Type of the task: + * `audio-export`: Exports a score to audio format (MP3, WAV) + * `score-save`: Saves or updates a score document + state: type: string - description: Title of the resource - sharingDescription: + description: State of the Task + enum: + - created + - blocked + - doing + - done + - canceled + - error + format: type: string - description: Sharing description of this resource - creationDate: + description: For files processing, the file format (e.g. `mp3`, `wav`) + score: type: string - format: date-time - description: The date when the resource was created - updateDate: + description: The score unique identifier for tasks related to scores + revision: type: string - format: date-time - description: The date when the resource was updated - resource: + description: The score revision identifier for tasks related to scores + progress: type: object + description: Details about the task progression properties: - id: - type: string - description: Unique identifier of the assignment - type: - $ref: '#/components/schemas/AssignmentType' - capabilities: - required: - - canEdit - - canPublishInClass - - canArchive - - canUnarchive - type: object - description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. - properties: - canEdit: - type: boolean - description: | - Whether the current user can edit the assignment - canPublishInClass: - type: boolean - description: | - Whether this assignment can be published in a class - canPublishInClassError: - type: object - required: - - code - - message - description: | - If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class - properties: - code: - type: string - description: A corresponding code for this error - message: - type: string - description: A printable and localized message for this error - canArchive: - type: boolean - description: | - Whether the current user can archive the assignment - canUnarchive: - type: boolean - description: | - Whether the current user can unarchive the assignment - title: - type: string - description: Title of the folder - description: - type: string - description: Description and content of the assignment - cover: - type: string - description: The URL of the cover to display - coverFile: - type: string - description: The id of the cover to display - attachments: - type: array - items: - $ref: '#/components/schemas/MediaAttachment' - useDedicatedAttachments: - type: boolean - description: | - For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. - This boolean indicates that this assignment only supports dedicated attachments. - maxPoints: + percent: type: number - description: | - If set, the grading will be enabled for the assignement - releaseGrades: - type: string - enum: [auto, manual] - description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: - type: boolean - description: Mixing worksheets exercises for each student - toolset: + description: Percent of the task progression + text: type: string - description: The id of the associated toolset - nbPlaybackAuthorized: - type: number - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - assignmentsTypes: - description: The assignment type of the resources that are included in the folder, - type: array - items: - $ref: '#/components/schemas/AssignmentType' - resourcesCount: - description: The number of resources inside the folder - type: number - required: - - attachments - - capabilities - - id - - title - - type - capabilities: - description: Capabilities available for this resource - type: object - properties: - canEdit: - type: boolean - description: | - Whether the current user can modify this resource - canAddResources: - type: boolean - description: | - Whether the current user can add resources within this resource (e.g. `assignment` inside a `folder`) - canAddFolders: - type: boolean - description: | - Whether the current user can add folders within this resource (e.g. `folder` inside `root`) - canChangePrivacy: - type: boolean - description: | - Whether the current user can change the privacy of this resource (e.g. to share as `organizationPublic` or unshare it with `private`) - subjects: - $ref: '#/components/schemas/EduResourceSubjects' - grades: - $ref: '#/components/schemas/EduResourceGrades' - EduResourceCreation: - description: Creation of an education resource - type: object - required: - - type - - title - properties: - type: - $ref: '#/components/schemas/EduResourceType' - title: - type: string - description: Title of the resource - maxLength: 1000 - minLength: 1 - parent: - type: string - default: root - description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` - EduResourceUpdate: - description: Update of an education resource - type: object - properties: - title: - type: string - description: Title of the resource - maxLength: 1000 - minLength: 1 - sharingDescription: - type: string - description: Sharing description of the resource - maxLength: 400 - privacy: - $ref: '#/components/schemas/EduResourcePrivacy' - subjects: - $ref: '#/components/schemas/EduResourceSubjects' - grades: - $ref: '#/components/schemas/EduResourceGrades' - EduResourceType: - description: Type of an education resource - type: string - enum: - - assignment - - folder - EduResourceMove: - description: Move an education resource - type: object - required: - - destination - properties: - destination: + description: Text details of the task progress + creationDate: type: string - description: | - Unique identifier of the destination of the folder where to move this resource. - This can also be `root` to move the resource at the root of the user resource library. - EduResourceCopy: - description: Copy an education resource - type: object - required: - - destination - properties: - destination: + description: The creation date of the task + format: date-time + modificationDate: type: string + description: The last modification date of the task + format: date-time + doneDate: + type: string + description: The date when the task has been completed + format: date-time + result: + type: object + description: Optional result information about this task + properties: + url: + description: URL returned by the task worker + type: string + error: + description: Error returned by task worker + type: string + errorHistory: + type: array + description: If any errors happened when processing this task, the list of errors identifiers + items: + type: string + isCancellable: + type: boolean description: | - Unique identifier of the destination of the folder where to copy this resource. - This can also be `root` to copy the resource at the root of the user resource library. - EduResourceUseInClass: - description: Use an education resource in class + Whether the task can be canceled by the user. + Only `true` when the task is in `created` state (waiting to be processed). + readOnly: true + children: + type: array + description: Child tasks for hierarchical task structures (e.g., conversion subtasks) + items: + $ref: '#/components/schemas/Task' + UserPublicSummary: type: object - required: - - classroom properties: - classroom: + id: type: string - description: The destination classroom where the resource will be copied. - assignment: + description: The user unique identifier + type: type: string - description: An optional destination assignment where the original assignement will be copied. Must be a draft. - EduResourceLtiLink: - description: LTI Link details for the class - type: object - required: - - ltiUrl - properties: - ltiUrl: + description: The type of user account + enum: + - user + - guest + product: + $ref: '#/components/schemas/TutteoProduct' + username: type: string - description: An URL that can be used to launch LTI with this resource in a classroom. - EduResourceSubjects: - description: The subjects of this resource, or the subjects of the resources included in the folder - type: array - items: - $ref: '#/components/schemas/TeachingTheme' - EduResourceGrades: - description: The grades of this resource, or the grades of the resources included in the folder. - type: array - items: - $ref: '#/components/schemas/Grade' - MicrosoftGraphAssignment: - type: object - description: A Microsoft Teams asignment - properties: - id: + description: The user name (unique for the organization) + printableName: type: string - description: Identifier of the assignement assigned by Microsoft Teams - state: + description: The name that can be directly printed (name, firstname & lastname, or username) + firstname: type: string - description: State of the assignment - alternateLink: + description: Firstname of the user (for education users) + lastname: type: string - description: Absolute link to this assignement in the Microsoft Teams web UI - categories: + description: Lastname of the user (for education users) + name: + type: string + description: A displayable name for the user (for consumer users) + picture: + type: string + nullable: true + description: The URL of the picture to display + badges: type: array - description: List of categories where this assignment is published under + description: | + List of badges for the user profile: + + - `power` + - `staff` + - `composerOfTheMonth` + - `ambassador` + - `challenge` items: type: string - description: A Microsoft Teams assignment category ID - example: - id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda - state: draft - alternateLink: https://teams.microsoft.com/l/entity - categories: [0a012acd-6e78-4cd0-89a9-80d296e48f82] - MicrosoftGraphSubmission: - type: object - description: A Microsoft Teams submission + description: Badge name + organization: + type: string + description: Organization ID (for Edu users only) + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + classRole: + $ref: '#/components/schemas/ClassRoles' + htmlUrl: + type: string + description: Link to user profile (for Indiv. users only) required: - id - - state + - picture + - product + - type + - username + UserPublic: + type: object properties: id: type: string - description: Identifier of the submission assigned by Microsoft Teams - state: + description: The user unique identifier + type: type: string - description: State of the submission - example: - id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda - state: returned - GoogleClassroomCoursework: - type: object - properties: - id: + description: The type of user account + enum: + - user + - guest + product: + $ref: '#/components/schemas/TutteoProduct' + username: type: string - description: Identifier of the coursework assigned by Classroom - state: + description: The user name (unique for the organization) + printableName: type: string - description: State of the coursework - alternateLink: + description: The name that can be directly printed (name, firstname & lastname, or username) + firstname: type: string - description: Absolute link to this coursework in the Classroom web UI - topicId: + description: Firstname of the user (for education users) + lastname: + type: string + description: Lastname of the user (for education users) + name: + type: string + description: A displayable name for the user (for consumer users) + picture: type: string nullable: true - description: Identifier of the topic where the assignment is created - description: A coursework on Google Classroom - example: - id: '1235665432' - state: draft - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/detail - GoogleClassroomSubmission: - type: object + description: The URL of the picture to display + badges: + type: array + description: | + List of badges for the user profile: + + - `power` + - `staff` + - `composerOfTheMonth` + - `ambassador` + - `challenge` + items: + type: string + description: Badge name + organization: + type: string + description: Organization ID (for Edu users only) + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + classRole: + $ref: '#/components/schemas/ClassRoles' + htmlUrl: + type: string + description: Link to user profile (for Indiv. users only) + bio: + type: string + description: User's biography + registrationDate: + type: string + description: Date the user signed up + format: date-time + likedScoresCount: + type: integer + description: Number of the scores liked by the user + followersCount: + type: integer + description: Number of followers the user have + followingCount: + type: integer + description: Number of people the user follow + ownedPublicScoresCount: + type: integer + description: Number of public scores the user have + allPublicScoresCount: + type: integer + description: Total number of public scores the user participates in (owned + joined) + likesCount: + type: integer + description: Number of likes on the user published scores + playsCount: + type: integer + description: Number of plays on the user published scores + coverPicture: + type: string + description: Cover picture (backgroud) for the profile + nullable: true + profileTheme: + type: string + description: Theme (background) for the profile + links: + $ref: '#/components/schemas/UserCommunityProfileLinks' required: - id - - state - - alternateLink + - picture + - product + - type + - username + UserDetailsAdmin: + type: object properties: id: type: string - description: Identifier of the coursework submission assigned by Classroom - state: + description: The user unique identifier + type: type: string - description: State of the submission on Google Classroom - alternateLink: + description: The type of user account + enum: + - user + - guest + product: + $ref: '#/components/schemas/TutteoProduct' + username: type: string - description: Absolute link to this coursework in the Classroom web UI - description: A coursework submission on Google Classroom - example: - id: CgsI-00000000000 - state: turned_in - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission - GroupDetails: - type: object - properties: - id: + description: The user name (unique for the organization) + printableName: + type: string + description: The name that can be directly printed (name, firstname & lastname, or username) + firstname: type: string - description: The unique identifier of the group + description: Firstname of the user (for education users) + lastname: + type: string + description: Lastname of the user (for education users) name: type: string - description: The displayable name of the group - type: - $ref: '#/components/schemas/GroupType' + description: A displayable name for the user (for consumer users) + picture: + type: string + nullable: true + description: The URL of the picture to display + badges: + type: array + description: | + List of badges for the user profile: + + - `power` + - `staff` + - `composerOfTheMonth` + - `ambassador` + - `challenge` + items: + type: string + description: Badge name organization: type: string - description: The unique identifier of the Organization owning the group - creationDate: + description: Organization ID (for Edu users only) + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + classRole: + $ref: '#/components/schemas/ClassRoles' + htmlUrl: type: string - description: The date when the group was create + description: Link to user profile (for Indiv. users only) + email: + type: string + description: Email of the user + format: email + lastActivityDate: + type: string + description: Date of the last user activity format: date-time - usersCount: - type: number - description: The number of students in this group - readOnly: + license: + type: object + properties: + id: + type: string + description: ID of the current license + expirationDate: + type: string + description: Date when the license expires + format: date-time + source: + $ref: '#/components/schemas/LicenseSources' + mode: + $ref: '#/components/schemas/LicenseMode' + active: + type: boolean + description: ID of the current license + description: Current active license of the user + groups: + description: For Flat for Education accounts, list of Group identifiers the user is part of. + type: array + items: + type: string + description: Unique group identifier + isEduTestingStudent: type: boolean description: | - `true` if the properties and members of this group are in in read-only - description: The details of a group - example: - id: 58c4955c226ffff257211a00 - name: 5th Grade - Teachers - type: classTeachers - organization: '0000000000000000000000042' - creationDate: 2017-07-02T15:02:40.207000Z - usersCount: 2 - readOnly: false - GroupType: - type: string - description: The type of the group - enum: - - generic - - classTeachers - - classStudents - ClassState: - type: string - description: The state of a classroom - enum: - - active - - inactive - - archived - - deleted - MediaScoreSharingMode: - type: string - description: The sharing mode of the score for classes post and assignments - default: read - enum: - - read - - write - - copy - - performance - MediaAttachment: - type: object + Indicates if the user account is marked as a testing student account. + Testing students are typically excluded from certain educational integrations and workflows. + This field helps API clients distinguish between regular students and testing accounts. required: + - id + - picture + - product - type + - username + UserCreation: + required: + - password + - username + type: object properties: - type: - type: string - description: | - The type of the assignment resolved: - * `rich`, `photo`, `video` are automatically resolved as `link` - * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. - enum: - - rich - - photo - - video - - link - - flat - - googleDrive - - worksheet - score: - type: string - description: An unique Flat score identifier - revision: - type: string - description: An unique revision identifier of a score - worksheet: - type: string - description: An unique worksheet identifier - dedicated: - type: boolean - description: True if the resource is dedicated for the assignment (for scores and worksheets), meaning on the user-side this one is stored in the assignment - track: + username: + maxLength: 30 + minLength: 1 type: string - description: A unique track identifier - sharingMode: - $ref: '#/components/schemas/MediaScoreSharingMode' - lockScoreTemplate: - type: boolean - description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. - title: + description: Username of the new account + firstname: + maxLength: 60 type: string - description: The resolved title of the attachment - description: + description: First name of the user + lastname: + maxLength: 60 type: string - description: The resolved description of the attachment - html: + description: Last name of the user + email: type: string - description: | - If the attachment type is `rich` or `video`, the HTML code of the - media to display - htmlWidth: + description: Email of the new account + format: email + password: + minLength: 6 + maxLength: 1000 type: string - description: If the `html` is available, the width of the widget - htmlHeight: + description: Password of the new account + format: password + locale: + description: User language. Input values will be automatically normalized to a supported locale code. type: string - description: If the `html` is available, the height of the widget - url: + default: en + role: + description: Role of the new account type: string - description: The url of the attachment - thumbnailUrl: + default: user + enum: + - user + - teacher + - admin + description: User creation + UserAdminUpdate: + type: object + properties: + password: + minLength: 6 + maxLength: 1000 type: string - description: | - If the attachment type is `rich`, `video`, `photo` or `link`, a - displayable thumbnail for this attachment - thumbnailWidth: - type: integer - description: | - If the `thumbnailUrl` is available, the width of the thumbnail - thumbnailHeight: - type: integer - description: | - If the `thumbnailUrl` is available, the width of the thumbnail - authorName: + description: Password of the account + format: password + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + username: + maxLength: 30 + minLength: 1 type: string - description: The resolved author name of the attachment - authorUrl: + description: Username of the account + firstname: + maxLength: 60 type: string - description: The resolved author url of the attachment - iconUrl: + description: First name of the user + lastname: + maxLength: 60 type: string - description: The URL of the icon - mimeType: + description: Last name of the user + email: type: string - description: The mine type of the file - googleDriveFileId: + description: Email of the account + format: email + description: User update as an organization admin + UserAzureDetails: + type: object + properties: + oid: type: string - description: The ID of the Google Drive File - description: | - Media attachment. The API will automatically resolve the details, oEmbed, - and media available if possible and return them in this object - example: - type: video - url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw - title: Flat - The online collaborative music notation software - description: Discover Flat on https://flat.io - html: - thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg - thumbnailHeight: 1052 - thumbnailWidth: 1868 - authorName: Flat - authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw - Task: + description: User object identifier on Azure AD + hd: + type: string + description: User tenant (domain name) + preferredUsername: + type: string + description: User Preferred Username (UPN), i.e. the main email of the user + UserDetails: type: object - description: An asynchronous task - required: - - id - - state properties: id: type: string - description: Unique identifier of the task + description: The user unique identifier type: type: string - description: Type of the task (e.g. audio-export) - state: - type: string - description: State of the Task + description: The type of user account enum: - - created - - doing - - done - - canceled - - error - format: + - user + - guest + product: + $ref: '#/components/schemas/TutteoProduct' + username: type: string - description: For files processing, the file format (e.g. `mp3`, `wav`) - score: + description: The user name (unique for the organization) + printableName: type: string - description: The score unique identifier for tasks related to scores - progress: - type: object - description: Details about the task progression - properties: - percent: - type: number - description: Percent of the task progression - text: - type: string - description: Text details of the task progress - creationDate: + description: The name that can be directly printed (name, firstname & lastname, or username) + firstname: type: string - description: The creation date of the task - format: date-time - modificationDate: + description: Firstname of the user (for education users) + lastname: type: string - description: The last modification date of the task - format: date-time - doneDate: + description: Lastname of the user (for education users) + name: type: string - description: The date when the task has been completed + description: A displayable name for the user (for consumer users) + picture: + type: string + nullable: true + description: The URL of the picture to display + badges: + type: array + description: | + List of badges for the user profile: + + - `power` + - `staff` + - `composerOfTheMonth` + - `ambassador` + - `challenge` + items: + type: string + description: Badge name + organization: + type: string + description: Organization ID (for Edu users only) + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + classRole: + $ref: '#/components/schemas/ClassRoles' + htmlUrl: + type: string + description: Link to user profile (for Indiv. users only) + bio: + type: string + description: User's biography + registrationDate: + type: string + description: Date the user signed up format: date-time - result: - type: object - description: Optional result information about this task - properties: - url: - description: URL returned by the task worker - type: string - error: - description: Error returned by task worker - type: string - errorHistory: + likedScoresCount: + type: integer + description: Number of the scores liked by the user + followersCount: + type: integer + description: Number of followers the user have + followingCount: + type: integer + description: Number of people the user follow + ownedPublicScoresCount: + type: integer + description: Number of public scores the user have + allPublicScoresCount: + type: integer + description: Total number of public scores the user participates in (owned + joined) + likesCount: + type: integer + description: Number of likes on the user published scores + playsCount: + type: integer + description: Number of plays on the user published scores + coverPicture: + type: string + description: Cover picture (backgroud) for the profile + nullable: true + profileTheme: + type: string + description: Theme (background) for the profile + links: + $ref: '#/components/schemas/UserCommunityProfileLinks' + isEmailVerified: + type: boolean + description: Whether the user's email address has been verified + azureDetails: + $ref: '#/components/schemas/UserAzureDetails' + privateProfile: + type: boolean + description: Tell either this user profile is private or not (individual accounts only) + locale: + $ref: '#/components/schemas/FlatLocalesString' + groups: + description: For Flat for Education accounts, list of Group identifiers the user is part of. type: array - description: If any errors happened when processing this task, the list of errors identifiers items: type: string - FlatErrorResponse: - description: An API Error response - type: object + description: Unique group identifier + pictureFile: + type: string + nullable: true + description: The ID of the user profile picture + coverPictureFile: + type: string + nullable: true + description: The ID of the user profile cover picture required: - - code - - message + - id + - picture + - product + - type + - username + UserSigninLinkCreation: + type: object properties: - code: + destinationPath: type: string - description: A corresponding code for this error - message: + description: Path to redirect to after signin + default: / + example: + destinationPath: /class + UserSigninLink: + type: object + properties: + url: type: string - description: A printable message for this error - id: + description: URL to use to sign in to this account + token: type: string - description: An unique error identifier generated for the request - param: + description: Raw sign-in token, can be used to build custom URLs (e.g. deep links) + expirationDate: type: string - description: The related parameter that caused the error + description: Date when the link expires + format: date-time example: - code: CLIENT_ERROR - message: Invalid request - id: '123456789' + url: https://demo.flat.io/auth/signin-link/00000000-0000-0000-0000-000000000000?next=%2F + token: 0 + OrganizationUserAccessTokenCreation: + required: + - scopes + type: object + properties: + scopes: + type: array + description: List of requested scopes for this credential + items: + $ref: '#/components/schemas/AppScopes' + description: Creation of a delegated API access token for an organization user + example: + scopes: + - account.public_profile + - account.education_profile + - edu.classes.readonly UserCommunityProfileLinks: type: object description: Social networks links @@ -8419,36 +10285,6 @@ components: type: string nullable: true description: Personnal website URL - TeachingTheme: - type: string - description: Teaching theme - enum: - - composition - - music-theory - - general-music - - band - - choir - - orchestra - - jazz-ensemble - - music-technology - - other - Grade: - type: string - description: Class grade of the resource - enum: - - '1' - - '2' - - '3' - - '4' - - '5' - - '6' - - '7' - - '8' - - '9' - - '10' - - '11' - - '12' - - university parameters: limit: name: limit @@ -8475,6 +10311,18 @@ components: The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. schema: type: string + eventProperties: + name: eventProperties + in: query + description: | + Optional analytics properties merged into XP tracking for this request. + + JSON-encoded string representing event properties. Example: + + - `?eventProperties={"context":"discover","screenLevel0":"home"}` + schema: + type: string + example: '{"context":"discover","screenLevel0":"home","screenRoute":"/discover"}' sortDirection: name: direction in: query @@ -8559,3 +10407,44 @@ components: description: Filter users who don't have an active license schema: type: boolean + testAccounts: + name: testAccounts + in: query + description: | + Filter users based on test account status. + Test accounts are student accounts created for testing purposes by teachers. + + * `exclude`: Hide test accounts from results. + * `only`: Show only test accounts. + + When omitted, all users are returned. + schema: + type: string + enum: + - exclude + - only + headers: + X-Flat-User: + description: User identifier from the session + schema: + type: string + X-Flat-Access-Token: + description: Access token for API authentication + schema: + type: string + X-CSRF-Token: + description: CSRF protection token + schema: + type: string + X-Flat-Organization: + description: Organization identifier from the session + schema: + type: string + X-Server-Date: + description: | + Server timestamp (ISO 8601) captured at the start of the request. + Use as `modifiedSince` or `deletedSince` value for the next sync call + to avoid clock skew between the client and server. + schema: + type: string + format: date-time diff --git a/spec/openapi.yaml b/spec/openapi.yaml index f0d7298..f751878 100644 --- a/spec/openapi.yaml +++ b/spec/openapi.yaml @@ -1,17 +1,14 @@ -# An OpenAPI 3 definition of the Flat API +# Flat API - Public OpenAPI Specification # -# This is used for generating API documentation and the types used by the API clients. +# https://flat.io/developers/docs/api/ # -# Some style notes: -# - This file is used by ReDoc, which allows GitHub Flavored Markdown in descriptions. -# - There is no maximum line length, for ease of editing and pretty diffs. openapi: 3.0.3 info: title: Flat API description: | The Flat API allows you to easily extend the abilities of the [Flat Platform](https://flat.io), with a wide range of use cases including the following: - * Creating and importing new music scores using MusicXML, MIDI, Guitar Pro (GP3, GP4, GP5, GPX, GP), PowerTab, TuxGuitar and MuseScore files + * Creating and importing new music scores using MusicXML, MIDI, Guitar Pro, MuseScore, ABC notation, and many other formats * Browsing, updating, copying, exporting the user's scores (for example in MP3, WAV or MIDI) * Managing educational resources with Flat for Education: creating & updating the organization accounts, the classes, rosters and assignments. @@ -33,7 +30,7 @@ info: name: Flat url: https://flat.io/developers/docs/api/ email: developers@flat.io - version: 2.21.0 + version: 2.22.0 x-logo: url: https://prod.flat-cdn.com/img/logo-flat.svg servers: @@ -60,7 +57,7 @@ tags: description: | Collections let you organize your content in a Flat account. They work like a regular _folder_ with some specificities: - Our design goal here is to create a system similar to a _book_ or a _playlist of songs_. - - Collections can't have children collections (except the `trash` and `sharedWithMe` that are special collections). + - Collections can't have children collections (except the `trash` that is a special collection). - Any score can be added to one or multiple collections. For example, you can have a single private score in two or more collections, or add any public or shared scores to one of your collections. All the collections don't have the same capabilities. Capabilities depend on the `type` of collection and the `rights` you have on a collection. They are available when [listing the collection](#operation/listCollections) or [retrieving the collection details](#operation/getCollection). @@ -80,39 +77,39 @@ tags: x-displayName: Flat for Education Classes description: Flat for Education Classes - name: EduResources - x-displayName: Flat for Education Resources [Beta] + x-displayName: Flat for Education Resources description: | Resource libraries in Flat for Education. - These API endpoints are in beta and may include breaking changes over the upcoming months. - name: Group x-displayName: Flat for Education Groups description: Flat for Education Groups -- name: Task - x-displayName: Asynchronous tasks - description: Scheduled and asynchronous tasks paths: - /me: + /classes: get: tags: - - Account - summary: Get current user account - description: | - Get details about the current authenticated User. - operationId: getAuthenticatedUser + - Class + summary: List the classes available for the current user + operationId: listClasses parameters: - - name: onlyId + - name: state in: query - description: Only return the user id + description: Filter the classes by state schema: - type: boolean - default: false + type: string + default: active + enum: + - active + - inactive + - archived responses: '200': - description: Current user details + description: The list of classes content: application/json: schema: - $ref: '#/components/schemas/UserDetails' + type: array + items: + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -121,81 +118,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - account.public_profile - - account.education_profile - x-codeSamples: - - lang: Python - source: | - from pprint import pprint - import os - - import flat_api - from flat_api.rest import ApiException - - configuration = flat_api.Configuration() - configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] - flat_api_client = flat_api.ApiClient(configuration) - try: - pprint(flat_api.AccountApi(flat_api_client).get_authenticated_user()) - except ApiException as e: - print(e) - - lang: PHP - source: | - setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); - - $api = new Flat\APIClient\Api\AccountApi(); - - try { - $result = $api->getAuthenticatedUser(); - print_r($result); - } catch (Exception $e) { - echo 'Exception when calling AccountApi->getAuthenticatedUser: ', $e->getMessage(), PHP_EOL; - } - /scores: + - edu.classes + - edu.classes.readonly post: tags: - - Score - summary: Create a new score + - Class + summary: Create a new class description: | - Use this API method to **create a new music score in the current User account**. This API endpoints provides 3 ways to create scores: - - * `ScoreCreationBuilderData` : Create a blank score by providing the list of instruments to use. You can optionally customize the initial key signature, time signature, enable TABs, Chord grids, as well as the page layout. - * `ScoreCreationFileImport`: Import an existing MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`), Guitar Pro (GP3, GP4, GP5, GPX, GP), PowerTab, TuxGuitar, or MuseScore file to create the new Flat document. - * `ScoreCreationGoogleDriveImport`: Import an existing Google Drive file from the connected Google Drive account. - - This API call will automatically create the first revision of the document, the score can be modified by the using our web application or by uploading a new revision of this file (`POST /v2/scores/{score}/revisions/{revision}`). - - The currently authenticated user will be granted owner of the file and will be able to add other collaborators (users and groups). + Classrooms on Flat allow you to create activities with assignments and post content to a specific group. - If no `collection` is specified, the API will create the score in the most appropriate collection. When using an OAuth2 access token or a personal token, the score will be automatically added to your dedicated app collection in the account (`/v2/collections/app`). + When creating a class, Flat automatically creates two groups: one for the teachers of the course, one for the students. The creator of this class is automatically added to the teachers group. - If a `collection` is specified and this one has more public privacy settings than the score (e.g. `public` vs `private` for the score), the privacy settings of the created score will be adjusted to the collection ones. + If the classsroom is synchronized with another application like Google Classroom, some of the meta information will automatically be updated. - You can check the adjusted privacy settings in the returned score `privacy`, and optionally adjust these settings if needed using `PUT /scores/{score}`. - operationId: createScore + You can add users to this class using `PUT /classes/{class}/users/{user}`, they will automatically added to the group based on their role on Flat. Users can also enroll themselves to this class using `POST /classes/enroll/{enrollmentCode}` and the `enrollmentCode` returned in the `ClassDetails` response. + operationId: createClass requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreCreation' + $ref: '#/components/schemas/ClassCreation' required: true responses: '200': - description: Score created - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '400': - description: Bad score creation request + description: The new class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassDetails' '402': description: Account overquota content: @@ -210,127 +160,23 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores + - edu.classes x-codegen-request-body-name: body - x-codeSamples: - - lang: Ruby - source: | - require 'flat_api' - FlatApi.configure do |config| - config.access_token = 'your_access_token' - end - begin - score_data = File.open("my-score.musicxml", "r:UTF-8") { |f| f.read } - body = FlatApi::ScoreCreationFileImport.new({ - title: 'Score Title', - data: score_data, - }) - p FlatApi::ScoreApi.new.create_score(body) - rescue FlatApi::ApiError => e - puts "Error when calling ScoreApi->create_score: #{e}" - end - - lang: Python - source: | - from pprint import pprint - import os - from urllib.request import urlopen - from urllib.error import HTTPError - - import flat_api - from flat_api.rest import ApiException - - SCORE_TO_IMPORT='https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml' - - configuration = flat_api.Configuration() - configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] - flat_api_client = flat_api.ApiClient(configuration) - - try: - # Download a MusicXML "Hello World" - hello_world = urlopen(SCORE_TO_IMPORT).read().decode('utf-8') - - # The new score meta, including the MusicXML file as `data` - new_score = flat_api.ScoreCreation( - title='Hello World', - privacy='private', - data=hello_world - ) - - # Create the document and print the meta returned by the API - pprint(flat_api.ScoreApi(flat_api_client).create_score(new_score)) - except (ApiException, HTTPError) as e: - print(e) - - lang: PHP - source: | - setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); - - $musicXml = file_get_contents('https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml'); - - try { - $body = new \Flat\APIClient\Model\ScoreCreation(); - $body->setTitle('Hello world'); - $body->setPrivacy('private'); - $body->setData($musicXml); - - $scoreApi = new Flat\APIClient\Api\ScoreApi(); - $result = $scoreApi->createScore($body); - print_r($result); - } catch (Exception $e) { - echo 'Exception when calling ScoreApi->createScore: ', $e->getMessage(), PHP_EOL; - } - /scores/{score}: + /classes/{class}: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string + - $ref: '#/components/parameters/class' get: tags: - - Score - summary: Get a score's metadata - description: | - Get the details of a score identified by the `score` parameter in the URL. - The currently authenticated user must have at least a read access to the document to use this API call. - operationId: getScore - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - Class + summary: Get the details of a single class + operationId: getClass responses: '200': - description: Score details - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '402': - description: Account overquota and this document is out of the granted quota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + description: The new class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -339,51 +185,56 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly + - edu.classes + - edu.classes.readonly put: tags: - - Score - summary: Edit a score's metadata + - Class + summary: Update the class description: | - This API method allows you to change the metadata of a score document (e.g. its `title` or `privacy`), all the properties are optional. - - To edit the file itself, create a new revision using the appropriate method (`POST /v2/scores/{score}/revisions/{revision}`). - - When editing the `title`, `subtitle`, `composer`, `lyricist`, `arranger` or `licenseText`, the metadatas will be instantly be updated, and a real-time action will be pushed to update the document lazily. - This pending document modification will be automatically be saved as a new version by either a connected client or our internal versioning service. - operationId: editScore + Update the meta information of the class + operationId: updateClass requestBody: + description: Details of the Class content: application/json: schema: - $ref: '#/components/schemas/ScoreModification' + $ref: '#/components/schemas/ClassUpdate' required: true responses: '200': - description: Score details - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '402': - description: Account overquota + description: The new class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/ClassDetails' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found - content: - application/json: + security: + - OAuth2: + - edu.classes + x-codegen-request-body-name: body + /classes/{class}/archive: + parameters: + - $ref: '#/components/parameters/class' + post: + tags: + - Class + summary: Archive the class + description: | + Mark the class as `archived`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. + operationId: archiveClass + responses: + '200': + description: The class details + content: + application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -392,41 +243,47 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - x-codegen-request-body-name: body + - edu.classes delete: tags: - - Score - summary: Delete a score + - Class + summary: Unarchive the class description: | - This method can be used by anyone that has at least read access to the document: - - - When called by an owner/admin, it will schedule the deletion of the score, its revisions, and complete history. The score won't be accessible anymore after calling this method and the user's quota will directly be updated. - - When called by a collaborator, the score will be unshared (i.e. removed from the account & own collections). - - When called by another user that has the score in its collections, the score will be removed from all the user collections. - operationId: deleteScore - parameters: - - name: now - in: query - description: If `true`, the score deletion will be scheduled to be done ASAP - schema: - type: boolean - default: false + Mark the class as `active`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. + operationId: unarchiveClass responses: - '204': - description: The score has been removed - '403': - description: Not granted to manage this score + '200': + description: The class details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + $ref: '#/components/schemas/ClassDetails' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + /classes/{class}/activate: + parameters: + - $ref: '#/components/parameters/class' + post: + tags: + - Class + summary: Activate the class + description: | + Mark the class as `active`. This is mainly used for classes synchronized from Clever that are initially with an `inactive` state and hidden in the UI. + operationId: activateClass + responses: + '200': + description: The class details + content: + application/json: + schema: + $ref: '#/components/schemas/ClassDetails' default: description: Error content: @@ -435,38 +292,51 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - /scores/{score}/untrash: + - edu.classes + /classes/{class}/users/{user}: parameters: - - name: score + - $ref: '#/components/parameters/class' + - name: user in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + description: Unique identifier of the user required: true schema: type: string - post: + put: tags: - - Score - summary: Untrash a score + - Class + summary: Add a user to the class description: | - This method will remove the score from the `trash` collection and from the deletion queue, and add it back to the original collections. - operationId: untrashScore + This method can be used by a teacher of the class to enroll another Flat user into the class. + + Only users that are part of your Organization can be enrolled in a class of this same Organization. + + When enrolling a user in the class, Flat will automatically add this user to the corresponding Class group, based on this role in the Organization. + operationId: addClassUser responses: '204': - description: The score has been untrashed - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + description: The user has been added to the class + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + delete: + tags: + - Class + summary: Remove a user from the class + description: | + This method can be used by a teacher to remove a user from the class, or by a student to leave the classroom. + + Warning: Removing a user from the class will remove the associated resources, including the submissions and feedback related to these submissions. + operationId: deleteClassUser + responses: + '204': + description: The user has been removed from the class default: description: Error content: @@ -475,27 +345,26 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - /scores/{score}/submissions: + - edu.classes + /classes/{class}/students/{user}/submissions: parameters: - - name: score + - $ref: '#/components/parameters/class' + - name: user in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + description: Unique identifier of the user required: true schema: type: string get: tags: - - Score - Class - summary: List submissions related to the score + summary: List the submissions for a student description: | - This API call will list the different assignments submissions where the score is attached. This method can be used by anyone that are part of the organization and have at least read access to the document. - operationId: getScoreSubmissions + Use this method as a teacher to list all the assignment submissions sent by a student of the class + operationId: listClassStudentSubmissions responses: '200': - description: List of submissions + description: The list of submissions content: application/json: schema: @@ -510,64 +379,101 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - /scores/{score}/fork: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + /classes/{class}/assignments: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string + - $ref: '#/components/parameters/class' + get: + tags: + - Class + summary: Assignments listing + operationId: listAssignments + parameters: [] + responses: + '200': + description: List of assignments for the class + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ClassAssignment' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly post: tags: - - Score - summary: Fork a score + - Class + summary: Assignment creation description: | - This API call will make a copy of the last revision of the specified score and create a new score. The copy of the score will have a privacy set to `private`. + Use this method as a teacher to create and post a new assignment to a class. - When using a [Flat for Education](https://flat.io/edu) account, the inline and contextualized comments will be accessible in the child document. - operationId: forkScore - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + If the class is synchronized with Google Classroom, the assignment will be automatically posted to your Classroom course. + operationId: createClassAssignment requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreFork' + $ref: '#/components/schemas/ClassAssignmentUpdate' required: true responses: '200': - description: Score details - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreDetails' - '402': - description: Account overquota + description: The assignment has been created content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/Assignment' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + security: + - OAuth2: + - edu.classes + - edu.assignments + x-codegen-request-body-name: body + /classes/{class}/assignments/{assignment}/copy: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + post: + tags: + - Class + summary: Copy an assignment + description: | + Copy an assignment to a specified class or the resource library + + For class assignments: + - If the original assignment has a due date in the past, this new assignment will be created without a due date. + - If the class is synchronized with an external app (e.g. Google Classroom), the copied assignment will also be posted on the external app. + operationId: copyAssignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentCopy' + required: true + responses: + '200': + description: The new created assignment content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentCopyResponse' default: description: Error content: @@ -576,60 +482,79 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores + - edu.classes + - edu.assignments x-codegen-request-body-name: body - /scores/{score}/collaborators: + /classes/{class}/assignments/{assignment}/archive: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - get: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + post: tags: - - Score - summary: List the collaborators + - Class + summary: Archive the assignment description: | - This API call will list the different collaborators of a score and their rights on the document. The returned list will at least contain the owner of the document. - - Collaborators can be a single user (the object `user` will be populated) or a group (the object `group` will be populated). - operationId: getScoreCollaborators - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + Archive the assignment + operationId: archiveAssignment responses: '200': - description: List of collaborators + description: The assignment details content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/ResourceCollaborator' - '402': - description: Account overquota + $ref: '#/components/schemas/Assignment' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + security: + - OAuth2: + - edu.classes + - edu.assignments + delete: + tags: + - Class + summary: Unarchive the assignment. + description: | + Mark the assignment as `active`. + operationId: unarchiveAssignment + responses: + '200': + description: The assignment details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + $ref: '#/components/schemas/Assignment' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + - edu.assignments + /classes/{class}/assignments/{assignment}/submissions: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + get: + tags: + - Class + summary: List the students' submissions + operationId: getSubmissions + responses: + '200': + description: The submissions + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -638,50 +563,32 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.readonly - - scores - post: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + put: tags: - - Score - summary: Add a new collaborator + - Class + summary: Create or edit a submission description: | - Share a score with a single user or a group. This API call allows to add, invite and update the collaborators of a resource. - - To add an existing Flat user to the resource, specify its unique identifier in the `user` property. - - To invite an external user to the resource, specify its email in the `userEmail` property. - - To add a Flat group to the resource, specify its unique identifier in the `group` property. - - To update an existing collaborator, process the same request with different rights. - operationId: addScoreCollaborator + Use this method as a student to create, update and submit a submission related to an assignment. + Students can only set `attachments` and `submit`. + Teachers can use `PUT /classes/{class}/assignments/{assignment}/submissions/{submission}` to update a submission by id. + operationId: createSubmission requestBody: content: application/json: schema: - $ref: '#/components/schemas/ResourceCollaboratorCreation' + $ref: '#/components/schemas/AssignmentSubmissionUpdate' required: true responses: '200': - description: The newly added collaborator metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ResourceCollaborator' - '402': - description: Account overquota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + description: The submission content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -690,94 +597,86 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores + - edu.classes + - edu.assignments x-codegen-request-body-name: body - /scores/{score}/collaborators/{collaborator}: + /classes/{class}/assignments/{assignment}/submissions/csv: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: collaborator - in: path - description: | - Unique identifier of a **collaborator permission**, or unique identifier of a **User**, or unique identifier of a **Group** - required: true - schema: - type: string + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' get: tags: - - Score - summary: Get a collaborator - description: | - Get the information about a collaborator (User or Group). - operationId: getScoreCollaborator - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - Class + summary: CSV Grades exports + description: Export list of submissions grades to a CSV file + operationId: exportSubmissionsReviewsAsCsv responses: '200': - description: Collaborator information - content: - application/json: - schema: - $ref: '#/components/schemas/ResourceCollaborator' - '402': - description: Account overquota + description: List of submissions content: - application/json: + text/csv: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + type: string + format: binary + default: + description: Error content: - application/json: + text/csv: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or collaborator not found + security: + - OAuth2: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + /classes/{class}/assignments/{assignment}/submissions/excel: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + get: + tags: + - Class + summary: Excel Grades exports + description: Export list of submissions grades to an Excel file + operationId: exportSubmissionsReviewsAsExcel + responses: + '200': + description: List of submissions content: - application/json: + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: - $ref: '#/components/schemas/FlatErrorResponse' + type: string + format: binary default: description: Error content: - application/json: + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.readonly - delete: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + /classes/{class}/assignments/{assignment}/submissions/{submission}: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + get: tags: - - Score - summary: Delete a collaborator - description: | - Remove the specified collaborator from the score - operationId: removeScoreCollaborator + - Class + summary: Get a student submission + operationId: getSubmission responses: - '204': - description: The collaborator has been removed - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or collaborator not found + '200': + description: A submission content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -786,61 +685,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - /scores/{score}/tracks: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - get: + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + put: tags: - - Score - summary: List the audio or video tracks linked to a score - operationId: listScoreTracks - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - - name: assignment - in: query - description: | - An assignment id with which all the tracks returned will be related to - schema: - type: string - - name: listAutoTrack - in: query - description: | - If true, and if available, return last automatically synchronized Flat's mp3 export as an additional track - schema: - type: boolean + - Class + summary: Edit a submission + description: | + Use this method as a teacher to update the different submission and give feedback. + Teachers can only set `return`, `draftGrade` and `grade` + operationId: editSubmission + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentSubmissionUpdate' + required: true responses: '200': - description: List of tracks + description: The submission content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/ScoreTrack' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/AssignmentSubmission' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + security: + - OAuth2: + - edu.classes + - edu.assignments + x-codegen-request-body-name: body + delete: + tags: + - Class + summary: Reset a submission + description: | + Use this method as a teacher to reset a submission and allow student to start over the assignment + operationId: deleteSubmission + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + responses: + '200': + description: The submission object once reset content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -849,37 +747,42 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - post: + - edu.classes + - edu.assignments + x-codegen-request-body-name: body + /classes/{class}/assignments/{assignment}/submissions/{submission}/history: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + get: tags: - - Score - summary: Add a new video or audio track to the score + - Class + operationId: getSubmissionHistory + summary: Get the history of the submission description: | - Use this method to add new track to the score. This track can then be played on flat.io or in an embedded score. - This API method support medias hosted on SoundCloud, YouTube and Vimeo. - operationId: addScoreTrack - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreTrackCreation' - required: true + For teachers only. Returns a detailed history of the submission. This currently includes state and grade histories. + security: + - OAuth2: + - edu.assignments + - edu.assignments.readonly responses: '200': - description: Created track + description: The history of the submission content: application/json: schema: - $ref: '#/components/schemas/ScoreTrack' + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionHistory' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Submission not found content: application/json: schema: @@ -890,53 +793,37 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - scores - x-codegen-request-body-name: body - /scores/{score}/tracks/{track}: + /classes/{class}/assignments/{assignment}/submissions/{submission}/comments: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: track - in: path - description: | - Unique identifier of a score audio track - required: true - schema: - type: string + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' get: tags: - - Score - summary: Retrieve the details of an audio or video track linked to a score - operationId: getScoreTrack - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - Class + operationId: getSubmissionComments + summary: List the feedback comments of a submission + security: + - OAuth2: + - edu.assignments + - edu.assignments.readonly responses: '200': - description: Track details + description: The comments of the score content: application/json: schema: - $ref: '#/components/schemas/ScoreTrack' + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionComment' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or Track not found + description: Submission not found content: application/json: schema: @@ -947,36 +834,35 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + post: + tags: + - Class + operationId: postSubmissionComment + summary: Add a feedback comment to a submission security: - OAuth2: - - scores - - scores.readonly - put: - tags: - - Score - summary: Update an audio or video track linked to a score - operationId: updateScoreTrack + - edu.assignments requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreTrackUpdate' + $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' required: true responses: '200': - description: Updated track + description: The comment content: application/json: schema: - $ref: '#/components/schemas/ScoreTrack' + $ref: '#/components/schemas/AssignmentSubmissionComment' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or Track not found + description: Submission not found content: application/json: schema: @@ -987,26 +873,41 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + /classes/{class}/assignments/{assignment}/submissions/{submission}/comments/{comment}: + parameters: + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + - $ref: '#/components/parameters/comment' + put: + tags: + - Class + operationId: updateSubmissionComment + summary: Update a feedback comment to a submission security: - OAuth2: - - scores - x-codegen-request-body-name: body - delete: - tags: - - Score - summary: Remove an audio or video track linked to the score - operationId: deleteScoreTrack + - edu.assignments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' + required: true responses: - '204': - description: Track removed + '200': + description: The comment + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentSubmissionComment' '403': - description: Not granted to access to this score + description: Not granted to access to this submission content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or Track not found + description: Submission not found content: application/json: schema: @@ -1017,46 +918,136 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + delete: + tags: + - Class + operationId: deleteSubmissionComment + summary: Delete a feedback comment to a submission security: - OAuth2: - - scores - /scores/{score}/comments: + - edu.assignments + responses: + '204': + description: The comment has been deleted + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + /classes/{class}/assignments/{assignment}/submissions/{submission}/performanceAssessments: parameters: - - name: score - in: path + - $ref: '#/components/parameters/class' + - $ref: '#/components/parameters/assignment' + - $ref: '#/components/parameters/submission' + /classes/{class}/testStudent: + parameters: + - $ref: '#/components/parameters/class' + post: + tags: + - Class + summary: Create a test student account description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + Test students account can be created by teachers an admin and be used to experiment the assignments. + + - They are automatically added to the class. + - They can be reset using this API endpoint (a new account will be created and the previous one scheduled for deletion). + - These accounts don't use a user license. + operationId: createTestStudentAccount + parameters: + - name: reset + in: query + description: | + If true, the testing account will be re-created. + required: false + schema: + type: boolean + responses: + '200': + description: Test account created + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.admin + - edu.classes + /classes/enroll/{enrollmentCode}: + parameters: + - name: enrollmentCode + in: path + description: | + The enrollment code, available to the teacher in `ClassDetails` required: true schema: type: string - - name: sharingKey - in: query + post: + tags: + - Class + summary: Join a class description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + Use this method to join a class using an enrollment code given one of the teacher of this class. This code is also available in the `ClassDetails` returned to the teachers when creating the class or listing / fetching a specific class. + + Flat will automatically add the user to the corresponding class group based on this role in the organization. + operationId: enrollClass + responses: + '200': + description: The new class details + content: + application/json: + schema: + $ref: '#/components/schemas/ClassDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + /collections: get: tags: - - Score - summary: List comments - description: This method lists the different comments added on a music score (documents and inline) sorted by their post dates. - operationId: getScoreComments + - Collection + summary: List the collections + description: | + Use this method to list the user's collections. + If no sort option is provided, the collections are sorted by `creationDate` `desc`. + + By default (`parent=user`), this returns all user account collections with virtual collections on the first page. + + To fetch your app collection details, you can use `GET /v2/collections/app`. + operationId: listCollections parameters: - - name: type + - name: parent in: query - description: Filter the comments by type + description: | + List the collections contained in this `parent` collection. + + When set to `user` (default), returns the user's own collections as well as + collections shared with the user. + + Using `root` or `sharedWithMe` is **deprecated** and will be treated as `user`. schema: type: string - enum: - - document - - inline + default: user - name: sort in: query description: Sort schema: type: string enum: - - date + - creationDate + - modificationDate + - title - name: direction in: query description: Sort direction @@ -1065,29 +1056,69 @@ paths: enum: - asc - desc + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: next + in: query + description: | + An opaque string cursor to fetch the next page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + - name: previous + in: query + description: | + An opaque string cursor to fetch the previous page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string responses: '200': - description: The comments of the score + description: List of collections content: application/json: schema: type: array items: - $ref: '#/components/schemas/ScoreComment' - '402': - description: Account overquota + $ref: '#/components/schemas/Collection' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + security: + - OAuth2: + - collections + - collections.readonly + post: + tags: + - Collection + summary: Create a new collection + description: | + This method will create a new collection in your account. + operationId: createCollection + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionCreation' + required: true + responses: + '200': + description: Collection created content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + $ref: '#/components/schemas/Collection' + '400': + description: Bad collection creation request content: application/json: schema: @@ -1100,45 +1131,54 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.readonly - - scores.social - - scores - post: - tags: - - Score - summary: Post a new comment + - collections + x-codegen-request-body-name: body + /collections/{collection}: + parameters: + - name: collection + in: path description: | - Post a document or a contextualized comment on a document. + Unique identifier of the collection. - Please note that this method includes an anti-spam system for public scores. We don't guarantee that your comments will be accepted and displayed to end-user. Comments are be blocked by returning a `403` HTTP error and hidden from other users when the `spam` property is `true`. - operationId: postScoreComment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreCommentCreation' - required: true + The following collection aliases are supported: + - `root`: **Deprecated.** The root collection of the account + - `app`: Alias for the current app collection + - `trash`: Automatically contains resources that have been deleted + + The following virtual collections are supported: + - `allScores`: All the scores contained in the user account + - `collaborations`: All shared scores by the user or someone else + - `likes`: Liked scores + required: true + schema: + type: string + get: + tags: + - Collection + summary: Get collection details + operationId: getCollection + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The new comment - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreComment' - '402': - description: Account overquota + description: Collection details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/Collection' '403': - description: Not granted to access to this score, to post a comment, or your API call triggered our spam filter. + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection not found content: application/json: schema: @@ -1151,63 +1191,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - x-codegen-request-body-name: body - /scores/{score}/comments/{comment}: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: comment - in: path - description: | - Unique identifier of a sheet music comment - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - collections + - collections.readonly put: tags: - - Score - summary: Update an existing comment - operationId: updateScoreComment + - Collection + summary: Update a collection's metadata + operationId: editCollection requestBody: content: application/json: schema: - $ref: '#/components/schemas/ScoreCommentUpdate' + $ref: '#/components/schemas/CollectionModification' required: true responses: '200': - description: The edited comment - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreComment' - '402': - description: Account overquota + description: Collection details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/Collection' '403': - description: Not granted to access to this score or not the original comment creator + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection not found content: application/json: schema: @@ -1220,25 +1231,27 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores + - collections x-codegen-request-body-name: body delete: tags: - - Score - summary: Delete a comment - operationId: deleteScoreComment + - Collection + summary: Delete the collection + description: | + This method will schedule the deletion of the collection. Until deleted, the collection will be available in the `trash`. + operationId: deleteCollection + parameters: [] responses: '204': - description: The comment has been deleted + description: Collection deleted '403': - description: Not granted to access to this score or not the original comment creator + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score or comment not found + description: Collection not found content: application/json: schema: @@ -1251,46 +1264,26 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - /scores/{score}/comments/{comment}/resolved: + - collections + /collections/{collection}/untrash: parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: comment + - name: collection in: path - description: | - Unique identifier of a sheet music comment + description: Unique identifier of the collection. required: true schema: type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - put: + post: tags: - - Score - summary: Mark the comment as resolved - operationId: markScoreCommentResolved + - Collection + summary: Untrash a collection + deprecated: true + description: | + **DEPRECATED** This method will restore the collection by removing it from the `trash` and add it back to the `root` collection. + operationId: untrashCollection responses: - '204': - description: The comment has been marked as resolved - '403': - description: Not granted to mark this comment as resolved - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or comment not found + '400': + description: Bad request - Operation no longer supported content: application/json: schema: @@ -1303,35 +1296,91 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - delete: + - collections + /collections/{collection}/scores: + parameters: + - name: collection + in: path + description: | + Unique identifier of the collection. + + The following collection aliases are supported: + - `root`: **Deprecated.** The root collection of the account + - `app`: Alias for the current app collection + - `trash`: Automatically contains resources that have been deleted + + The following virtual collections are supported: + - `allScores`: All the scores contained in the user account + - `collaborations`: All shared scores by the user or someone else + - `likes`: Liked scores + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + get: tags: - - Score - summary: Mark the comment as unresolved - operationId: markScoreCommentUnresolved + - Collection + summary: List the scores contained in a collection + description: | + Use this method to list the scores contained in a collection. + If no sort option is provided, the scores are sorted by `modificationDate` `desc`. + + For example, to list the scores contained in your app collection, you can use `GET /v2/collections/app/scores`. + operationId: listCollectionScores parameters: - - name: sharingKey + - name: sort + in: query + description: Sort + schema: + type: string + enum: + - creationDate + - modificationDate + - title + - name: direction + in: query + description: Sort direction + schema: + type: string + enum: + - asc + - desc + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: next in: query description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + An opaque string cursor to fetch the next page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + - name: previous + in: query + description: | + An opaque string cursor to fetch the previous page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. schema: type: string responses: - '204': - description: The comment has been unmarked as resolved - '403': - description: Not granted to unmark this comment as resolved - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or comment not found + '200': + description: List of scores content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + type: array + items: + $ref: '#/components/schemas/ScoreDetails' default: description: Error content: @@ -1340,10 +1389,21 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores.social - - scores - /scores/{score}/revisions: + - collections + /collections/{collection}/scores/{score}: parameters: + - name: collection + in: path + description: | + Unique identifier of the collection. + + The following collection aliases are supported: + - `root`: **Deprecated.** The root collection of the account + - `app`: Alias for the current app collection + - `trash`: Automatically contains resources that have been deleted + required: true + schema: + type: string - name: score in: path description: | @@ -1351,45 +1411,35 @@ paths: required: true schema: type: string - get: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + put: tags: - - Score - summary: List the revisions + - Collection + summary: Add a score to the collection description: | - When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to list all of them, sorted by last modification. - - Depending the plan of the account, this list can be trunked to the few last revisions. - operationId: getScoreRevisions - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + This operation will add a score to a collection. The default behavior will make the score available across multiple collections. + You must have the capability `canAddScores` on the provided `collection` to perform the action. + operationId: addScoreToCollection responses: '200': - description: List of revisions - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/ScoreRevision' - '402': - description: Account overquota + description: Score details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ScoreDetails' '403': - description: Not granted to access to this score + description: Not granted to access to this collection or score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection or score not found content: application/json: schema: @@ -1402,42 +1452,32 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - post: - tags: - - Score - summary: Create a new revision - description: | - Update a score by uploading a new revision for this one. - operationId: createScoreRevision + - collections + - collections.add_scores requestBody: content: - application/json: + application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ScoreRevisionCreation' - required: true + type: object + delete: + tags: + - Collection + summary: Delete a score from the collection + description: | + This method will delete a score from the collection. Unlike [`DELETE /scores/{score}`](#operation/deleteScore), this score will not remove the score from your account, but only from the collection. + This can be used to *move* a score from one collection to another, or simply remove a score from one collection when this one is contained in multiple collections. + operationId: deleteScoreFromCollection responses: - '200': - description: The new created revision metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreRevision' - '402': - description: Account overquota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' + '204': + description: Score removed from the collection '403': - description: Not granted to modify this score + description: Not granted to access to this collection content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Score not found + description: Collection not found content: application/json: schema: @@ -1450,188 +1490,163 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - x-codegen-request-body-name: body - /scores/{score}/revisions/{revision}: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: revision - in: path - description: | - Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - get: - tags: - - Score - summary: Get a score revision - description: | - When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to get a specific - revision metadata. - operationId: getScoreRevision - responses: - '200': - description: Revision metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ScoreRevision' - '402': - description: Account overquota - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - scores - - scores.readonly - /scores/{score}/revisions/{revision}/{format}: - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: revision - in: path - description: | - Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. - required: true - schema: - type: string - - name: format - in: path - description: The format of the file you will retrieve - required: true - schema: - type: string - enum: - - json - - mxl - - xml - - mp3 - - wav - - midi - - thumbnail.png - - synchronizationPoints + - collections + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + parameters: + - $ref: '#/components/parameters/eventProperties' + /eduResources: get: tags: - - Score - summary: Get a score revision data - description: | - Retrieve the file corresponding to a score revision (the following formats are available): Flat JSON/Adagio JSON `json`, MusicXML - `mxl`/`xml`, MP3 `mp3`, WAV `wav`, MIDI `midi`, a tumbnail of the first page `thumbnail.png` or auto sync points `synchronizationPoints`. - operationId: getScoreRevisionData + - EduResources + operationId: listEduResources + summary: List education resources in a library or folder parameters: - - name: sharingKey + - name: parent in: query description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + List the resources contained in this `parent` library or folder schema: type: string - - name: parts + default: root + - name: withoutSubfoldersResources in: query description: | - An optional a set of parts uuid to be exported. This parameter must be composed of parts uuids - separated by commas. For example "59df645f-bb1c-f1b4-b573-d2afc4491f94,34ef645f-1aef-f3bc-1564-34cca4492b87". + For the `parent` = `organization`, do not include resources from subfolders. + By default in the Resource Library UI, we include resources from subfolders, but for example in a picker like LTI, we don't want to include them. + schema: + type: boolean + - name: type + in: query + description: | + Filter the returned resources by type schema: type: string - - name: defaultTrack + enum: + - assignment + - folder + - name: subjects in: query description: | - When `format` is `mp3`, this property is set to true and the score has a default `ScoreTrack` (mp3), this one will be returned instead of the playback file. + Filter the returned resources by subjects schema: - type: boolean - - name: url + type: array + items: + $ref: '#/components/schemas/TeachingTheme' + - name: assignmentTypes in: query description: | - Returns a json with the `url` in it instead of redirecting + Filter the returned resources by assignment types schema: - type: boolean + type: array + items: + $ref: '#/components/schemas/AssignmentType' + - name: grades + in: query + description: | + Filter the returned resources by grades + schema: + type: array + items: + $ref: '#/components/schemas/Grade' + - name: sort + in: query + description: Sort + schema: + type: string + enum: + - creationDate + - updateDate + - title + default: creationDate + - $ref: '#/components/parameters/sortDirection' + - name: limit + in: query + description: This is the maximum number of resources that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - $ref: '#/components/parameters/next' + - $ref: '#/components/parameters/previous' responses: '200': - description: Revision data + description: List of resources content: application/json: schema: - type: string - format: binary - application/vnd.recordare.musicxml+xml: - schema: - type: string - format: binary - application/vnd.recordare.musicxml: - schema: - type: string - format: binary - audio/mp3: - schema: - type: string - format: binary - audio/wav: - schema: - type: string - format: binary - audio/midi: + type: array + items: + $ref: '#/components/schemas/EduResource' + headers: + X-Total-Assignments-Count: + description: Total number of assignments schema: - type: string - format: binary - image/png: + type: integer + X-Total-Folders-Count: + description: Total number of folders schema: - type: string - format: binary - '402': - description: Account overquota + type: integer + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + security: + - OAuth2: + - edu.resources + - edu.resources.readonly + - edu.assignments + - edu.assignments.readonly + post: + tags: + - EduResources + operationId: createEduResource + summary: Create a new education resource + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EduResourceCreation' + required: true + responses: + '200': + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or associated file not found + $ref: '#/components/schemas/EduResource' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.resources + - edu.assignments + /eduResources/libraries: + get: + tags: + - EduResources + operationId: listEduLibraries + summary: List the education libraries + responses: + '200': + description: Fetched resource + content: + application/json: + schema: + type: array + description: List of libraries to display + items: + $ref: '#/components/schemas/EduLibrary' default: description: Error content: @@ -1640,79 +1655,65 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - /scores/{score}/revisions/{revision}/{format}/task: - post: + - edu.resources + - edu.resources.readonly + - edu.assignments + - edu.assignments.readonly + /eduResources/{resource}: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + get: tags: - - Score - summary: Create a new score export task - description: | - Some of the exports of a score takes are longer to process than a simple API requests. - Use this endpoint to launch a new export of one score hosted on Flat. - operationId: createExportTask - parameters: - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: revision - in: path - description: | - Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. - required: true - schema: - type: string - - name: format - in: path - description: The format of the file that will be generated or the target service name where the file will be exported - required: true - schema: - type: string - enum: - - mp3 - - wav - - practicefirst - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/TaskExportOptions' - required: false + - EduResources + operationId: getEduResource + summary: Get an education resource + parameters: [] responses: '200': - description: Task associated to the generation of the file - content: - application/json: - schema: - $ref: '#/components/schemas/Task' - '402': - description: Account overquota + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' - '403': - description: Not granted to access to this score + $ref: '#/components/schemas/EduResource' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score or associated file not found + security: + - OAuth2: + - edu.resources + - edu.resources.readonly + - edu.assignments + - edu.assignments.readonly + put: + tags: + - EduResources + operationId: updateEduResource + summary: Update an education resource metadata + description: | + Update any resources metadata (e.g. title). + + Use this method to rename education resources folders or assignments. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EduResourceUpdate' + required: true + responses: + '200': + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/EduResource' default: description: Error content: @@ -1721,81 +1722,16 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - scores - - scores.readonly - x-codegen-request-body-name: body - /collections: - get: + - edu.resources + - edu.assignments + delete: tags: - - Collection - summary: List the collections - description: | - Use this method to list the user's collections contained in `parent` (by default in the `root` collection). - If no sort option is provided, the collections are sorted by `creationDate` `desc`. - - Note that this method will not include the `parent` collection in the listing. - For example, if you need the details of the `root` collection, you can use `GET /v2/collections/root`. - - To fetch your app collection details, you can use `GET /v2/collections/app`. - operationId: listCollections - parameters: - - name: parent - in: query - description: | - List the collection contained in this `parent` collection. - - This option doesn't provide a complete multi-level collection support. - When sharing a collection with someone, this one will have as `parent` `sharedWithMe`. - schema: - type: string - default: root - - name: sort - in: query - description: Sort - schema: - type: string - enum: - - creationDate - - title - - name: direction - in: query - description: Sort direction - schema: - type: string - enum: - - asc - - desc - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: next - in: query - description: | - An opaque string cursor to fetch the next page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. - schema: - type: string - - name: previous - in: query - description: | - An opaque string cursor to fetch the previous page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. - schema: - type: string + - EduResources + operationId: deleteEduResource + summary: Delete an education resource responses: - '200': - description: List of collections - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Collection' + '204': + description: Resource deleted default: description: Error content: @@ -1804,34 +1740,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - - collections.readonly + - edu.resources + - edu.assignments + /eduResources/{resource}/move: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string post: tags: - - Collection - summary: Create a new collection - description: | - This method will create a new collection and add it to your `root` collection. - operationId: createCollection + - EduResources + operationId: moveEduResource + summary: Move an education resource requestBody: content: application/json: schema: - $ref: '#/components/schemas/CollectionCreation' + $ref: '#/components/schemas/EduResourceMove' required: true responses: '200': - description: Collection created - content: - application/json: - schema: - $ref: '#/components/schemas/Collection' - '400': - description: Bad collection creation request + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/EduResource' default: description: Error content: @@ -1840,53 +1776,71 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - x-codegen-request-body-name: body - /collections/{collection}: + - edu.resources + - edu.assignments + /eduResources/{resource}/copy: parameters: - - name: collection + - name: resource in: path - description: | - Unique identifier of the collection. - The following aliases are supported: - - `root`: The root collection of the account - - `app`: Alias for the current app collection - - `sharedWithMe`: Automatically contains new resources that have been shared individually - - `trash`: Automatically contains resources that have been deleted required: true + description: Unique identifier of the resource schema: type: string - get: + post: tags: - - Collection - summary: Get collection details - operationId: getCollection - parameters: - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - EduResources + operationId: copyEduResource + summary: Copy an education resource to a Resource Library + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EduResourceCopy' + required: true responses: '200': - description: Collection details + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/Collection' - '403': - description: Not granted to access to this collection - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection not found + $ref: '#/components/schemas/EduResource' + default: + description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.resources + - edu.assignments + /eduResources/{resource}/copyToDemoClass: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + post: + tags: + - EduResources + operationId: copyEduResourceToDemoClass + summary: Copy an education assignment to a teacher demo class + description: | + Once a resource library can be published to a class (`Assignment.capabilities.canPublishInClass = true`), + this endpoint can be used for the feature "View as student". + + It will ensure the teacher has a demo class, then copy the assignment to the demo class. + You can then use `POST /classes/{class}/testStudent` to create a testing student account + in the demo class. + responses: + '200': + description: Assignment copied to the demo class + content: + application/json: + schema: + $ref: '#/components/schemas/ClassAssignment' default: description: Error content: @@ -1895,38 +1849,37 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - - collections.readonly - put: + - edu.resources + - edu.assignments + /eduResources/{resource}/useInClass: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + post: tags: - - Collection - summary: Update a collection's metadata - operationId: editCollection + - EduResources + operationId: useEduResourceInClass + summary: Use an education resource in a class + description: | + This endpoint will copy a resource and the underlying resources. + The assignment will be created as a draft that can be completed with other options before publishing (e.g. due date, publication date for scheduling, etc.). requestBody: content: application/json: schema: - $ref: '#/components/schemas/CollectionModification' + $ref: '#/components/schemas/EduResourceUseInClass' required: true responses: '200': - description: Collection details - content: - application/json: - schema: - $ref: '#/components/schemas/Collection' - '403': - description: Not granted to access to this collection - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection not found + description: Assignment copied to the chosen class content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/ClassAssignment' default: description: Error content: @@ -1935,30 +1888,31 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - x-codegen-request-body-name: body - delete: + - edu.resources + - edu.assignments + /eduResources/{resource}/createLtiLink: + parameters: + - name: resource + in: path + required: true + description: Unique identifier of the resource + schema: + type: string + post: tags: - - Collection - summary: Delete the collection + - EduResources + operationId: createEduResourceLtiLink + summary: Create an LTI link for an education resource description: | - This method will schedule the deletion of the collection. Until deleted, the collection will be available in the `trash`. - operationId: deleteCollection + This endpoint will return an LTI link that can be used to launch Flat for Education. + The link, in a context from a class, will ensure the assignment has been copied in the class. responses: - '204': - description: Collection deleted - '403': - description: Not granted to access to this collection - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection not found + '200': + description: Created LTI Link content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/EduResourceLtiLink' default: description: Error content: @@ -1967,37 +1921,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - /collections/{collection}/untrash: + - edu.resources + - edu.assignments + /eduResources/{resource}/assignment: parameters: - - name: collection + - name: resource in: path - description: Unique identifier of the collection. required: true + description: Unique identifier of the resource schema: type: string - post: + put: tags: - - Collection - summary: Untrash a collection - description: | - This method will restore the collection by removing it from the `trash` and add it back to the `root` collection. - operationId: untrashCollection + - EduResources + operationId: updateEduResourceAssignment + summary: Update an education resource assignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AssignmentUpdate' + required: true responses: - '204': - description: The score has been untrashed - '403': - description: Not granted to manage this score - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Score not found + '200': + description: Fetched resource content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/Assignment' default: description: Error content: @@ -2006,145 +1957,114 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - /collections/{collection}/scores: - parameters: - - name: collection - in: path - description: | - Unique identifier of the collection. - The following aliases are supported: - - `root`: The root collection of the account - - `app`: Alias for the current app collection - - `sharedWithMe`: Automatically contains new resources that have been shared individually - - `trash`: Automatically contains resources that have been deleted - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string + - edu.resources + - edu.assignments + /groups: get: + operationId: listGroups tags: - - Collection - summary: List the scores contained in a collection + - Group + summary: List groups description: | - Use this method to list the scores contained in a collection. - If no sort option is provided, the scores are sorted by `modificationDate` `desc`. - - For example, to list the scores contained in your app collection, you can use `GET /v2/collections/app/scores`. - operationId: listCollectionScores + List all groups of a given type, filtered by either a classroom or an assignment. + security: + - OAuth2: + - edu.classes + - edu.classes.readonly + - edu.admin + - edu.admin.readonly + - edu.admin.users.readonly parameters: - - name: sort - in: query - description: Sort - schema: - type: string - enum: - - creationDate - - modificationDate - - title - - name: direction + - name: type in: query - description: Sort direction + required: true schema: type: string enum: - - asc - - desc - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: next + - classStudentsSubGroup + - assignmentStudentsSubGroup + - name: classroom in: query - description: | - An opaque string cursor to fetch the next page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + description: Classroom ID to filter by schema: type: string - - name: previous + - name: assignment in: query - description: | - An opaque string cursor to fetch the previous page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + description: Assignment ID to filter by schema: type: string responses: '200': - description: List of scores + description: List of groups content: application/json: schema: type: array items: - $ref: '#/components/schemas/ScoreDetails' + $ref: '#/components/schemas/GroupDetails' + '400': + description: Bad Request - Invalid type or missing required parameters + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Forbidden - Insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Classroom or assignment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + post: + operationId: createGroup + tags: + - Group + summary: Create a new group + description: | + Create a group of the given type, tied to a classroom, optionally with initial members. security: - OAuth2: - - collections - /collections/{collection}/scores/{score}: - parameters: - - name: collection - in: path - description: | - Unique identifier of the collection. - The following aliases are supported: - - `root`: The root collection of the account - - `app`: Alias for the current app collection - - `sharedWithMe`: Automatically contains new resources that have been shared individually - - `trash`: Automatically contains resources that have been deleted - required: true - schema: - type: string - - name: score - in: path - description: | - Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). - required: true - schema: - type: string - - name: sharingKey - in: query - description: | - This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. - schema: - type: string - put: - tags: - - Collection - summary: Add a score to the collection - description: | - This operation will add a score to a collection. The default behavior will make the score available across multiple collections. - You must have the capability `canAddScores` on the provided `collection` to perform the action. - operationId: addScoreToCollection + - edu.classes + - edu.admin + - edu.admin.users + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/GroupCreation' responses: '200': - description: Score details + description: The new group content: application/json: schema: - $ref: '#/components/schemas/ScoreDetails' + $ref: '#/components/schemas/GroupDetails' + '400': + description: Bad Request - Invalid type or missing required parameters + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' '403': - description: Not granted to access to this collection or score + description: Forbidden - Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - '404': - description: Collection or score not found + '409': + description: Conflict - Group name already exists content: application/json: schema: @@ -2155,29 +2075,23 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - collections - - collections.add_scores - delete: + /groups/{group}: + parameters: + - $ref: '#/components/parameters/group' + get: tags: - - Collection - summary: Delete a score from the collection - description: | - This method will delete a score from the collection. Unlike [`DELETE /scores/{score}`](#operation/deleteScore), this score will not remove the score from your account, but only from the collection. - This can be used to *move* a score from one collection to another, or simply remove a score from one collection when this one is contained in multiple collections. - operationId: deleteScoreFromCollection + - Group + summary: Get group information + operationId: getGroupDetails responses: - '204': - description: Score removed from the collection - '403': - description: Not granted to access to this collection + '200': + description: The group details content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + $ref: '#/components/schemas/GroupDetails' '404': - description: Collection not found + description: Not Found - Group not found or insufficient permissions content: application/json: schema: @@ -2190,29 +2104,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - collections - /tasks/{task}: - parameters: - - name: task - in: path - description: Unique identifier for the task - required: true - schema: - type: string - get: + - edu.admin + - edu.admin.users + - edu.admin.users.readonly + - edu.classes + - edu.classes.readonly + put: + operationId: renameGroup tags: - - Task - summary: Get a task details - description: | - This method can be used to follow a task progression, for example while a score is being exported. - operationId: getTask + - Group + summary: Rename a group + description: Rename a sub-group. Only available for class student groups. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: New name for the group + required: + - name responses: '200': - description: Task details + description: Updated group content: application/json: schema: - $ref: '#/components/schemas/Task' + $ref: '#/components/schemas/GroupDetails' + '400': + description: Bad Request - Invalid group ID or missing name + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Forbidden - Insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '409': + description: Conflict - Group name already exists + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2221,30 +2166,30 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - tasks.readonly - /users/{user}: - parameters: - - name: user - in: path - description: | - This route parameter is the unique identifier of the user. You can specify an email instead of an unique identifier. If you are executing this request authenticated, you can use `me` as a value instead of the current User unique identifier to work on the current authenticated user. - required: true - schema: - type: string - get: + - edu.classes + - edu.admin + - edu.admin.users + delete: + operationId: deleteGroup tags: - - User - summary: Get a public user profile - description: | - Get a profile of a Flat or Flat for Education User. - operationId: getUser + - Group + summary: Delete a group + description: Delete a group. Only available to teachers of the classroom. responses: - '200': - description: The user public details + '204': + description: Group deleted + '403': + description: Forbidden - Insufficient permissions or invalid group type content: application/json: schema: - $ref: '#/components/schemas/UserPublic' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2253,48 +2198,43 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - account.public_profile - - account.education_profile - /users/{user}/likes: + - edu.classes + - edu.admin + - edu.admin.users + /groups/{group}/users: parameters: - - name: user - in: path - description: | - Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. - required: true - schema: - type: string + - $ref: '#/components/parameters/group' get: tags: - - User - - Score - summary: List liked scores - operationId: getUserLikes + - Group + summary: List group's users + operationId: listGroupUsers parameters: - - $ref: '#/components/parameters/next' - - $ref: '#/components/parameters/previous' - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: ids + - name: source in: query - description: Return only the identifiers of the scores + description: | + Filter the users by their source schema: - type: boolean + type: string + enum: + - googleClassroom + - microsoftGraph + - clever responses: '200': - description: List of liked scores + description: The list of users member of the group content: application/json: schema: type: array items: - $ref: '#/components/schemas/ScoreDetails' + $ref: '#/components/schemas/UserPublic' + '404': + description: Not Found - Group not found or insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2303,84 +2243,142 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - account.public_profile - /users/{user}/scores: + - edu.admin + - edu.admin.users + - edu.admin.users.readonly + - edu.classes + - edu.classes.readonly + post: + operationId: addGroupUser + tags: + - Group + summary: Add a student to a group + description: Add a student to the specified group (must be in the same class) + security: + - OAuth2: + - edu.classes + - edu.admin + - edu.admin.users + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + user: + type: string + description: ID of the student to add + required: + - user + responses: + '200': + description: Membership created + content: + application/json: + schema: + type: object + properties: + user: + type: string + description: User ID that was added + '400': + description: Bad Request - Invalid user ID or user not enrolled in class + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Forbidden - Insufficient permissions or invalid group type + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found or user not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + /groups/{group}/users/{user}: parameters: + - $ref: '#/components/parameters/group' - name: user in: path - description: | - Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. required: true + description: User ID schema: type: string - get: + delete: + operationId: removeGroupUser tags: - - User - - Score - summary: List user's scores - description: | - Get the list of public scores owned by a User. - If you want to access to private scores, please use the [Collections API](#tag/Collection). - For example `GET /v2/collections/allScores/scores` to list all recently updated scores. - operationId: getUserScores + - Group + summary: Remove a student from a class group + description: Remove a student from a class group + responses: + '204': + description: Membership removed + '403': + description: Forbidden - Insufficient permissions or invalid group type + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Not Found - Group not found or user not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - edu.classes + - edu.admin + - edu.admin.users + /groups/{group}/scores: + parameters: + - $ref: '#/components/parameters/group' + get: + tags: + - Group + - Score + summary: List group's scores + description: | + Get the list of scores shared with a group. + operationId: getGroupScores parameters: - - name: paginate - in: query - description: | - When set to `true`, the API will return a paginated result. - When set to `false` or unset, the API will return all the scores. - If this parameter is unset or false, then limit/sort/direction/next/previous will be ignored. - schema: - type: boolean - default: false - - name: sort - in: query - description: Sort - schema: - type: string - enum: - - creationDate - - modificationDate - - title - - name: direction - in: query - description: Sort direction - schema: - type: string - enum: - - asc - - desc - - name: limit - in: query - description: This is the maximum number of objects that may be returned - schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - name: next - in: query - description: | - An opaque string cursor to fetch the next page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. - schema: - type: string - - name: previous + - name: parent in: query - description: | - An opaque string cursor to fetch the previous page of data. - The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + description: Filter the score forked from the score id `parent` schema: type: string responses: '200': - description: The user scores + description: The group's scores content: application/json: schema: type: array items: $ref: '#/components/schemas/ScoreDetails' + '404': + description: Not Found - Group not found or user not member of group + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -2391,6 +2389,70 @@ paths: - OAuth2: - scores - scores.readonly + /me: + get: + tags: + - Account + summary: Get current user account + description: | + Get details about the current authenticated User. + operationId: getAuthenticatedUser + parameters: + - name: onlyId + in: query + description: Only return the user id + schema: + type: boolean + default: false + responses: + '200': + description: Current user details + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - account.public_profile + - account.education_profile + x-codeSamples: + - lang: Python + source: | + from pprint import pprint + import os + + import flat_api + from flat_api.rest import ApiException + + configuration = flat_api.Configuration() + configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] + flat_api_client = flat_api.ApiClient(configuration) + try: + pprint(flat_api.AccountApi(flat_api_client).get_authenticated_user()) + except ApiException as e: + print(e) + - lang: PHP + source: | + setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); + + $api = new Flat\APIClient\Api\AccountApi(); + + try { + $result = $api->getAuthenticatedUser(); + print_r($result); + } catch (Exception $e) { + echo 'Exception when calling AccountApi->getAuthenticatedUser: ', $e->getMessage(), PHP_EOL; + } /organizations/users: get: tags: @@ -2417,6 +2479,7 @@ paths: - $ref: '#/components/parameters/searchInputQuery' - $ref: '#/components/parameters/groupIds' - $ref: '#/components/parameters/noActiveLicense' + - $ref: '#/components/parameters/testAccounts' - name: licenseExpirationDate in: query description: Filter users by license expiration date or `active` / `notActive` @@ -2497,6 +2560,7 @@ paths: - $ref: '#/components/parameters/searchInputQuery' - $ref: '#/components/parameters/groupIds' - $ref: '#/components/parameters/noActiveLicense' + - $ref: '#/components/parameters/testAccounts' responses: '200': description: Number of users @@ -2788,6 +2852,10 @@ paths: - Organization summary: List LTI 1.x credentials operationId: listLtiCredentials + deprecated: true + description: | + DEPRECATED. Use the unified endpoints under `/organizations/lti/configurations`. + Note: Teachers may be restricted by the organization privacy setting `lti1p1AllowTeachersCredentials`. responses: '200': description: The list of LTI Credentials @@ -2819,8 +2887,12 @@ paths: - Organization summary: Create a new couple of LTI 1.x credentials description: | + DEPRECATED. Use the unified endpoints under `/organizations/lti/configurations`. + Note: Teachers may be restricted by the organization privacy setting `lti1p1AllowTeachersCredentials`. + Flat for Education is a Certified LTI Provider. You can use these API methods to automate the creation of LTI credentials. You can read more about our LTI implementation, supported components and LTI Endpoints in our [Developer Documentation](https://flat.io/developers/docs/lti/). operationId: createLtiCredentials + deprecated: true requestBody: content: application/json: @@ -2851,6 +2923,7 @@ paths: - edu.admin - edu.admin.lti x-codegen-request-body-name: body + x-logas-allowed-ro: true /organizations/lti/credentials/{credentials}: parameters: - name: credentials @@ -2886,36 +2959,29 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' + deprecated: true + description: | + DEPRECATED. Use the unified endpoints under `/organizations/lti/configurations`. + Note: Teachers may be restricted by the organization privacy setting `lti1p1AllowTeachersCredentials`. security: - OAuth2: - edu.admin - edu.admin.lti - /classes: + /organizations/lti/configurations: get: tags: - - Class - summary: List the classes available for the current user - operationId: listClasses - parameters: - - name: state - in: query - description: Filter the classes by state - schema: - type: string - default: active - enum: - - active - - inactive - - archived + - Organization + summary: List LTI configurations (1.1 and 1.3) + operationId: listLtiConfigurations responses: '200': - description: The list of classes + description: The list of LTI configurations for the caller's organization content: application/json: schema: type: array items: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/LtiConfiguration' default: description: Error content: @@ -2924,40 +2990,33 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly + - edu.admin + - edu.admin.lti + - edu.admin.lti.readonly post: tags: - - Class - summary: Create a new class - description: | - Classrooms on Flat allow you to create activities with assignments and post content to a specific group. - - When creating a class, Flat automatically creates two groups: one for the teachers of the course, one for the students. The creator of this class is automatically added to the teachers group. - - If the classsroom is synchronized with another application like Google Classroom, some of the meta information will automatically be updated. - - You can add users to this class using `PUT /classes/{class}/users/{user}`, they will automatically added to the group based on their role on Flat. Users can also enroll themselves to this class using `POST /classes/enroll/{enrollmentCode}` and the `enrollmentCode` returned in the `ClassDetails` response. - operationId: createClass + - Organization + summary: Create a new LTI configuration (1.1 or 1.3) + operationId: createLtiConfiguration requestBody: content: application/json: schema: - $ref: '#/components/schemas/ClassCreation' + $ref: '#/components/schemas/LtiConfigurationCreate' required: true responses: '200': - description: The new class details - content: - application/json: - schema: - $ref: '#/components/schemas/ClassDetails' - '402': - description: Account overquota + description: The created LTI configuration content: application/json: schema: - $ref: '#/components/schemas/FlatErrorResponse' + allOf: + - $ref: '#/components/schemas/LtiConfiguration' + - type: object + properties: + registrationUrl: + type: string + description: One-time registration URL (only for dynamic registration) default: description: Error content: @@ -2966,23 +3025,34 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - x-codegen-request-body-name: body - /classes/{class}: + - edu.admin + - edu.admin.lti + /organizations/lti/configurations/{configuration}: parameters: - - $ref: '#/components/parameters/class' - get: + - name: configuration + in: path + required: true + description: Configuration unique identifier + schema: + type: string + put: tags: - - Class - summary: Get the details of a single class - operationId: getClass + - Organization + summary: Update an existing LTI configuration (edit 1.3; 1.1 not editable) + operationId: updateLtiConfiguration + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LtiConfigurationUpdate' + required: true responses: '200': - description: The new class details + description: The updated configuration content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/LtiConfiguration' default: description: Error content: @@ -2991,29 +3061,16 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - put: + - edu.admin + - edu.admin.lti + delete: tags: - - Class - summary: Update the class - description: | - Update the meta information of the class - operationId: updateClass - requestBody: - description: Details of the Class - content: - application/json: - schema: - $ref: '#/components/schemas/ClassUpdate' - required: true + - Organization + summary: Delete an LTI configuration + operationId: deleteLtiConfiguration responses: - '200': - description: The new class details - content: - application/json: - schema: - $ref: '#/components/schemas/ClassDetails' + '204': + description: Configuration deleted default: description: Error content: @@ -3022,48 +3079,75 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - x-codegen-request-body-name: body - /classes/{class}/archive: - parameters: - - $ref: '#/components/parameters/class' + - edu.admin + - edu.admin.lti + /scores: post: tags: - - Class - summary: Archive the class + - Score + summary: Create a new score description: | - Mark the class as `archived`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. - operationId: archiveClass + Use this API method to **create a new music score in the current User account**. This API endpoints provides 3 ways to create scores: + + * `ScoreCreationBuilderData` : Create a blank score by providing the list of instruments to use. You can optionally customize the initial key signature, time signature, enable TABs, Chord grids, as well as the page layout. + * `ScoreCreationFileImport`: Import a file to create the new Flat document. + + **Preferred formats**: + * **MusicXML**: `.xml`, `.musicxml`, `.mxl` (compressed) — MIME: `vnd.recordare.musicxml+xml`, `vnd.recordare.musicxml`. This is the only format that preserves all notation data (articulations, dynamics, layout, etc.) with full round-trip support. + * **MIDI**: `.mid`, `.midi` — MIME: `audio/midi`. Only preserves pitch, timing, and instrument data; notation details are lost. + + **Also supported** (converted to MusicXML on import, some notation details may be lost): + * **Guitar Pro**: `.gp`, `.gp3`, `.gp4`, `.gp5`, `.gpx`, `.gtp` + * **MuseScore**: `.mscz`, `.mscx` + * **ABC notation**: `.abc` — MIME: `text/vnd.abc` + * **PowerTab**: `.ptb` + * **Capella**: `.cap`, `.capx` + * **MEI**: `.mei` + * **Overture**: `.ove` + * **TablEdit**: `.tef` + * **Band-in-a-Box**: `.mgu`, `.sgu` + * **Karaoke MIDI**: `.kar` + * **MuseData**: `.md` + * **Score Writer**: `.scw` + * **Bagpipe Music Writer**: `.bmw`, `.bww` + * **Encore**: `.enc` + * `ScoreCreationGoogleDriveImport`: Import an existing Google Drive file from the connected Google Drive account. + + This API call will automatically create the first revision of the document, the score can be modified by the using our web application or by uploading a new revision of this file (`POST /v2/scores/{score}/revisions/{revision}`). + + The currently authenticated user will be granted owner of the file and will be able to add other collaborators (users and groups). + + If no `collection` is specified, the API will create the score in the most appropriate collection. When using an OAuth2 access token or a personal token, the score will be automatically added to your dedicated app collection in the account (`/v2/collections/app`). + + If a `collection` is specified and this one has more public privacy settings than the score (e.g. `public` vs `private` for the score), the privacy settings of the created score will be adjusted to the collection ones. + + You can check the adjusted privacy settings in the returned score `privacy`, and optionally adjust these settings if needed using `PUT /scores/{score}`. + operationId: createScore + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreCreation' + required: true responses: '200': - description: The class details + description: Score created content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' - default: - description: Error + $ref: '#/components/schemas/ScoreDetails' + '400': + description: Bad score creation request content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - delete: - tags: - - Class - summary: Unarchive the class - description: | - Mark the class as `active`. When this course is synchronized with another app, like Google Classroom, this state will be automatically be updated. - operationId: unarchiveClass - responses: - '200': - description: The class details + '402': + description: Account overquota or feature not included in plan content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3072,24 +3156,127 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /classes/{class}/activate: + - scores + x-codegen-request-body-name: body + x-codeSamples: + - lang: Ruby + source: | + require 'flat_api' + FlatApi.configure do |config| + config.access_token = 'your_access_token' + end + begin + score_data = File.open("my-score.musicxml", "r:UTF-8") { |f| f.read } + body = FlatApi::ScoreCreationFileImport.new({ + title: 'Score Title', + data: score_data, + }) + p FlatApi::ScoreApi.new.create_score(body) + rescue FlatApi::ApiError => e + puts "Error when calling ScoreApi->create_score: #{e}" + end + - lang: Python + source: | + from pprint import pprint + import os + from urllib.request import urlopen + from urllib.error import HTTPError + + import flat_api + from flat_api.rest import ApiException + + SCORE_TO_IMPORT='https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml' + + configuration = flat_api.Configuration() + configuration.access_token = os.environ['FLAT_ACCESS_TOKEN'] + flat_api_client = flat_api.ApiClient(configuration) + + try: + # Download a MusicXML "Hello World" + hello_world = urlopen(SCORE_TO_IMPORT).read().decode('utf-8') + + # The new score meta, including the MusicXML file as `data` + new_score = flat_api.ScoreCreation( + title='Hello World', + privacy='private', + data=hello_world + ) + + # Create the document and print the meta returned by the API + pprint(flat_api.ScoreApi(flat_api_client).create_score(new_score)) + except (ApiException, HTTPError) as e: + print(e) + - lang: PHP + source: | + setAccessToken($_ENV['FLAT_ACCESS_TOKEN']); + + $musicXml = file_get_contents('https://gist.githubusercontent.com/gierschv/938479bec2bbe8c39eebbc9e19d027a0/raw/2caa4fa312184412d0d544feb361f918869ceaa5/hello-world.xml'); + + try { + $body = new \Flat\APIClient\Model\ScoreCreation(); + $body->setTitle('Hello world'); + $body->setPrivacy('private'); + $body->setData($musicXml); + + $scoreApi = new Flat\APIClient\Api\ScoreApi(); + $result = $scoreApi->createScore($body); + print_r($result); + } catch (Exception $e) { + echo 'Exception when calling ScoreApi->createScore: ', $e->getMessage(), PHP_EOL; + } + /scores/{score}: parameters: - - $ref: '#/components/parameters/class' - post: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + get: tags: - - Class - summary: Activate the class + - Score + summary: Get a score's metadata description: | - Mark the class as `active`. This is mainly used for classes synchronized from Clever that are initially with an `inactive` state and hidden in the UI. - operationId: activateClass + Get the details of a score identified by the `score` parameter in the URL. + The currently authenticated user must have at least a read access to the document to use this API call. + operationId: getScore + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The class details + description: Score details content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/ScoreDetails' + '402': + description: Account overquota and this document is out of the granted quota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3098,51 +3285,51 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /classes/{class}/users/{user}: - parameters: - - $ref: '#/components/parameters/class' - - name: user - in: path - description: Unique identifier of the user - required: true - schema: - type: string + - scores + - scores.readonly put: tags: - - Class - summary: Add a user to the class + - Score + summary: Edit a score's metadata description: | - This method can be used by a teacher of the class to enroll another Flat user into the class. + This API method allows you to change the metadata of a score document (e.g. its `title` or `privacy`), all the properties are optional. - Only users that are part of your Organization can be enrolled in a class of this same Organization. + To edit the file itself, create a new revision using the appropriate method (`POST /v2/scores/{score}/revisions/{revision}`). - When enrolling a user in the class, Flat will automatically add this user to the corresponding Class group, based on this role in the Organization. - operationId: addClassUser + When editing the `title`, `subtitle`, `composer`, `lyricist`, `arranger` or `licenseText`, the metadatas will be instantly be updated, and a real-time action will be pushed to update the document lazily. + This pending document modification will be automatically be saved as a new version by either a connected client or our internal versioning service. + operationId: editScore + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreModification' + required: true responses: - '204': - description: The user has been added to the class - default: - description: Error + '200': + description: Score details + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreDetails' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - delete: - tags: - - Class - summary: Remove a user from the class - description: | - This method can be used by a teacher to remove a user from the class, or by a student to leave the classroom. - - Warning: Removing a user from the class will remove the associated resources, including the submissions and feedback related to these submissions. - operationId: deleteClassUser - responses: - '204': - description: The user has been removed from the class default: description: Error content: @@ -3151,32 +3338,41 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /classes/{class}/students/{user}/submissions: - parameters: - - $ref: '#/components/parameters/class' - - name: user - in: path - description: Unique identifier of the user - required: true - schema: - type: string - get: + - scores + x-codegen-request-body-name: body + delete: tags: - - Class - summary: List the submissions for a student + - Score + summary: Delete a score description: | - Use this method as a teacher to list all the assignment submissions sent by a student of the class - operationId: listClassStudentSubmissions + This method can be used by anyone that has at least read access to the document: + + - When called by an owner/admin, it will schedule the deletion of the score, its revisions, and complete history. The score won't be accessible anymore after calling this method and the user's quota will directly be updated. + - When called by a collaborator, the score will be unshared (i.e. removed from the account & own collections). + - When called by another user that has the score in its collections, the score will be removed from all the user collections. + operationId: deleteScore + parameters: + - name: now + in: query + description: If `true`, the score deletion will be scheduled to be done ASAP + schema: + type: boolean + default: false responses: - '200': - description: The list of submissions + '204': + description: The score has been removed + '403': + description: Not granted to manage this score content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/AssignmentSubmission' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3185,27 +3381,38 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - /classes/{class}/assignments: + - scores + /scores/{score}/untrash: parameters: - - $ref: '#/components/parameters/class' - get: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + post: tags: - - Class - summary: Assignments listing - operationId: listAssignments + - Score + summary: Untrash a score + description: | + This method will remove the score from the `trash` collection and from the deletion queue, and add it back to the original collections. + operationId: untrashScore responses: - '200': - description: List of assignments for the class + '204': + description: The score has been untrashed + '403': + description: Not granted to manage this score content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/ClassAssignment' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3214,32 +3421,33 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - post: + - scores + /scores/{score}/submissions: + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + get: tags: + - Score - Class - summary: Assignment creation + summary: List submissions related to the score description: | - Use this method as a teacher to create and post a new assignment to a class. - - If the class is synchronized with Google Classroom, the assignment will be automatically posted to your Classroom course. - operationId: createClassAssignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ClassAssignmentUpdate' - required: true + This API call will list the different assignments submissions where the score is attached. This method can be used by anyone that are part of the organization and have at least read access to the document. + operationId: getScoreSubmissions responses: '200': - description: The assignment has been created + description: List of submissions content: application/json: schema: - $ref: '#/components/schemas/Assignment' + type: array + items: + $ref: '#/components/schemas/AssignmentSubmission' default: description: Error content: @@ -3248,90 +3456,64 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/copy: + - scores + - scores.readonly + /scores/{score}/fork: parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string post: tags: - - Class - summary: Copy an assignment + - Score + summary: Fork a score description: | - Copy an assignment to a specified class or the resource library + This API call will make a copy of the last revision of the specified score and create a new score. The copy of the score will have a privacy set to `private`. - For class assignments: - - If the original assignment has a due date in the past, this new assignment will be created without a due date. - - If the class is synchronized with an external app (e.g. Google Classroom), the copied assignment will also be posted on the external app. - operationId: copyAssignment + When using a [Flat for Education](https://flat.io/edu) account, the inline and contextualized comments will be accessible in the child document. + operationId: forkScore + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string requestBody: content: application/json: schema: - $ref: '#/components/schemas/AssignmentCopy' + $ref: '#/components/schemas/ScoreFork' required: true responses: '200': - description: The new created assignment + description: Score details content: application/json: schema: - $ref: '#/components/schemas/AssignmentCopyResponse' - default: - description: Error + $ref: '#/components/schemas/ScoreDetails' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/archive: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - post: - tags: - - Class - summary: Archive the assignment - description: | - Archive the assignment - operationId: archiveAssignment - responses: - '200': - description: The assignment details - content: - application/json: - schema: - $ref: '#/components/schemas/Assignment' - default: - description: Error + '403': + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - delete: - tags: - - Class - summary: Unarchive the assignment. - description: | - Mark the assignment as `active`. - operationId: unarchiveAssignment - responses: - '200': - description: The assignment details + '404': + description: Score not found content: application/json: schema: - $ref: '#/components/schemas/Assignment' + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3340,148 +3522,112 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.assignments - /classes/{class}/assignments/{assignment}/submissions: + - scores + x-codegen-request-body-name: body + /scores/{score}/collaborators: parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string get: tags: - - Class - summary: List the students' submissions - operationId: getSubmissions + - Score + summary: List the collaborators + description: | + This API call will list the different collaborators of a score and their rights on the document. The returned list will at least contain the owner of the document. + + Collaborators can be a single user (the object `user` will be populated) or a group (the object `group` will be populated). + operationId: getScoreCollaborators + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The submissions + description: List of collaborators content: application/json: schema: type: array items: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error + $ref: '#/components/schemas/ResourceCollaborator' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - put: - tags: - - Class - summary: Create or edit a submission - description: | - Use this method as a student to create, update and submit a submission related to an assignment. - Students can only set `attachments` and `submit`. - Teachers can use `PUT /classes/{class}/assignments/{assignment}/submissions/{submission}` to update a submission by id. - operationId: createSubmission - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentSubmissionUpdate' - required: true - responses: - '200': - description: The submission + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/submissions/csv: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - get: - tags: - - Class - summary: CSV Grades exports - description: Export list of submissions grades to a CSV file - operationId: exportSubmissionsReviewsAsCsv - responses: - '200': - description: List of submissions - content: - text/csv: - schema: - type: string - format: binary default: description: Error content: - text/csv: + application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - /classes/{class}/assignments/{assignment}/submissions/excel: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - get: + - scores.readonly + - scores + post: tags: - - Class - summary: Excel Grades exports - description: Export list of submissions grades to an Excel file - operationId: exportSubmissionsReviewsAsExcel + - Score + summary: Add a new collaborator + description: | + Share a score with a single user or a group. This API call allows to add, invite and update the collaborators of a resource. + - To add an existing Flat user to the resource, specify its unique identifier in the `user` property. + - To invite an external user to the resource, specify its email in the `userEmail` property. + - To add a Flat group to the resource, specify its unique identifier in the `group` property. + - To update an existing collaborator, process the same request with different rights. + operationId: addScoreCollaborator + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ResourceCollaboratorCreation' + required: true responses: '200': - description: List of submissions + description: The newly added collaborator metadata content: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: + application/json: schema: - type: string - format: binary - default: - description: Error + $ref: '#/components/schemas/ResourceCollaborator' + '402': + description: Account overquota content: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: + application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - /classes/{class}/assignments/{assignment}/submissions/{submission}: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - get: - tags: - - Class - summary: Get a student submission - operationId: getSubmission - responses: - '200': - description: A submission + '403': + description: Not granted to manage this score content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3490,60 +3636,63 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - put: + - scores + x-codegen-request-body-name: body + /scores/{score}/collaborators/{collaborator}: + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: collaborator + in: path + description: | + Unique identifier of a **collaborator permission**, or unique identifier of a **User**, or unique identifier of a **Group** + required: true + schema: + type: string + get: tags: - - Class - summary: Edit a submission + - Score + summary: Get a collaborator description: | - Use this method as a teacher to update the different submission and give feedback. - Teachers can only set `return`, `draftGrade` and `grade` - operationId: editSubmission - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentSubmissionUpdate' - required: true + Get the information about a collaborator (User or Group). + operationId: getScoreCollaborator + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The submission + description: Collaborator information content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' - default: - description: Error + $ref: '#/components/schemas/ResourceCollaborator' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - delete: - tags: - - Class - summary: Reset a submission - description: | - Use this method as a teacher to reset a submission and allow student to start over the assignment - operationId: deleteSubmission - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - responses: - '200': - description: The submission object once reset + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmission' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or collaborator not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3552,42 +3701,25 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - - edu.assignments - x-codegen-request-body-name: body - /classes/{class}/assignments/{assignment}/submissions/{submission}/history: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - get: + - scores.readonly + delete: tags: - - Class - operationId: getSubmissionHistory - summary: Get the history of the submission + - Score + summary: Delete a collaborator description: | - For teachers only. Returns a detailed history of the submission. This currently includes state and grade histories. - security: - - OAuth2: - - edu.assignments - - edu.assignments.readonly + Remove the specified collaborator from the score + operationId: removeScoreCollaborator responses: - '200': - description: The history of the submission - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/AssignmentSubmissionHistory' + '204': + description: The collaborator has been removed '403': - description: Not granted to access to this submission + description: Not granted to manage this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score or collaborator not found content: application/json: schema: @@ -3598,37 +3730,77 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - /classes/{class}/assignments/{assignment}/submissions/{submission}/comments: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - get: - tags: - - Class - operationId: getSubmissionComments - summary: List the feedback comments of a submission security: - OAuth2: - - edu.assignments - - edu.assignments.readonly + - scores + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + parameters: + - $ref: '#/components/parameters/eventProperties' + /scores/{score}/tracks: + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + get: + tags: + - Score + summary: List the audio or video tracks linked to a score + description: | + List all audio or video tracks linked to a score. + + **Access Control for Performance Submission Tracks:** + + Tracks with `purpose: 'performanceSubmission'` are filtered based on user role: + + * **Students**: Can only see their own performance submission tracks, plus all non-performance tracks + * **Teachers and score admins**: Can see all tracks from all students + + The `assignment` query parameter can be used to filter tracks for a specific assignment, but the access control rules above still apply. + operationId: listScoreTracks + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + - name: assignment + in: query + description: | + An assignment id with which all the tracks returned will be related to + schema: + type: string + - name: listAutoTrack + in: query + description: | + If true, and if available, return last automatically synchronized Flat's mp3 export as an additional track + schema: + type: boolean responses: '200': - description: The comments of the score + description: List of tracks content: application/json: schema: type: array items: - $ref: '#/components/schemas/AssignmentSubmissionComment' + $ref: '#/components/schemas/ScoreTrack' '403': - description: Not granted to access to this submission + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score not found content: application/json: schema: @@ -3639,35 +3811,40 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - post: - tags: - - Class - operationId: postSubmissionComment - summary: Add a feedback comment to a submission security: - OAuth2: - - edu.assignments + - scores + - scores.readonly + post: + tags: + - Score + summary: Add a new video or audio track to the score + description: | + Use this method to add new track to the score. This track can then be played on flat.io or in an embedded score. + This API method support medias hosted on SoundCloud, YouTube and Vimeo. + operationId: addScoreTrack + parameters: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' + $ref: '#/components/schemas/ScoreTrackCreation' required: true responses: '200': - description: The comment + description: Created track content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionComment' + $ref: '#/components/schemas/ScoreTrackCreationResponse' '403': - description: Not granted to access to this submission + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score not found content: application/json: schema: @@ -3678,41 +3855,53 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - /classes/{class}/assignments/{assignment}/submissions/{submission}/comments/{comment}: - parameters: - - $ref: '#/components/parameters/class' - - $ref: '#/components/parameters/assignment' - - $ref: '#/components/parameters/submission' - - $ref: '#/components/parameters/comment' - put: - tags: - - Class - operationId: updateSubmissionComment - summary: Update a feedback comment to a submission security: - OAuth2: - - edu.assignments - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentSubmissionCommentCreation' - required: true + - scores + x-codegen-request-body-name: body + /scores/{score}/tracks/{track}: + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: track + in: path + description: | + Unique identifier of a score audio track + required: true + schema: + type: string + get: + tags: + - Score + summary: Retrieve the details of an audio or video track linked to a score + operationId: getScoreTrack + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: The comment + description: Track details content: application/json: schema: - $ref: '#/components/schemas/AssignmentSubmissionComment' + $ref: '#/components/schemas/ScoreTrack' '403': - description: Not granted to access to this submission + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' '404': - description: Submission not found + description: Score or Track not found content: application/json: schema: @@ -3723,87 +3912,41 @@ paths: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - delete: - tags: - - Class - operationId: deleteSubmissionComment - summary: Delete a feedback comment to a submission security: - OAuth2: - - edu.assignments - responses: - '204': - description: The comment has been deleted - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - /classes/{class}/testStudent: - parameters: - - $ref: '#/components/parameters/class' - post: + - scores + - scores.readonly + put: tags: - - Class - summary: Create a test student account - description: | - Test students account can be created by teachers an admin and be used to experiment the assignments. - - - They are automatically added to the class. - - They can be reset using this API endpoint (a new account will be created and the previous one scheduled for deletion). - - These accounts don't use a user license. - operationId: createTestStudentAccount - parameters: - - name: reset - in: query - description: | - If true, the testing account will be re-created. - required: false - schema: - type: boolean + - Score + summary: Update an audio or video track linked to a score + operationId: updateScoreTrack + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScoreTrackUpdate' + required: true responses: '200': - description: Test account created + description: Updated track content: application/json: schema: - $ref: '#/components/schemas/UserDetails' - default: - description: Error + $ref: '#/components/schemas/ScoreTrack' + '403': + description: Not granted to access to this score content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.admin - - edu.classes - /classes/enroll/{enrollmentCode}: - parameters: - - name: enrollmentCode - in: path - description: | - The enrollment code, available to the teacher in `ClassDetails` - required: true - schema: - type: string - post: - tags: - - Class - summary: Join a class - description: | - Use this method to join a class using an enrollment code given one of the teacher of this class. This code is also available in the `ClassDetails` returned to the teachers when creating the class or listing / fetching a specific class. - - Flat will automatically add the user to the corresponding class group based on this role in the organization. - operationId: enrollClass - responses: - '200': - description: The new class details + '404': + description: Score or Track not found content: application/json: schema: - $ref: '#/components/schemas/ClassDetails' + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3812,22 +3955,28 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.classes - /groups/{group}: - parameters: - - $ref: '#/components/parameters/group' - get: + - scores + x-codegen-request-body-name: body + delete: tags: - - Group - summary: Get group information - operationId: getGroupDetails + - Score + summary: Remove an audio or video track linked to the score + operationId: deleteScoreTrack responses: - '200': - description: The group details + '204': + description: Track removed + '403': + description: Not granted to access to this score content: application/json: schema: - $ref: '#/components/schemas/GroupDetails' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or Track not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -3836,178 +3985,79 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.admin - - edu.admin.users - - edu.admin.users.readonly - - edu.classes - - edu.classes.readonly - /groups/{group}/users: + - scores + /scores/{score}/comments: parameters: - - $ref: '#/components/parameters/group' - get: - tags: - - Group - summary: List group's users - operationId: listGroupUsers - parameters: - - name: source - in: query - description: | - Filter the users by their source - schema: - type: string - enum: [googleClassroom, microsoftGraph, clever] - responses: - '200': - description: The list of users member of the group - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/UserPublic' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.admin - - edu.admin.users - - edu.admin.users.readonly - - edu.classes - - edu.classes.readonly - /groups/{group}/scores: - parameters: - - $ref: '#/components/parameters/group' - get: - tags: - - Group - - Score - summary: List group's scores + - name: score + in: path description: | - Get the list of scores shared with a group. - operationId: getGroupScores - parameters: - - name: parent - in: query - description: Filter the score forked from the score id `parent` - schema: - type: string - responses: - '200': - description: The group's scores - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/ScoreDetails' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - scores - - scores.readonly - /eduResources: + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string get: tags: - - EduResources - operationId: listEduResources - summary: List education resources in a library or folder + - Score + summary: List comments + description: This method lists the different comments added on a music score (documents and inline) sorted by their post dates. + operationId: getScoreComments parameters: - - name: parent - in: query - description: | - List the resources contained in this `parent` library or folder - schema: - type: string - default: root - - name: withoutSubfoldersResources - in: query - description: | - For the `parent` = `organization`, do not include resources from subfolders. - By default in the Resource Library UI, we include resources from subfolders, but for example in a picker like LTI, we don't want to include them. - schema: - type: boolean - name: type in: query - description: | - Filter the returned resources by type + description: Filter the comments by type schema: type: string enum: - - assignment - - folder - - name: subjects - in: query - description: | - Filter the returned resources by subjects - schema: - type: array - items: - $ref: '#/components/schemas/TeachingTheme' - - name: assignmentTypes - in: query - description: | - Filter the returned resources by assignment types - schema: - type: array - items: - $ref: '#/components/schemas/AssignmentType' - - name: grades - in: query - description: | - Filter the returned resources by grades - schema: - type: array - items: - $ref: '#/components/schemas/Grade' + - document + - inline - name: sort in: query description: Sort schema: type: string enum: - - creationDate - - updateDate - - title - default: creationDate - - $ref: '#/components/parameters/sortDirection' - - name: limit + - date + - name: direction in: query - description: This is the maximum number of resources that may be returned + description: Sort direction schema: - maximum: 100 - minimum: 1 - type: integer - default: 25 - - $ref: '#/components/parameters/next' - - $ref: '#/components/parameters/previous' + type: string + enum: + - asc + - desc responses: '200': - description: List of resources + description: The comments of the score content: application/json: schema: type: array items: - $ref: '#/components/schemas/EduResource' - headers: - X-Total-Assignments-Count: - description: Total number of assignments + $ref: '#/components/schemas/ScoreComment' + '402': + description: Account overquota + content: + application/json: schema: - type: integer - X-Total-Folders-Count: - description: Total number of folders + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: schema: - type: integer + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4016,54 +4066,49 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.resources.readonly - - edu.assignments - - edu.assignments.readonly + - scores.readonly + - scores.social + - scores post: tags: - - EduResources - operationId: createEduResource - summary: Create a new education resource + - Score + summary: Post a new comment + description: | + Post a document or a contextualized comment on a document. + + Please note that this method includes an anti-spam system for public scores. We don't guarantee that your comments will be accepted and displayed to end-user. Comments are be blocked by returning a `403` HTTP error and hidden from other users when the `spam` property is `true`. + operationId: postScoreComment requestBody: content: application/json: schema: - $ref: '#/components/schemas/EduResourceCreation' + $ref: '#/components/schemas/ScoreCommentCreation' required: true responses: '200': - description: Fetched resource + description: The new comment content: application/json: schema: - $ref: '#/components/schemas/EduResource' - default: - description: Error + $ref: '#/components/schemas/ScoreComment' + '402': + description: Account overquota content: application/json: schema: $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.resources - - edu.assignments - /eduResources/libraries: - get: - tags: - - EduResources - operationId: listEduLibraries - summary: List the education libraries - responses: - '200': - description: Fetched resource + '403': + description: Not granted to access to this score, to post a comment, or your API call triggered our spam filter. content: application/json: schema: - type: array - description: List of libraries to display - items: - $ref: '#/components/schemas/EduLibrary' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4072,64 +4117,67 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.resources.readonly - - edu.assignments - - edu.assignments.readonly - /eduResources/{resource}: + - scores.social + - scores + x-codegen-request-body-name: body + /scores/{score}/comments/{comment}: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - get: - tags: - - EduResources - operationId: getEduResource - summary: Get an education resource - responses: - '200': - description: Fetched resource - content: - application/json: - schema: - $ref: '#/components/schemas/EduResource' - default: - description: Error - content: - application/json: - schema: - $ref: '#/components/schemas/FlatErrorResponse' - security: - - OAuth2: - - edu.resources - - edu.resources.readonly - - edu.assignments - - edu.assignments.readonly + - name: comment + in: path + description: | + Unique identifier of a sheet music comment + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string put: tags: - - EduResources - operationId: updateEduResource - summary: Update an education resource metadata - description: | - Update any resources metadata (e.g. title). - - Use this method to rename education resources folders or assignments. + - Score + summary: Update an existing comment + operationId: updateScoreComment requestBody: content: application/json: schema: - $ref: '#/components/schemas/EduResourceUpdate' + $ref: '#/components/schemas/ScoreCommentUpdate' required: true responses: '200': - description: Fetched resource + description: The edited comment content: application/json: schema: - $ref: '#/components/schemas/EduResource' + $ref: '#/components/schemas/ScoreComment' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score or not the original comment creator + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4138,16 +4186,29 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments + - scores.social + - scores + x-codegen-request-body-name: body delete: tags: - - EduResources - operationId: deleteEduResource - summary: Delete an education resource + - Score + summary: Delete a comment + operationId: deleteScoreComment responses: '204': - description: Resource deleted + description: The comment has been deleted + '403': + description: Not granted to access to this score or not the original comment creator + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or comment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4156,34 +4217,57 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/move: + - scores.social + - scores + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + parameters: + - $ref: '#/components/parameters/eventProperties' + /scores/{score}/comments/{comment}/resolved: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - post: + - name: comment + in: path + description: | + Unique identifier of a sheet music comment + required: true + schema: + type: string + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + put: tags: - - EduResources - operationId: moveEduResource - summary: Move an education resource - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EduResourceMove' - required: true + - Score + summary: Mark the comment as resolved + operationId: markScoreCommentResolved responses: - '200': - description: Fetched resource + '204': + description: The comment has been marked as resolved + '403': + description: Not granted to mark this comment as resolved content: application/json: schema: - $ref: '#/components/schemas/EduResource' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or comment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4192,34 +4276,35 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/copy: - parameters: - - name: resource - in: path - required: true - description: Unique identifier of the resource - schema: - type: string - post: + - scores.social + - scores + delete: tags: - - EduResources - operationId: copyEduResource - summary: Copy an education resource to a Resource Library - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EduResourceCopy' - required: true + - Score + summary: Mark the comment as unresolved + operationId: markScoreCommentUnresolved + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: - '200': - description: Fetched resource + '204': + description: The comment has been unmarked as resolved + '403': + description: Not granted to unmark this comment as resolved content: application/json: schema: - $ref: '#/components/schemas/EduResource' + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or comment not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4228,35 +4313,60 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/copyToDemoClass: + - scores.social + - scores + /scores/{score}/revisions: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - post: + get: tags: - - EduResources - operationId: copyEduResourceToDemoClass - summary: Copy an education assignment to a teacher demo class + - Score + summary: List the revisions description: | - Once a resource library can be published to a class (`Assignment.capabilities.canPublishInClass = true`), - this endpoint can be used for the feature "View as student". + When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to list all of them, sorted by last modification. - It will ensure the teacher has a demo class, then copy the assignment to the demo class. - You can then use `POST /classes/{class}/testStudent` to create a testing student account - in the demo class. + Depending the plan of the account, this list can be trunked to the few last revisions. + operationId: getScoreRevisions + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string responses: '200': - description: Assignment copied to the demo class + description: List of revisions content: application/json: schema: - $ref: '#/components/schemas/ClassAssignment' + type: array + items: + $ref: '#/components/schemas/ScoreRevision' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4265,37 +4375,47 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/useInClass: - parameters: - - name: resource - in: path - required: true - description: Unique identifier of the resource - schema: - type: string + - scores + - scores.readonly post: tags: - - EduResources - operationId: useEduResourceInClass - summary: Use an education resource in a class + - Score + summary: Create a new revision description: | - This endpoint will copy a resource and the underlying resources. - The assignment will be created as a draft that can be completed with other options before publishing (e.g. due date, publication date for scheduling, etc.). + Update a score by uploading a new revision for this one. + operationId: createScoreRevision + parameters: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/EduResourceUseInClass' + $ref: '#/components/schemas/ScoreRevisionCreation' required: true responses: '200': - description: Assignment copied to the chosen class + description: The new created revision metadata content: application/json: schema: - $ref: '#/components/schemas/ClassAssignment' + $ref: '#/components/schemas/ScoreRevision' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to modify this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4304,31 +4424,63 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/createLtiLink: + - scores + x-codegen-request-body-name: body + /scores/{score}/revisions/{revision}: parameters: - - name: resource + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: revision in: path + description: | + Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. required: true - description: Unique identifier of the resource schema: type: string - post: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + get: tags: - - EduResources - operationId: createEduResourceLtiLink - summary: Create an LTI link for an education resource + - Score + summary: Get a score revision description: | - This endpoint will return an LTI link that can be used to launch Flat for Education. - The link, in a context from a class, will ensure the assignment has been copied in the class. + When creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to get a specific + revision metadata. + operationId: getScoreRevision responses: '200': - description: Created LTI Link + description: Revision metadata content: application/json: schema: - $ref: '#/components/schemas/EduResourceLtiLink' + $ref: '#/components/schemas/ScoreRevision' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4337,34 +4489,138 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments - /eduResources/{resource}/assignment: + - scores + - scores.readonly + /scores/{score}/revisions/{revision}/{format}: parameters: - - name: resource + - name: score in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). required: true - description: Unique identifier of the resource schema: type: string - put: + - name: revision + in: path + description: | + Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. + required: true + schema: + type: string + - name: format + in: path + description: The format of the file you will retrieve + required: true + schema: + type: string + enum: + - json + - mxl + - xml + - mp3 + - wav + - midi + - flat + - thumbnail.png + - synchronizationPoints + get: tags: - - EduResources - operationId: updateEduResourceAssignment - summary: Update an education resource assignment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AssignmentUpdate' - required: true + - Score + summary: Get a score revision data + description: | + Retrieve the file corresponding to a score revision (the following formats are available): Flat JSON/Adagio JSON `json`, MusicXML + `mxl`/`xml`, MP3 `mp3`, WAV `wav`, MIDI `midi`, Flat `flat`, a tumbnail of the first page `thumbnail.png` or auto sync points `synchronizationPoints`. + operationId: getScoreRevisionData + parameters: + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + - name: parts + in: query + description: | + An optional a set of parts uuid to be exported. This parameter must be composed of parts uuids + separated by commas. For example "59df645f-bb1c-f1b4-b573-d2afc4491f94,34ef645f-1aef-f3bc-1564-34cca4492b87". + schema: + type: string + - name: defaultTrack + in: query + description: | + When `format` is `mp3`, this property is set to true and the score has a default `ScoreTrack` (mp3), this one will be returned instead of the playback file. + schema: + type: boolean + - name: url + in: query + description: | + Returns a json with the `url` in it instead of redirecting + schema: + type: boolean responses: '200': - description: Fetched resource + description: Revision data + headers: + x-flat-score-revision: + description: The unique identifier of the score revision + schema: + type: string + x-flat-score-revision-date: + description: The date of the score revision (ISO 8601) + schema: + type: string + format: date-time content: application/json: schema: - $ref: '#/components/schemas/Assignment' + type: string + format: binary + application/vnd.recordare.musicxml+xml: + schema: + type: string + format: binary + application/vnd.recordare.musicxml: + schema: + type: string + format: binary + audio/mp3: + schema: + type: string + format: binary + audio/wav: + schema: + type: string + format: binary + audio/midi: + schema: + type: string + format: binary + image/png: + schema: + type: string + format: binary + application/octet-stream: + schema: + type: string + format: binary + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or associated file not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' default: description: Error content: @@ -4373,28 +4629,318 @@ paths: $ref: '#/components/schemas/FlatErrorResponse' security: - OAuth2: - - edu.resources - - edu.assignments -components: - securitySchemes: - OAuth2: - type: oauth2 + - scores + - scores.readonly + /scores/{score}/revisions/{revision}/{format}/task: + post: + tags: + - Score + summary: Create a new score export task description: | - OAuth 2.0 authentication for your app or. Please only request the most restrictive and needed scopes. Using some of the scopes may require an additional review from our team. The Flat API supports **authorization code** and **implicit** flows. - flows: - authorizationCode: - authorizationUrl: https://flat.io/auth/oauth - tokenUrl: https://api.flat.io/oauth/access_token - scopes: - account.public_profile: | - Provides access to the basic person's public profile. Education profiles may be anonymized with this scope, you can request the scope `education_profile` to access to the a basic education account profile. - account.email: | - Provices access to the person's email. - account.education_profile: | - Provides access to the basic person's education profile and public organization information. - scores.readonly: | - Allows read-only access to all a user's scores. You won't need this scope to read public scores. - scores.social: | + Some of the exports of a score takes are longer to process than a simple API requests. + Use this endpoint to launch a new export of one score hosted on Flat. + operationId: createExportTask + parameters: + - name: score + in: path + description: | + Unique identifier of the score document. This can be a Flat Score unique identifier (i.e. `ScoreDetails.id`) or, if the score is also a Google Drive file, the Drive file unique identifier prefixed with `drive-` (e.g. `drive-0B000000000`). + required: true + schema: + type: string + - name: revision + in: path + description: | + Unique identifier of a score revision. You can use `last` to fetch the information related to the last version created. + required: true + schema: + type: string + - name: format + in: path + description: The format of the file that will be generated or the target service name where the file will be exported + required: true + schema: + type: string + enum: + - mp3 + - wav + - practicefirst + - name: sharingKey + in: query + description: | + This sharing key must be specified to access to a score or collection with a `privacy` mode set to `privateLink` and the current user is not a collaborator of the document. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TaskExportOptions' + required: false + responses: + '200': + description: Task associated to the generation of the file + content: + application/json: + schema: + $ref: '#/components/schemas/Task' + '402': + description: Account overquota + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '403': + description: Not granted to access to this score + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + '404': + description: Score or associated file not found + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - scores + - scores.readonly + x-codegen-request-body-name: body + /tasks/{task}: + parameters: + - name: task + in: path + description: Unique identifier for the task + required: true + schema: + type: string + get: + tags: + - Task + summary: Get a task details + description: | + This method can be used to follow a task progression, for example while a score is being exported. + operationId: getTask + responses: + '200': + description: Task details + content: + application/json: + schema: + $ref: '#/components/schemas/Task' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - tasks.readonly + /tasks/{task}/cancel: + parameters: + - name: task + in: path + description: Unique identifier for the task + required: true + schema: + type: string + /users/{user}: + parameters: + - name: user + in: path + description: | + This route parameter is the unique identifier of the user. You can specify an email instead of an unique identifier. If you are executing this request authenticated, you can use `me` as a value instead of the current User unique identifier to work on the current authenticated user. + required: true + schema: + type: string + get: + tags: + - User + summary: Get a public user profile + description: | + Get a profile of a Flat or Flat for Education User. + operationId: getUser + responses: + '200': + description: The user public details + content: + application/json: + schema: + $ref: '#/components/schemas/UserPublic' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - account.public_profile + - account.education_profile + /users/{user}/likes: + parameters: + - name: user + in: path + description: | + Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. + required: true + schema: + type: string + get: + tags: + - User + - Score + summary: List liked scores + operationId: getUserLikes + parameters: + - $ref: '#/components/parameters/next' + - $ref: '#/components/parameters/previous' + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: ids + in: query + description: Return only the identifiers of the scores + schema: + type: boolean + responses: + '200': + description: List of liked scores + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScoreDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - account.public_profile + /users/{user}/scores: + parameters: + - name: user + in: path + description: | + Unique identifier of a Flat user. If you authenticated, you can use `me` to refer to the current user. + required: true + schema: + type: string + get: + tags: + - User + - Score + summary: List user's scores + description: | + Get the list of public scores owned by a User. + If you want to access to private scores, please use the [Collections API](#tag/Collection). + For example `GET /v2/collections/allScores/scores` to list all recently updated scores. + operationId: getUserScores + parameters: + - name: paginate + in: query + description: | + When set to `true`, the API will return a paginated result. + When set to `false` or unset, the API will return all the scores. + If this parameter is unset or false, then limit/sort/direction/next/previous will be ignored. + schema: + type: boolean + default: false + - name: sort + in: query + description: Sort + schema: + type: string + enum: + - creationDate + - modificationDate + - title + - name: direction + in: query + description: Sort direction + schema: + type: string + enum: + - asc + - desc + - name: limit + in: query + description: This is the maximum number of objects that may be returned + schema: + maximum: 100 + minimum: 1 + type: integer + default: 25 + - name: next + in: query + description: | + An opaque string cursor to fetch the next page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + - name: previous + in: query + description: | + An opaque string cursor to fetch the previous page of data. + The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. + schema: + type: string + responses: + '200': + description: The user scores + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScoreDetails' + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/FlatErrorResponse' + security: + - OAuth2: + - scores + - scores.readonly +components: + securitySchemes: + OAuth2: + type: oauth2 + description: | + OAuth 2.0 authentication for your app or. Please only request the most restrictive and needed scopes. Using some of the scopes may require an additional review from our team. The Flat API supports **authorization code** and **implicit** flows. + flows: + authorizationCode: + authorizationUrl: https://flat.io/auth/oauth + tokenUrl: https://api.flat.io/oauth/access_token + scopes: + account.public_profile: | + Provides access to the basic person's public profile. Education profiles may be anonymized with this scope, you can request the scope `education_profile` to access to the a basic education account profile. + account.email: | + Provices access to the person's email. + account.education_profile: | + Provides access to the basic person's education profile and public organization information. + scores.readonly: | + Allows read-only access to all a user's scores. You won't need this scope to read public scores. + scores.social: | Allow to post comments and like scores scores: | Full, permissive scope to access all of a user's scores. @@ -4415,2254 +4961,2759 @@ components: edu.admin.users.readonly: Read-only access to the users and invitations of the organization. tasks.readonly: Read-only access to export tasks created by this account. schemas: - TutteoProduct: - description: The Tutteo product used by the user account - type: string - default: flat - enum: - - flat - - flatEdu - - msnippet - - embed - FlatLocales: + AppScopes: type: string - description: The user language - default: en + description: Available scopes enum: - - en - - en-GB - - es - - fr - - de - - it - - ja - - ja-HIRA - - ko - - nl - - pl - - pt - - pt-BR - - ro - - ru - - sv - - tr - - zh-Hans - OrganizationRoles: + - account.public_profile + - account.email + - account.education_profile + - scores.readonly + - scores.social + - scores + - collections.readonly + - collections.add_scores + - collections + - notifications.readonly + - edu.resources + - edu.resources.readonly + - edu.classes + - edu.classes.readonly + - edu.assignments + - edu.assignments.readonly + - edu.admin + - edu.admin.lti + - edu.admin.lti.readonly + - edu.admin.users + - edu.admin.users.readonly + - tasks.readonly + AssignmentType: type: string - description: User's Organization Role (for Edu users only) + description: Type of the assignment enum: - - admin - - billing - - teacher - - user - ClassRoles: + - none + - newScore + - scoreTemplate + - sharedWriting + - worksheet + - worksheetText + - performance + Assignment: + type: object + required: + - id + - type + - title + - attachments + - capabilities + properties: + id: + type: string + description: Unique identifier of the assignment + type: + $ref: '#/components/schemas/AssignmentType' + capabilities: + required: + - canEdit + - canPublishInClass + - canArchive + - canUnarchive + type: object + description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. + properties: + canEdit: + type: boolean + description: | + Whether the current user can edit the assignment + canPublishInClass: + type: boolean + description: | + Whether this assignment can be published in a class + canPublishInClassError: + type: object + required: + - code + - message + description: | + If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable and localized message for this error + canArchive: + type: boolean + description: | + Whether the current user can archive the assignment + canUnarchive: + type: boolean + description: | + Whether the current user can unarchive the assignment + title: + type: string + description: Title of the assignment + description: + type: string + description: Student instructions and content of the assignment (plain text) + descriptionHtml: + type: string + description: | + HTML version of student instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + teacherInstructions: + type: string + description: | + Teacher-only instructions for this assignment. + These instructions are only visible to teachers and are not returned when students view the assignment. + If `teacherInstructionsHtml` is provided, this field will contain the plain text version for compatibility. + teacherInstructionsHtml: + type: string + description: | + HTML version of teacher-only instructions with rich text formatting. + Supports the following HTML tags: p, br, strong, b, em, i, u, a, ul, ol, li, h1, h2, h3. + cover: + type: string + description: The URL of the cover to display + coverFile: + type: string + description: The id of the cover to display + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + useDedicatedAttachments: + type: boolean + description: | + For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. + This boolean indicates that this assignment only supports dedicated attachments. + maxPoints: + type: number + description: | + If set, the grading will be enabled for the assignement + releaseGrades: + type: string + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + toolset: + type: string + description: The id of the associated toolset + nbPlaybackAuthorized: + type: number + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: + type: string + description: | + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + description: Assignment details + example: + id: 636a724a89a6eaa0a54c3900 + title: My first assignment + description: Get started with Flat + maxPoints: 100 + attachments: + - type: flat + score: '0000000000000000' + - type: link + url: https://flat.io/developers + - type: video + url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw + title: Flat - The online collaborative music notation software + description: Discover Flat on https://flat.io + html: + thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg + thumbnailHeight: 1052 + thumbnailWidth: 1868 + authorName: Flat + authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw + AssignmentUpdate: + type: object + description: Assignment Resource Editing + properties: + type: + $ref: '#/components/schemas/AssignmentType' + title: + type: string + description: Title of the assignment + maxLength: 1000 + minLength: 1 + description: + type: string + maxLength: 100000 + description: Student instructions and content of the assignment (plain text) + descriptionHtml: + type: string + maxLength: 100000 + description: | + HTML version of student instructions. + When provided, the plain text version will be automatically extracted for compatibility. + teacherInstructions: + type: string + maxLength: 100000 + description: Teacher-only instructions (plain text) + teacherInstructionsHtml: + type: string + maxLength: 100000 + description: | + HTML version of teacher-only instructions. + When provided, the plain text version will be automatically extracted for compatibility. + attachments: + type: array + items: + $ref: '#/components/schemas/ClassAttachmentCreation' + nbPlaybackAuthorized: + type: number + nullable: true + description: The number of playback authorized on the scores of the assignment. + restrictPlayNote: + type: boolean + description: Restrict the ability to get an audio feedback every time a student adds or selects a note. + restrictToAudioTracks: + type: boolean + description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. + toolset: + type: string + nullable: true + description: | + The id of the toolset to apply to this assignment. + The toolset will be copied to the assignment as a dedicated object to prevent unexpected changes when making modifications to the template toolset. + This property can be set to null to delete the linked toolset and switch back to all the tools available for this assignment. + coverFile: + type: string + nullable: true + description: The id of the cover to display + cover: + type: string + nullable: true + description: The URL of the cover to display + maxPoints: + type: number + nullable: true + minimum: 0 + maximum: 10000 + description: | + If set, the grading will be enabled for the assignement with this value as the maximum of points + releaseGrades: + type: string + enum: + - auto + - manual + description: | + For worksheets, how grading will work for the assignment: + - If set to `auto`, the grades will be automatically released when the student submits the submissions + - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions + shuffleExercises: + type: boolean + description: Mixing worksheets exercises for each student + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + recordingType: + type: string + description: | + For performance assignments: recording type that will be either 'audio' or 'video'. + + * `audio`: Only audio will be required during the recording. + * `video`: Camera will be required during the recording. + + Only set when type is 'performance'. + enum: + - audio + - video + allowMetronome: + type: boolean + description: | + For performance assignments: Enable students to use the metronome while they are recording, + helping them stay in time. + Only set when type is 'performance'. + allowBackingTrack: + type: boolean + description: | + For performance assignments: Enable students to listen to the accompaniment without their + instrument part while they are playing. + Only set when type is 'performance'. + allowSpeedChange: + type: boolean + description: | + For performance assignments: whether students can adjust the playback speed of the score during recording. + + * `true`: Students can change the tempo/speed during practice and recording + * `false`: Tempo is fixed to the original score tempo + + Only set when type is 'performance'. + example: + title: First assignment + description: Get started with Flat + maxPoints: 100 + attachments: + - type: flat + score: '0000000000000000' + - type: link + url: https://flat.io/developers + AssignmentSubmissionStudentsMode: type: string - description: User's Class Role (for Edu users only) + description: | + Submission mode for assignments: + - "single": Individual submissions (default) + - "group": Group submissions (for shared writing assignments) enum: - - teacher - - student - LicenseMode: + - single + - group + AssignmentGroup: + type: object + properties: + id: + type: string + description: The unique identifier of the group + name: + type: string + description: The display name of the group + parent: + type: string + description: The unique identifier of the parent class group. Only available for groups of type 'assignmentStudentsSubGroup'. May be null if the parent class group was deleted. + members: + type: array + items: + type: string + description: Array of user IDs that are members of this group + required: + - id + - name + - members + description: A group assigned to an assignment for shared writing assignments + ClassGroupIdsToApplyToAssignment: + type: array + nullable: true + items: + type: string + description: | + Optional list of specific class group IDs to apply to the assignment. + When transitioning to active state with group submission mode: + - If provided: Only these specific groups will be applied + - If not provided: All class groups will be applied, or randomized groups created if none exist + AssignmentCopy: + oneOf: + - $ref: '#/components/schemas/AssignmentCopyToClass' + - $ref: '#/components/schemas/AssignmentCopyToResourceLibrary' + AssignmentCopyToResourceLibrary: + type: object + description: Copy the assignment to the EDU Resource Library + required: + - libraryParent + properties: + libraryParent: + type: string + description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` + verifyIfNotAlreadyInResourceLibrary: + type: boolean + description: Option to check if the assignment is already in Resource Library + example: + libraryParent: '0000000000000000' + AssignmentCopyToClass: + type: object + description: Copy the assignment to a class + required: + - classroom + properties: + classroom: + type: string + description: The destination classroom where the assignment will be copied + assignment: + type: string + description: An optional destination assignment where the original assignement will be copied. Must be a draft. + scheduledDate: + type: string + description: | + The publication (scheduled) date of the assignment. + If this one is specified, the assignment will only be listed to the teachers of the class. + Alternatively the existing `scheduledDate` from the copied assignment will be used. + format: date-time + example: + classroom: '0000000000000000' + AssignmentSubmissionState: type: string - description: Mode of the license + description: State of the submission enum: - - credit - - site - LicenseSources: + - created + - turnedIn + - returned + - graded + AssignmentSubmissionHistoryState: type: string - description: Source of the license - default: order + description: State of the submission history enum: - - order - - trial - - voucher - - distributor - - subscription - - appStore - - playStore - - musicfirst - UserBasics: + - created + - turnedIn + - returned + - graded + - reset + AssignmentSubmission: + type: object + required: + - id + - state + - classroom + - assignment + - creator + - creationDate + - attachments + - playback + - comments + properties: + id: + type: string + description: Unique identifier of the submission + state: + $ref: '#/components/schemas/AssignmentSubmissionState' + classroom: + type: string + description: | + Unique identifier of the classroom where the assignment was posted + assignment: + type: string + description: Unique identifier of the assignment + creator: + type: string + description: The User identifier of the student who created the submission + creationDate: + type: string + description: The date when the submission was created + attachments: + type: array + items: + $ref: '#/components/schemas/MediaAttachment' + submissionDate: + type: string + description: The date when the student submitted their work + returnDate: + type: string + description: The date when the teacher returned the work + returnCreator: + type: string + description: | + The User unique identifier of the teacher who returned the submission + grade: + type: number + nullable: true + description: Optional grade. If unset, no grade was set. + draftGrade: + type: number + nullable: true + description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission + maxPoints: + type: number + description: Optional max points for the grade. If set, a corresponding `draftGrade` or `grade` will be set. + exercisesIds: + type: array + items: + type: string + description: The ids of exercises when they need to be in a specific order + playback: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionPlayback' + comments: + type: object + properties: + total: + type: number + description: The total number of comments added to the submission + unread: + type: number + description: The number of unread comments for the current user + googleClassroom: + $ref: '#/components/schemas/GoogleClassroomSubmission' + microsoftGraph: + $ref: '#/components/schemas/MicrosoftGraphSubmission' + lti: + type: object + description: If set, this submission has a linked LTI 1.3 AGS or LTI 1.1 Outcomes + required: + - gradeService + properties: + gradeService: + type: string + description: | + The kind of grading service available for this submission: + + - `ags2p0`: LTI 1.3 Assignment and Grade Services 2.0 + - `outcomes1p1`: LTI 1.1 Outcomes 1.1 + enum: + - ags2p0 + - outcomes1p1 + sourcedid: + type: string + description: The sourcedid of the LTI submission when using LTI Outcomes + description: Assignment Submission + example: + id: 58c4955c226ffff257211a90 + classroom: 58c4725345cd836264f0b29e + assignment: 58c49068524c03ec576ca43c + creator: 559eb5c7f0d4d5e46d03781d + attachments: + - type: flat + score: 58c4955a226ffff257211a8d + title: Hello - Student + returnCreator: 559eb5c7f0d4d5e46d000000 + grade: 80 + draftGrade: 82 + googleClassroom: + id: CgsI-00000000000 + state: turned_in + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission + AssignmentSubmissionUpdate: + type: object + properties: + attachments: + type: array + items: + $ref: '#/components/schemas/ClassAttachmentCreation' + playback: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmissionPlayback' + submit: + type: boolean + description: If `true`, the submission will be marked as done + draftGrade: + type: number + nullable: true + minimum: 0 + maximum: 10000 + description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission + grade: + type: number + nullable: true + minimum: 0 + maximum: 10000 + description: Optional grade. If unset, no grade was set. + exercisesIds: + type: array + nullable: true + items: + type: string + description: The ids of exercises when they need to be in a specific order + return: + type: boolean + description: If `true`, the submission will be marked as done + description: Assignment Submission creation + example: + attachments: + - type: flat + score: 58c4955a226ffff257211a8d + title: Hello - Student + submit: true + AssignmentSubmissionComment: + description: Feedback comment added to an assignment submission type: object - required: - - id - - type - - product - - username - - picture properties: id: type: string - description: The user unique identifier - type: + description: The comment unique identifier + user: type: string - description: The type of user account - enum: [user, guest] - product: - $ref: '#/components/schemas/TutteoProduct' - username: + description: The author unique identifier + submission: type: string - description: The user name (unique for the organization) - printableName: + description: The submission unique identifier + date: type: string - description: The name that can be directly printed (name, firstname & lastname, or username) - firstname: + description: The date when the comment was posted + format: date-time + modificationDate: type: string - description: Firstname of the user (for education users) - lastname: + description: The date of the last comment modification + format: date-time + comment: type: string - description: Lastname of the user (for education users) - name: + description: The comment text + unread: + type: boolean + description: True if the comment is unread by the current user + AssignmentSubmissionCommentCreation: + description: Creation of a assignment submission comment + required: + - comment + type: object + properties: + comment: type: string - description: A displayable name for the user (for consumer users) - picture: + description: The comment text + AssignmentSubmissionPlayback: + type: object + description: Playback used by a student for an assignment submission. + required: + - score + - nbPlayAttempt + properties: + score: type: string - nullable: true - description: The URL of the picture to display - badges: + description: The score unique identifier + nbPlayAttempt: + type: number + description: Number of times the score was played + AssignmentSubmissionHistory: + description: History item of the submission + type: object + required: + - date + - users + properties: + date: + description: The date when the submission was changed + type: string + format: date-time + classroom: + description: The classroom unique identifier where the submission was changed + type: string + assignment: + description: The assignment unique identifier where the submission was changed + type: string + submission: + description: The submission unique identifier + type: string + users: + description: The user(s) unique identifier(s) who made the change type: array - description: | - List of badges for the user profile: - - - `power` - - `staff` - - `composerOfTheMonth` - - `ambassador` - - `challenge` items: type: string - description: Badge name - example: - id: '000000000000000000000001' - username: flat - name: Flat Team - printableName: Flat Team - picture: https://flat.io/img/logo_flat.svg - badges: [power, staff] - UserPublicSummary: - description: Public User details summary + source: + description: The source of the change if the change was made by a third-party software + type: string + enum: + - lti + - googleClassroom + - microsoftGraph + state: + $ref: '#/components/schemas/AssignmentSubmissionHistoryState' + draftGrade: + type: number + description: The numerator of the grade at this time in the submission grade history + grade: + type: number + description: The numerator of the grade at this time in the submission grade history + maxPoints: + type: number + description: The denominator of the grade at this time in the submission grade history + comment: + type: string + description: The comment that is made to this submission + dueDate: + type: string + description: The due date of this assignment + format: date-time + attachment: + type: object + properties: + score: + type: string + description: The score identifier that changed + revision: + type: string + description: The revision identifier that changed + title: + type: string + description: The title of the score that changed + ClassAssignment: allOf: - - $ref: '#/components/schemas/UserBasics' + - $ref: '#/components/schemas/Assignment' - type: object + required: + - state + - creationDate + - submissions properties: - organization: + creator: type: string - description: Organization ID (for Edu users only) - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - classRole: - $ref: '#/components/schemas/ClassRoles' - htmlUrl: + description: | + The User unique identifier of the creator of this assignment + state: type: string - description: Link to user profile (for Indiv. users only) - UserPublic: - description: Public User details + description: State of the assignment + enum: + - draft + - active + - archived + classroom: + type: string + description: The unique identifier of the class where this assignment was posted + creationDate: + type: string + description: The creation date of this assignment + format: date-time + scheduledDate: + type: string + description: | + The publication (scheduled) date of the assignment. + If this one is specified, the assignment will only be listed to the teachers of the class. + format: date-time + dueDate: + type: string + description: | + The due date of this assignment, late submissions will be marked as + paste due. + format: date-time + assigneeMode: + type: string + description: Possible modes of assigning assignments + enum: + - everyone + - selected + assignedStudents: + type: array + items: + type: string + description: Identifiers for the students that have access to the assignment + assignedGroups: + type: array + items: + $ref: '#/components/schemas/AssignmentGroup' + description: Groups that have access to the assignment (for shared writing assignments) + submissions: + type: array + items: + $ref: '#/components/schemas/AssignmentSubmission' + googleClassroom: + $ref: '#/components/schemas/GoogleClassroomCoursework' + microsoftGraph: + $ref: '#/components/schemas/MicrosoftGraphAssignment' + mfc: + type: object + description: A MusicFirst Classroom assignment + properties: + id: + type: string + description: Unique identifier of the course on MusicFirst Task + alternateLink: + type: string + description: Link to MusicFirst Classroom task + canvas: + type: object + description: A Canvas LMS assignment + properties: + id: + type: string + description: Unique identifier of the course on Canvas assignment + alternateLink: + type: string + description: Link to Canvas assignment + lti: + type: object + description: An LTI assignment + properties: + id: + type: string + description: Resource ID in the LMS + issue: + type: string + description: Detected issue for this assignment + example: + id: 636a724a89a6eaa0a54c3900 + title: My first assignment + description: Get started with Flat + state: active + creator: 5832bf149995c4024bd6de7d + classroom: 58c4725345cd836264f0b29e + maxPoints: 100 + attachments: + - type: flat + score: '0000000000000000' + - type: link + url: https://flat.io/developers + - type: video + url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw + title: Flat - The online collaborative music notation software + description: Discover Flat on https://flat.io + html: + thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg + thumbnailHeight: 1052 + thumbnailWidth: 1868 + authorName: Flat + authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw + googleClassroom: + id: '1235665432' + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/detail + lti: + id: '12345' + canvas: + id: '12345' + alternateLink: https://canvas.instructure.com/courses/00000/assignments/12345 + submissions: + - id: 58c4955c226ffff257211a90 + classroom: 58c4725345cd836264f0b29e + assignment: 58c49068524c03ec576ca43c + creator: 559eb5c7f0d4d5e46d03781d + attachments: + - type: flat + score: 58c4955a226ffff257211a8d + title: Hello - Student + googleClassroom: + id: CgsI-00000000000 + state: turned_in + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission + ClassAssignmentUpdate: + type: object allOf: - - $ref: '#/components/schemas/UserPublicSummary' + - $ref: '#/components/schemas/AssignmentUpdate' - type: object properties: - bio: + state: type: string - description: User's biography - registrationDate: + description: State of the assignment + enum: + - draft + - active + dueDate: type: string - description: Date the user signed up + nullable: true + description: | + The due date of this assignment, late submissions will be marked as paste due. If not set, the assignment won't have a due date. format: date-time - likedScoresCount: - type: integer - description: Number of the scores liked by the user - followersCount: - type: integer - description: Number of followers the user have - followingCount: - type: integer - description: Number of people the user follow - ownedPublicScoresCount: - type: integer - description: Number of public scores the user have - likesCount: - type: integer - description: Number of likes on the user published scores - playsCount: - type: integer - description: Number of plays on the user published scores - coverPicture: + scheduledDate: type: string - description: Cover picture (backgroud) for the profile nullable: true - profileTheme: - type: string - description: Theme (background) for the profile - instruments: - type: array description: | - An array of the instrument identifiers. - The format of the strings is `{instrument-group}.{instrument-id}`. - items: - type: string - links: - $ref: '#/components/schemas/UserCommunityProfileLinks' - UserDetailsAdmin: - description: User details (view for organization teacher / admin) - allOf: - - $ref: '#/components/schemas/UserPublicSummary' - - type: object - properties: - email: - type: string - description: Email of the user - format: email - lastActivityDate: - type: string - description: Date of the last user activity + The publication (scheduled) date of the assignment. + If this one is specified, the assignment will only be listed to the teachers of the class. format: date-time - license: + googleClassroom: type: object + description: Google Classroom options for this assignment properties: - id: - type: string - description: ID of the current license - expirationDate: + topicId: type: string - description: Date when the license expires - format: date-time - source: - $ref: '#/components/schemas/LicenseSources' - mode: - $ref: '#/components/schemas/LicenseMode' - active: - type: boolean - description: ID of the current license - description: Current active license of the user - groups: - description: For Flat for Education accounts, list of Group identifiers the user is part of. + nullable: true + description: Identifier of the topic where the assignment is created + microsoftGraph: + type: object + description: Microsoft Graph options for this assignment + properties: + categories: + description: List of categories this assignment belongs to + type: array + nullable: true + items: + type: string + assigneeMode: + type: string + description: Possible modes of assigning assignments + enum: + - everyone + - selected + assignedStudents: type: array items: type: string - description: Unique group identifier - UserCreation: + description: Identifiers for the students that have access to the assignment + submissionStudentsMode: + $ref: '#/components/schemas/AssignmentSubmissionStudentsMode' + classGroupIds: + $ref: '#/components/schemas/ClassGroupIdsToApplyToAssignment' + description: Assignment creation details + example: + title: First assignment + description: Get started with Flat + maxPoints: 100 + attachments: + - type: flat + score: '0000000000000000' + - type: link + url: https://flat.io/developers + ApiAccessToken: + type: object + properties: + id: + type: string + description: Unique identifier of this private token + name: + type: string + description: Name of the personal access token + token: + type: string + description: | + The token. This token will only be returned once, then only the first 4 characters will be returned. + issuedDate: + type: string + description: | + The date then this token was issued + format: date-time + expirationDate: + type: string + description: | + The date then this token will expire + format: date-time + scopes: + type: array + description: | + The list of scopes associated to the token + items: + $ref: '#/components/schemas/AppScopes' + description: An API access token + example: + id: '0000000000000000' + name: API Access Token name + token: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + scopes: + - account.public_profile + - account.education_profile + - collections.readonly + ClassRoles: + type: string + description: User's Class Role (for Edu users only) + enum: + - teacher + - student + ClassCreation: required: - - password - - username + - name + type: object + properties: + name: + maxLength: 255 + type: string + description: The name of the new class + section: + maxLength: 255 + type: string + description: The section of the new class + level: + $ref: '#/components/schemas/ClassGradeLevel' + skillsFocused: + $ref: '#/components/schemas/EduSkillsFocused' + size: + type: number + minimum: 0 + nullable: true + description: Number of students in the classroom + description: Creation of a classroom + example: + name: Music Theory Course + section: Music Theory 101 + ClassUpdate: + type: object + properties: + name: + maxLength: 255 + type: string + description: The name of the class + section: + maxLength: 255 + type: string + description: The section of the class + level: + $ref: '#/components/schemas/ClassGradeLevel' + skillsFocused: + $ref: '#/components/schemas/EduSkillsFocused' + size: + type: number + minimum: 0 + nullable: true + description: Number of students in the classroom + description: Update of a classroom + example: + name: Music Theory Course + section: Music Theory 101 + ClassDetails: type: object + required: + - id + - name + - state + - creationDate properties: - username: - maxLength: 30 - minLength: 1 - pattern: ^[A-Za-z0-9\-_.]+$ + id: type: string - description: Username of the new account - firstname: - maxLength: 60 + description: The unique identifier of the class + state: + $ref: '#/components/schemas/ClassState' + name: type: string - description: First name of the user - lastname: - maxLength: 60 + description: The name of the class + section: type: string - description: Last name of the user - email: + description: The section of the class + description: type: string - description: Email of the new account - format: email - password: - minLength: 6 - maxLength: 1000 + description: An optionnal description for this class + organization: type: string - description: Password of the new account - format: password - locale: - $ref: '#/components/schemas/FlatLocales' - role: - description: Role of the new account + description: The unique identifier of the Organization owning this class + owner: type: string - default: user - enum: - - user - - teacher - - admin - description: User creation - UserAdminUpdate: - type: object - properties: - password: - minLength: 6 - maxLength: 1000 + description: The unique identifier of the User owning this class + creationDate: type: string - description: Password of the account - format: password - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - username: - maxLength: 30 - minLength: 1 - pattern: ^[A-Za-z0-9\-_.]+$ + description: The date when the class was create + format: date-time + modificationDate: type: string - description: Username of the account - firstname: - maxLength: 60 + description: The date when the class was last modified + format: date-time + enrollmentCode: type: string - description: First name of the user - lastname: - maxLength: 60 + description: | + [Teachers only] The enrollment code that can be used by the students to join the class + theme: + type: string + description: The theme identifier using in Flat User Interface + assignmentsCount: + type: number + description: The number of assignments created in the class + studentsGroup: + $ref: '#/components/schemas/GroupDetails' + teachersGroup: + $ref: '#/components/schemas/GroupDetails' + issues: + type: object + description: Detected issues for this class + properties: + sync: + type: array + description: Synchronization issues for the class + items: + type: object + description: A sync issue + properties: + id: + type: string + description: The account user identifier + email: + type: string + description: The email address of the user concerned by this sync issue + reason: + type: string + enum: + - otherOrgnanization + - productMigration + - disabledAccount + description: The reason why the account cannot be synced + googleClassroom: + type: object + properties: + id: + type: string + description: The course identifier on Google Classroom + alternateLink: + type: string + description: Absolute link to this course in the Classroom web UI + description: Google Classroom course-related information + googleDrive: + type: object + properties: + teacherFolderId: + type: string + description: | + [Teachers only] The Drive directory identifier of the teachers' folder + teacherFolderAlternateLink: + type: string + description: | + [Teachers only] The Drive URL of the teachers' folder + description: Google Drive course-related information provided by Google Classroom + microsoftGraph: + type: object + properties: + id: + type: string + description: The course identifier on Microsoft Graph + lti: + description: Info about LTI context (1.1 and 1.3) + type: object + properties: + contextId: + type: string + description: Unique context identifier provided + contextTitle: + type: string + description: Context title + contextLabel: + type: string + description: Context label + hasNrpsService: + type: boolean + description: If true, the class has been synchronized with the LTI 1.3 NRPS 2.0 service + canvas: + type: object + properties: + id: + type: string + description: Unique identifier of the course on Canvas + domain: + type: string + description: Canvas instance domain (e.g. "canvas.instructure.com") + description: Meta information provided by Canvs LMS + mfc: + type: object + properties: + id: + type: string + description: Unique identifier of the course on MusicFirst Classroom + alternateLink: + type: string + description: Link to MusicFirst Classroom class + description: Meta information provided by Canvs LMS + clever: + type: object + properties: + id: + type: string + description: Clever section unique identifier + creationDate: + type: string + description: The creation date of the section on clever + format: date-time + modificationDate: + type: string + description: The last modification date of the section on clever + format: date-time + subject: + type: string + description: Normalized subject of the course + enum: + - english/language arts + - math + - science + - social studies + - language + - homeroom/advisory + - interventions/online learning + - technology and engineering + - PE and health + - arts and music + - other + termName: + type: string + description: Name of the term when this course happens + termStartDate: + type: string + description: Beginning date of the term + format: date-time + termEndDate: + type: string + description: End date of the term + format: date-time + description: Clever.com section-related information + level: + $ref: '#/components/schemas/ClassGradeLevel' + skillsFocused: + $ref: '#/components/schemas/EduSkillsFocused' + size: + type: number + nullable: true + description: Number of students in the classroom + description: A classroom + example: + id: '100000000000000000000001' + state: active + name: Music Theory 101 + section: Music Theory 101 + organization: '100000000000000000000002' + owner: '100000000000000000000003' + enrollmentCode: jm447ear + theme: blue-8 + assignmentsCount: 10 + googleClassroom: + id: '00000000' + alternateLink: http://classroom.google.com/c/music-theory + microsoftGraph: + id: 00000000-0000-0000-0000-000000000000 + googleDrive: + teacherFolderAlternateLink: https://drive.google.com/drive/folders/0B-0000000000000000 + teacherFolderId: 0B-0000000000000000 + lti: + contextId: '042' + contextLabel: MUSIC + contextTitle: Music Theory 101 + canvas: + id: '000000000' + ClassAttachmentCreation: + type: object + properties: + type: + type: string + description: | + The type of the attachment posted: + * `rich`, `photo`, `video` are attachment types that are automatically resolved from a `link` attachment. + * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. + enum: + - rich + - photo + - video + - link + - flat + - googleDrive + - worksheet + score: type: string - description: Last name of the user - email: + description: | + A unique Flat score identifier. The user creating the assignment must at least have read access to the document. If the user has admin rights, new group permissions will be automatically added for the + teachers and students of the class. + worksheet: type: string - description: Email of the account - format: email - description: User update as an organization admin - UserAzureDetails: - type: object - properties: - oid: + description: An unique worksheet identifier + revision: type: string - description: User object identifier on Azure AD - hd: + description: An unique revision identifier of a score + partUuid: type: string - description: User tenant (domain name) - preferredUsername: + description: The UUID of the instrument part selected for this attachment (for performance submissions) + sharingMode: + $ref: '#/components/schemas/MediaScoreSharingMode' + lockScoreTemplate: + type: boolean + description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. + url: type: string - description: User Preferred Username (UPN), i.e. the main email of the user - UserDetails: - description: User details - allOf: - - $ref: '#/components/schemas/UserPublic' - - type: object - properties: - azureDetails: - $ref: '#/components/schemas/UserAzureDetails' - privateProfile: - type: boolean - description: Tell either this user profile is private or not (individual accounts only) - locale: - $ref: '#/components/schemas/FlatLocales' - groups: - description: For Flat for Education accounts, list of Group identifiers the user is part of. - type: array - items: - type: string - description: Unique group identifier - pictureFile: - type: string - nullable: true - description: The ID of the user profile picture - coverPictureFile: - type: string - nullable: true - description: The ID of the user profile cover picture - UserSigninLinkCreation: - type: object - properties: - destinationPath: + description: The URL of the attachment. + googleDriveFileId: type: string - description: Path to redirect to after signin - default: / + description: The ID of the Google Drive File + teacherOnly: + type: boolean + description: Flag indicating if this attachment should only be visible to teachers + default: false + description: | + Attachment creation for an assignment or stream post. + This attachment must contain a `score` or an `url`, all the details of this one will be resolved and returned as `ClassAttachment` once the assignment or stream post is created. example: - destinationPath: /class - UserSigninLink: + type: flat + score: '000000000000000001' + sharingMode: copy + ClassGradeLevel: + type: string + description: Class grade level + enum: + - elementary + - middle + - high + - university + - other + EduResourceUseInClass: + description: Use an education resource in class type: object + required: + - classroom properties: - url: + classroom: type: string - description: URL to use to sign in to this account - expirationDate: + description: The destination classroom where the resource will be copied. + assignment: type: string - description: Date when the link expires - format: date-time - example: - url: https://demo.flat.io/auth/signin-link/00000000-0000-0000-0000-000000000000?next=%2F - expirationDate: 2022-01-01T00:00:00Z - Group: + description: An optional destination assignment where the original assignement will be copied. Must be a draft. + MicrosoftGraphAssignment: type: object + description: A Microsoft Teams assignment properties: id: type: string - description: The unique identifier of the group - name: - type: string - description: The display name of the group - type: + description: Identifier of the assignment assigned by Microsoft Teams + state: type: string description: | - The type of the group: - * `generic`: A group created by a Flat user - * `classTeachers`: A group created automaticaly by Flat that contains - the teachers of a class - * `classStudents`: A group created automaticaly by Flat that contains - the studnets of a class + State of the assignment on Microsoft Teams. + + * `draft`: Assignment is in draft mode + * `scheduled`: Assignment is scheduled to be published at a future date + * `published`: Assignment has been published to students + * `assigned`: Assignment has been assigned (legacy status) + * `inactive`: Assignment is inactive enum: - - generic - - classTeachers - - classStudents - usersCount: - type: number - description: The number of users in this group - readOnly: - type: boolean - description: | - `True` if the group is set in read-only - organization: + - draft + - scheduled + - published + - assigned + - inactive + alternateLink: type: string - description: | - If the group is related to an organization, this field will contain - the unique identifier of the organization - creationDate: + description: Absolute link to this assignment in the Microsoft Teams web UI + assignDateTime: type: string - description: The creation date of the group format: date-time - description: A group of users - example: - id: '0000000000000000000000043' - name: 5th grade - type: classTeachers - userCount: 24 - readOnly: true - organization: '0000000000000000000000042' - creationDate: 2015-01-19T00:22:02.387000Z - ResourceRights: - type: object - required: - - aclRead - - aclWrite - - aclAdmin - properties: - aclRead: - type: boolean - default: false - description: | - `True` if the current user can read the current document - aclWrite: - type: boolean - default: false description: | - `True` if the current user can modify the current document. + The date when the assignment will become active on Microsoft Teams. - If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. - aclAdmin: - type: boolean - default: false + If set to a future date, the assignment will have status `scheduled` and won't be visible to students until this date. + categories: + type: array + description: List of categories where this assignment is published under + items: + type: string + description: A Microsoft Teams assignment category ID + assignToType: + type: string description: | - `True` if the current user can manage the current document (i.e. share, delete) + Recipient configuration for this assignment on Microsoft Teams. - If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. - isCollaborator: - type: boolean - default: false - description: | - `True` if the current user is a collaborator of the current document (direct or via group). - collaboratorType: - type: string - enum: [owner, user, group] + * `class`: Assignment is visible to all students in the class + * `individual`: Assignment is visible only to specific assigned students + enum: + - class + - individual + assignedStudentsMsIds: + type: array description: | - The type of the collaborator for the resource - description: The rights of the current user on a score or collection - example: - aclRead: true - aclWrite: true - aclAdmin: true - isCollaborator: true - ResourceCollaborator: - description: | - A collaborator of a score. The `userEmail` and `group` are only available if the requesting user is a collaborator of the related score (in this case these permissions will eventualy not be listed and exposed publicly). - allOf: - - $ref: '#/components/schemas/ResourceRights' - - type: object - properties: - id: - type: string - description: The unique identifier of the permission - date: - type: string - format: date-time - description: The date when the permission was added - score: - type: string - description: If this object is a permission of a score, this property will contain the unique identifier of the score - collection: - type: string - description: If this object is a permission of a collection, this property will contain the unique identifier of the collection - user: - $ref: '#/components/schemas/UserPublic' - group: - $ref: '#/components/schemas/Group' - userEmail: + When assignToType is 'individual', array of Microsoft Azure user IDs of students assigned to this assignment. + These are the students who can see and submit to this assignment on Teams. + items: type: string - description: | - If the collaborator is not a user of Flat yet, this field will contain their email. - invited: - type: boolean - description: | - If this property is `true`, this is still a pending invitation - ResourceCollaboratorCreation: + example: + id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda + state: scheduled + alternateLink: https://teams.microsoft.com/l/entity + assignDateTime: 2025-10-20T09:00:00Z + categories: + - 0a012acd-6e78-4cd0-89a9-80d296e48f82 + GoogleClassroomCoursework: type: object properties: - user: + id: type: string - description: The unique identifier of a Flat user - group: + description: Identifier of the coursework assigned by Classroom + state: type: string - description: The unique identifier of a Flat group - userEmail: + description: State of the coursework + alternateLink: type: string - description: | - Fill this field to invite an individual user by email. - userToken: + description: Absolute link to this coursework in the Classroom web UI + topicId: type: string - description: | - Token received in an invitation to join the score. - aclRead: - type: boolean - description: | - `True` if the related user can read the score. (probably true if the user has a permission on the document). - default: true - aclWrite: - type: boolean - description: | - `True` if the related user can modify the score. - default: false - aclAdmin: - type: boolean - description: | - `True` if the related user can can manage the current document, i.e. changing the document permissions and deleting the document - default: false - description: Add a collaborator to a resource. - example: - userEmail: jdoe@flat.io - aclRead: true - aclWrite: true - aclAdmin: false - ScoreSummary: + nullable: true + description: Identifier of the topic where the assignment is created + description: A coursework on Google Classroom + example: + id: '1235665432' + state: draft + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/detail + GoogleClassroomSubmission: type: object required: - id - - title - - privacy - - user - - htmlUrl + - state + - alternateLink properties: id: type: string - description: The unique identifier of the score - sharingKey: - type: string - description: The private sharing key of the score (available when the `privacy` mode is set to `privateLink`) - title: + description: Identifier of the coursework submission assigned by Classroom + state: type: string - description: The title of the score - privacy: - $ref: '#/components/schemas/ScorePrivacy' - user: - $ref: '#/components/schemas/UserPublic' - htmlUrl: + description: State of the submission on Google Classroom + alternateLink: type: string - description: The url where the score can be viewed in a web browser - format: url - description: A summary of the score details + description: Absolute link to this coursework in the Classroom web UI + description: A coursework submission on Google Classroom example: - id: '000000000000000000000000' - title: My score - privacy: private - user: - id: '000000000000000000000001' - username: flat - name: Flat Team - printableName: Flat Team - picture: https://flat.io/img/logo_flat.svg - htmlUrl: https://flat.io/score/000000000000000000000000 - ScoreLicense: - type: string - nullable: true - description: | - License of the creation. Read more about the Creative Commons licenses on https://creativecommons.org/licenses/ - enum: - - copyright - - cc0 - - cc-by - - cc-by-sa - - cc-by-nd - - cc-by-nc - - cc-by-nc-sa - - cc-by-nc-nd - - null - ScoreCreationType: - type: string - nullable: true - description: The type of creation (an orginal, an arrangement) - enum: - - original - - arrangement - - other - - null - ScoreDetails: - description: The score and all its details - allOf: - - $ref: '#/components/schemas/ScoreSummary' - - type: object - required: - - creationDate - - collaborators - - instruments - - instrumentsNames - - samples - - editHtmlUrl - properties: - editHtmlUrl: - type: string - description: The url where the score can be edited in a web browser - format: url - subtitle: - type: string - description: Subtitle of the score - lyricist: - type: string - description: Lyricist of the score - arranger: - type: string - description: Arranger of the score - composer: - type: string - description: Composer of the score - description: - type: string - description: Description of the creation - tags: - type: array - description: Tags describing the score - items: - pattern: ^[a-zA-Z0-9]{1,30}$ - type: string - creationType: - $ref: '#/components/schemas/ScoreCreationType' - license: - $ref: '#/components/schemas/ScoreLicense' - licenseText: - type: string - description: Additional license text written on the exported/printed score - durationTime: - type: number - description: In seconds, an approximative duration of the score - numberMeasures: - type: integer - description: The number of measures in the score - mainTempoQpm: - type: number - description: The main tempo of the score (in QPM) - mainKeySignature: - type: number - description: The main key signature of the score (expressed between -7 and 7). - rights: - $ref: '#/components/schemas/ResourceRights' - collaborators: - type: array - description: The list of the collaborators of the score - items: - $ref: '#/components/schemas/ResourceCollaborator' - creationDate: - type: string - description: The date when the score was created - format: date-time - modificationDate: - type: string - description: The date of the last revision of the score - format: date-time - publicationDate: - type: string - description: The date when the score was published on Flat - format: date-time - scheduledDeletionDate: - type: string - description: | - The date when the score will be definitively deleted. - This date can be in the past if the score will be deleted at the next deletion batch, in this case you can display something like "Deleted shortly". - - Schedule: - - * For all paying users, the scores will be definitively deleted after 90 days. - * For free users, the scores are no longer available after 24 hours, an can be restored with a paying account up to 90 days. - format: date-time - highlightedDate: - type: string - description: The date when the score was highlighted (featured) on our community - format: date-time - organization: - type: string - description: | - If the score has been created in an organization, the identifier of this organization. This property is especially used with the score privacy `organizationPublic`. - parentScore: - type: string - description: | - If the score has been forked, the unique identifier of the parent score. - instruments: - type: array - items: - type: string - description: | - An array of the instrument identifiers used in the last version of the score. - This is mainly used to display a list of the instruments in the Flat's UI or instruments icons. - The format of the strings is `{instrument-group}.{instrument-id}`. - instrumentsNames: - type: array - items: - type: string - description: | - An array of the instrument names used in the last version of the score. - This list is localized and ready-to-display and will match the indexes from the `instruments` list. - samples: - type: array - items: - type: string - description: | - An array of the audio samples identifiers used the different score parts. - The format of the strings is `{instrument-group}.{sample-id}`. - googleDriveFileId: - type: string - description: | - If the user uses Google Drive and the score exists on Google Drive, this field will contain the unique identifier of the Flat score on Google Drive. You can access the document using the url: `https://drive.google.com/open?id={googleDriveFileId}` - likes: - $ref: '#/components/schemas/ScoreLikesCounts' - comments: - $ref: '#/components/schemas/ScoreCommentsCounts' - views: - $ref: '#/components/schemas/ScoreViewsCounts' - plays: - $ref: '#/components/schemas/ScorePlaysCounts' - collections: - type: array - description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. - items: - type: string - ScorePrivacy: + id: CgsI-00000000000 + state: turned_in + alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission + ClassState: type: string - default: private - description: | - The score main privacy mode. - - - `public`: The score is public on the Internet. This one can be accessible at the url `https://flat.io/score/{score}` and can be modified and administred by specified collaborators users. - - `private`: The score is private and can be only accessed, modified and administred by specified collaborators users. - - `privateLink`: The score is private but can be accessed using a private link `htmlUrl` or the private key in the property `sharingKey`. - - `organizationPublic`: _Available only with [Flat for Education](https://flat.io/edu)._ The score is public in the organization: users of the same organization can access to this one. The score can be modified and administred by specified collaborators users. - - The score can also be individually shared to a set of users or groups using the different collaborators API methods. - - When a file is synchronized from an external source (e.g. Google Drive) and the sharing options are changed on the source, Flat will chose the best privacy mode for the file. - - When using a [Flat for Education](https://flat.io/edu) account, some of the modes may not be available if disabled by an administrator of the organization (e.g. by default the `public` mode is not available). + description: The state of a classroom enum: - - public - - private - - organizationPublic - - privateLink - ScoreTrack: + - active + - inactive + - archived + - deleted + Collection: type: object required: - id - - state - - score - - creator - - default + - title + - htmlUrl - type + - privacy - creationDate - - modificationDate - - purpose + - capabilities + - contents properties: id: type: string - description: The unique identifier of the score track + description: Unique identifier of the collection title: type: string - description: Title of the track - score: + description: The title of the collection + htmlUrl: type: string - description: The unique identifier of the score - creator: + description: The url where the collection can be viewed in a web browser + format: url + type: + $ref: '#/components/schemas/CollectionType' + labelKey: type: string - description: The unique identifier of the track creator + description: | + Product-specific translation key for the collection type. + + Only set for specific collection types: + * For `regular` type: `playlist` (Flat) or `collection` (Flat for Education) + * For `collaborations` type: `collaboration` (Flat) or `shared-scores` (Flat for Education) + + Not set for other collection types. + privacy: + $ref: '#/components/schemas/CollectionPrivacy' + sharingKey: + type: string + description: The private sharing key of the collection (available when the `privacy` mode is set to `privateLink`) + app: + $ref: '#/components/schemas/CollectionApp' creationDate: type: string - description: The creation date of the track + description: The date when the collection was created format: date-time modificationDate: type: string - description: The modification date of the track + description: The date when the collection was last modified format: date-time - default: - type: boolean - description: True if the track should be used as default audio source - state: - $ref: '#/components/schemas/ScoreTrackState' - type: - $ref: '#/components/schemas/ScoreTrackType' - purpose: - $ref: '#/components/schemas/ScoreTrackPurpose' - url: - type: string - description: The URL of the track - mediaId: + user: + $ref: '#/components/schemas/UserPublicSummary' + organization: type: string description: | - The unique identifier of the track when hosted on an external service. - For example, if the url is `https://www.youtube.com/watch?v=dQw4w9WgXcQ`, `mediaId` will be `dQw4w9WgXcQ` - synchronizationPoints: + If the score has been created in an organization, the identifier of this organization. + rights: + $ref: '#/components/schemas/ResourceRights' + collaborators: type: array + description: The list of the collaborators of the collection items: - $ref: '#/components/schemas/ScoreTrackPoint' - description: An audio track for a score - example: - id: 59ecb20e563736b1e1f75dce - title: Rick Astley - Never Gonna Give You Up - type: youtube - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ - mediaId: dQw4w9WgXcQ - creationDate: 2017-10-22T14:58:22.753000Z - modificationDate: 2017-10-22T14:58:33.424000Z - default: true - state: completed - creator: 5815d4b53269d90d2c80b71c - score: 59a29d96f35a6411d7508bdd - synchronizationPoints: - - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - - type: end - time: 213 - ScoreTrackCreation: + $ref: '#/components/schemas/ResourceCollaborator' + isPinned: + type: boolean + description: Whether the collection is pinned by the owner + contents: + type: object + description: The contents of the collection + required: + - scoresCount + properties: + scoresCount: + type: integer + description: The number of scores in the collection + capabilities: + type: object + required: + - canEdit + - canShare + - canDelete + - canAddScores + - canDeleteScores + properties: + canEdit: + type: boolean + description: | + Whether the current user can modify the metadata for the collection + canShare: + type: boolean + description: | + Whether the current user can modify the sharing settings for the collection + canDelete: + type: boolean + description: | + Whether the current user can delete the collection + canAddScores: + type: boolean + description: | + Whether the current user can add scores to the collection + + If this collection has the `type` `trash`, this property will be set to `false`. Use `DELETE /v2/scores/{score}` to trash a score. + canDeleteScores: + type: boolean + description: | + Whether the current user can delete scores from the collection + + If this collection has the `type` `trash`, this property will be set to `false`. Use `POST /v2/scores/{score}/untrash` to restore a score. + description: Capabilities the current user has on this collection. Each capability corresponds to a fine-grained action that a user may take. + collections: + type: array + description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. + items: + type: string + description: Collection of scores + CollectionCreation: type: object properties: title: + maxLength: 300 + minLength: 1 type: string - description: Title of the track - default: - type: boolean - description: True if the track should be used as default audio source - state: - $ref: '#/components/schemas/ScoreTrackState' - purpose: - $ref: '#/components/schemas/ScoreTrackPurpose' - url: - type: string - description: The URL of the track - synchronizationPoints: - type: array - items: - $ref: '#/components/schemas/ScoreTrackPoint' - description: | - Creation of a new track. This one must contain the URL of the track or the corresponding file + description: The title of the collection + privacy: + $ref: '#/components/schemas/CollectionPrivacy' example: - title: Rick Astley - Never Gonna Give You Up - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ - default: true - state: draft - synchronizationPoints: - - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - - type: end - time: 213 - ScoreTrackUpdate: + title: Jazz scores + privacy: private + CollectionModification: type: object properties: title: + maxLength: 300 + minLength: 1 type: string - description: Title of the track - default: - type: boolean - description: True if the track should be used as default audio source - state: - $ref: '#/components/schemas/ScoreTrackState' - purpose: - $ref: '#/components/schemas/ScoreTrackPurpose' - synchronizationPoints: - type: array - items: - $ref: '#/components/schemas/ScoreTrackPoint' + description: The title of the collection + privacy: + $ref: '#/components/schemas/CollectionPrivacy' + description: Edit the collection metadata + CollectionType: + type: string description: | - Update an existing track. + Type of the collection. + The type will influence the capabilitied available on the collections and how this collection is/can be populated. + + - `root`: **Deprecated.** Previously the root collection of the user. The `allScores` virtual collection should be used instead. + - `regular`: A regular collection created by the user. This collection can be deleted and modified by the user. + - `app`: An automatically created collection containing the scores created by an app (e.g. Music Snippet) + - `trash`: An automatically created collection containing the trashed scores. + + Virtual collections: + + - `allScores`: All the scores contained in the user account + - `collaborations`: All shared scores by the user or someone else + - `likes`: Liked scores + enum: + - root + - regular + - app + - trash + - allScores + - collaborations + - likes + CollectionPrivacy: + type: string + default: private + description: | + The collection main privacy mode. + + - `private`: The collection is private and can only be accessed, modified, and administered by specified collaborators. + enum: + - private + CollectionApp: + type: object + description: For App collections, the details of the app that created the collection + properties: + id: + type: string + description: The app unique identifier + name: + type: string + description: The name of the app + logo: + type: string + description: The app logo url + FlatLocalesString: + type: string + description: | + The user language. Input values will be automatically normalized to a supported locale code. Unknown locales will default to `en`. + + Current supported locales include: `da`, `de`, `en`, `en-GB`, `es`, `fi`, `fil`, `fr`, `fr-CA`, `hi`, `id`, `it`, `ja`, `ja-HIRA`, `ko`, `ms`, `nb`, `nl`, `pl`, `pt`, `pt-BR`, `ro`, `ru`, `sv`, `tr`, `zh-Hans`, `zh-HK`, `zh-TW` + default: en + ScoreTrackCreationResponse: + type: object + required: + - track + properties: + track: + $ref: '#/components/schemas/ScoreTrack' + description: Response for track creation including optional upload information + AssignmentCopyResponse: + allOf: + - $ref: '#/components/schemas/Assignment' + - type: object + properties: + resource: + type: string + description: If this assignment is stored as a resource in the Flat for Education Resource Library, the unique identifier of the resource. + FlatErrorResponse: + description: An API Error response + type: object + required: + - code + - message + properties: + code: + type: string + description: A corresponding code for this error + message: + type: string + description: A printable message for this error + id: + type: string + description: An unique error identifier generated for the request + param: + type: string + description: The related parameter that caused the error example: - title: Rick Astley - Never Gonna Give You Up - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ - default: true - state: draft - synchronizationPoints: - - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - - type: end - time: 213 - ScoreTrackPoint: + code: CLIENT_ERROR + message: Invalid request + id: '123456789' + EduSkillsFocused: + type: array + description: Specific skills that will be focused in classroom + items: + type: string + enum: + - notation + - sight-reading + - performance-instrumental + - ear-training + - music-theory + - composition + - jazz-ensemble + - music-technology + - other + EduLibrary: + description: A Flat for Education Library + type: object required: - - time + - id + - name - type - type: object + - visibility properties: + id: + type: string + description: | + Unique identifier of the library. + + This one can be used to list the underlying resources using + `GET /v2/eduResources?parent={library-id}` + name: + type: string + description: Name of the lirbary type: type: string - description: The type of the synchronization point. If the type is `measure`, the measure uuid must be present in `measureUuid` + description: Type of the library enum: - - measure - - end - measureUuid: + - myResources + - organizationResources + - flatEduContent + visibility: + description: Visibility of the library type: string - description: The measure unique identifier - format: uuid - time: - type: number - description: The corresponding time in seconds - description: A track synchronization point + enum: + - private + - organization + - public example: - type: measure - time: 0 - measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c - ScoreTrackType: - type: string - description: The type of an audio track - enum: - - audio - - soundcloud - - youtube - - vimeo - ScoreTrackPurpose: - type: string - description: The purpose of the audio track - default: common - enum: - - common - - performanceSubmission - ScoreTrackState: + id: root + name: My resources + visibility: private + EduResourcePrivacy: type: string - description: State of the track - default: draft - enum: - - draft - - completed - - deleted - ScoreLikesCounts: - type: object - properties: - total: - type: number - description: The total number of likes of the score - weekly: - type: number - description: The number of new likes during the last week - monthly: - type: number - description: The number of new likes during the last month - description: | - A computed version of the weekly, monthly and total of number of likes - for a score - example: - total: 42 - weekly: 10 - monthly: 30 - ScoreCommentsCounts: - type: object - properties: - total: - type: number - description: The total number of comments added to the score - unique: - type: number - description: The unique (1/user) number of comments added to the score - weekly: - type: number - description: The weekly unique number of comments added to the score - monthly: - type: number - description: The monthly unique number of comments added to the score - description: | - A computed version of the total, unique, weekly and monthly number of - comments added on the documents (this doesn't include inline comments). - example: - total: 42 - unique: 35 - weekly: 10 - monthly: 30 - ScoreViewsCounts: - type: object - properties: - total: - type: number - description: The total number of views of the score - weekly: - type: number - description: The weekly number of views of the score - monthly: - type: number - description: The monthly number of views of the score - description: | - A computed version of the total, weekly, and monthly number of views of - the score - example: - total: 42 - weekly: 10 - monthly: 30 - ScorePlaysCounts: - type: object - properties: - total: - type: number - description: The total number of plays of the score - weekly: - type: number - description: The weekly number of plays of the score - monthly: - type: number - description: The monthly number of plays of the score description: | - A computed version of the total, weekly, and monthly number of plays of - the score - example: - total: 42 - weekly: 10 - monthly: 30 - ScoreRevisionStatistics: + The Education resource privacy mode. + default: private + enum: + - private + - organizationPublic + - public + EduResource: + description: A Flat for Education resource contained in a resources library type: object + required: + - id + - type + - title + - capabilities properties: - additions: - type: number - description: The number of additions operations in the last revision - deletions: - type: number - description: The number of deletions operations in the last revision - startDate: + id: + type: string + description: Resource unique identifier + creator: + type: string + description: The User identifier of the resource creator + type: + $ref: '#/components/schemas/EduResourceType' + privacy: + $ref: '#/components/schemas/EduResourcePrivacy' + tags: + type: array + description: Specific attributes for the resource (e.g. sample resources with custom design) + items: + type: string + parent: + type: string + description: Identifier of the parent resource, e.g. a folder or root + title: + type: string + description: Title of the resource + sharingDescription: + type: string + description: Sharing description of this resource + sharingDescriptionHtml: + type: string + description: | + HTML version of sharing description with rich text formatting. + + Supports safe HTML tags: p, br, strong, b, em, i, u, a. + creationDate: type: string format: date-time - description: The date of the first action included in this revision - endDate: + description: The date when the resource was created + updateDate: type: string format: date-time - description: The date of the latest action included in this revision - description: | - The statistics related to the score revision (additions and deletions) - example: - additions: 24 - deletions: 5 - ScoreSource: + description: The date when the resource was updated + resource: + oneOf: + - $ref: '#/components/schemas/Assignment' + - $ref: '#/components/schemas/EduResourceFolder' + capabilities: + description: Capabilities available for this resource + type: object + properties: + canEdit: + type: boolean + description: | + Whether the current user can modify this resource + canAddResources: + type: boolean + description: | + Whether the current user can add resources within this resource (e.g. `assignment` inside a `folder`) + canAddFolders: + type: boolean + description: | + Whether the current user can add folders within this resource (e.g. `folder` inside `root`) + canChangePrivacy: + type: boolean + description: | + Whether the current user can change the privacy of this resource (e.g. to share as `organizationPublic` or unshare it with `private`) + subjects: + $ref: '#/components/schemas/EduResourceSubjects' + grades: + $ref: '#/components/schemas/EduResourceGrades' + EduResourceCreation: + description: Creation of an education resource + type: object + required: + - type + - title + properties: + type: + $ref: '#/components/schemas/EduResourceType' + title: + type: string + description: Title of the resource + maxLength: 1000 + minLength: 1 + parent: + type: string + default: root + description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` + sharingDescription: + type: string + description: Sharing description of the resource + maxLength: 400 + sharingDescriptionHtml: + type: string + description: | + HTML version of sharing description with rich text formatting. + + Supports safe HTML tags: p, br, strong, b, em, i, u, a. + maxLength: 10000 + resource: + $ref: '#/components/schemas/EduResourceAssignmentCreation' + EduResourceAssignmentCreation: + description: | + Assignment-specific creation options. + Only applicable when creating a resource with `type: assignment`. + If `type` is not provided, defaults to `none`. type: object properties: - googleDrive: - type: string - description: | - If the score is a file on Google Drive, this field property must contain its identifier. To use this method, the Drive file must be public or the Flat Drive App must have access to the file. - example: - googleDrive: 0B-0000000000000001 - ScoreCreation: - oneOf: - - $ref: '#/components/schemas/ScoreCreationBuilderData' - - $ref: '#/components/schemas/ScoreCreationFileImport' - - $ref: '#/components/schemas/ScoreCreationGoogleDriveImport' - ScoreCreationCommon: + type: + $ref: '#/components/schemas/AssignmentType' + EduResourceUpdate: + description: Update of an education resource type: object properties: title: + type: string + description: Title of the resource + maxLength: 1000 + minLength: 1 + sharingDescription: + type: string + description: Sharing description of the resource + maxLength: 400 + sharingDescriptionHtml: type: string description: | - The title of the new score. If the title is too long, the API may trim this one. + HTML version of sharing description with rich text formatting. - If this title is not specified, the API will try to (in this order): - - Use the title contained in the file (e.g. [`movement-title`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-movement-title.htm) or [`credit-words`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-credit-words.htm) for [MusicXML](http://www.musicxml.com/) files). - - Use the name of the file for files from a specified `source` (e.g. Google Drive) or the one in the `filename` property - - Set a default title (e.g. "New Music Score") + Supports safe HTML tags: p, br, strong, b, em, i, u, a. + maxLength: 10000 privacy: - $ref: '#/components/schemas/ScorePrivacy' - collection: + $ref: '#/components/schemas/EduResourcePrivacy' + subjects: + $ref: '#/components/schemas/EduResourceSubjects' + grades: + $ref: '#/components/schemas/EduResourceGrades' + EduResourceType: + description: Type of an education resource + type: string + enum: + - assignment + - folder + EduResourceFolder: + description: Education resources folder + type: object + properties: + title: type: string - description: | - Unique identifier of a collection where the score will be created. - If no collection identifier is provided, the score will be stored in the `root` directory. - googleDriveFolder: + description: Title of the folder + assignmentsTypes: + description: The assignment type of the resources that are included in the folder, + type: array + items: + $ref: '#/components/schemas/AssignmentType' + resourcesCount: + description: The number of resources inside the folder + type: number + EduResourceMove: + description: Move an education resource + type: object + required: + - destination + properties: + destination: type: string description: | - If the user uses Google Drive and this properties is specified, the file will be created in this directory. The currently user creating the file must be granted to write in this directory. - ScoreCreationFileImport: - allOf: - - $ref: '#/components/schemas/ScoreCreationCommon' - - type: object - required: - - data - properties: - filename: - type: string - description: If this is an imported file, its filename - data: - type: string - description: | - The data of the score file. It must be a MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`) or a Flat.json (aka Adagio.json) file. - Binary payloads (`vnd.recordare.musicxml` and `audio/midi`) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. - dataEncoding: - type: string - description: The optional encoding of the score data. This property must match the encoding used for the `data` property. - enum: - - base64 - description: A newly created score from an imported file - example: - title: My new score - privacy: private - data: ...[Your actual file will be provided in this property]... - ScoreCreationGoogleDriveImport: - allOf: - - $ref: '#/components/schemas/ScoreCreationCommon' - - type: object - required: - - source - properties: - source: - $ref: '#/components/schemas/ScoreSource' - description: A newly created score from a file from Google Drive - example: - title: My new score - privacy: private - source: - googleDrive: 0B-0000000000000001 - ScoreCreationBuilderData: - allOf: - - $ref: '#/components/schemas/ScoreCreationCommon' - - type: object - required: - - title - - builderData - properties: - builderData: - type: object - required: - - scoreData - properties: - scoreData: - required: - - instruments - type: object - properties: - useTabStaff: - type: boolean - description: true if the TAB staff is displayed with fretted instruments - useChordGrid: - type: boolean - description: true if the chord grid must be displayed with fretted instruments - fifths: - type: number - description: The key signature of the score (expressed between -7 and 7). Major C is used when the value is not provided. - nbBeats: - type: number - description: The number of beats in the measure - beatType: - type: number - description: The duration of a beat in the measure - instruments: - type: array - description: | - The list of instruments to add to the score. - See https://prod.flat-cdn.com/fixtures/instruments_en.json for the possible values for `group` and `instrument`. - items: - required: - - group - - instrument - type: object - properties: - group: - type: string - description: The of the instrument group (e.g. `keyboards`, `brass`) - instrument: - type: string - description: The identifier of the instrument (e.g. `piano`, `trumpet`) - longName: - type: string - description: The full name of the instrument - shortName: - type: string - description: The abbreviation of the name of the instrument - hasQuarterTone: - type: boolean - description: True if the part can use quarter tone (prevent the part to have a TAB/chord grid) - layoutData: - type: object - description: Control the appearance of the score. If missing, default values are used. - properties: - notesSpacingCoeff: - type: number - description: A float value >= 1 that controls the spacing between notes. - lengthUnit: - description: The unit to use for layout customizations - type: string - default: cm - enum: - - cm - - inch - pageHeight: - type: number - description: The height of the page in chosen unit (`lengthUnit`). - pageWidth: - type: number - description: The width of the page in chosen unit (`lengthUnit`). - pageMarginTop: - type: number - description: The top margin of the page in chosen unit (`lengthUnit`). - pageMarginBottom: - type: number - description: The bottom margin of the page in chosen unit (`lengthUnit`). - pageMarginLeft: - type: number - description: The left margin of the page in chosen unit (`lengthUnit`). - pageMarginRight: - type: number - description: The right margin of the page in chosen unit (`lengthUnit`). - example: - title: Violin and Piano - privacy: private - builderData: - scoreData: - fifths: 8 - nbBeats: 2 - beatType: 4 - instruments: - - group: strings - instrument: hq-violin - - group: strings - instrument: hq-grand-piano - shortName: Pno. - longName: Super Piano - layoutData: - notesSpacingCoeff: 2 - lengthUnit: cm - pageHeight: 29.7 - pageWidth: 21 - pageMarginTop: 1.5 - pageMarginBottom: 1.5 - pageMarginLeft: 2.5 - pageMarginRight: 2.5 - ScoreFork: + Unique identifier of the destination of the folder where to move this resource. + This can also be `root` to move the resource at the root of the user resource library. + EduResourceCopy: + description: Copy an education resource type: object + required: + - destination properties: - collection: + destination: type: string - default: root - nullable: true - description: | - Unique identifier of a collection where the score will be copied. - If no collection identifier is provided, the score will be stored in the `root` directory. - If null is provided, the score won't be added to any collections - googleDriveDisabled: - type: boolean - default: false - description: | - If set to `true`, the API won't create the score on Google Drive - keepOriginalTitle: - type: boolean description: | - Option to keep the original title of the score (i.e. don't prepend it with "Copy of ", or add the student name in assignment usage). - description: Options to fork the score - ScoreModification: + Unique identifier of the destination of the folder where to copy this resource. + This can also be `root` to copy the resource at the root of the user resource library. + EduResourceLtiLink: + description: LTI Link details for the class + type: object + required: + - ltiUrl + properties: + ltiUrl: + type: string + description: An URL that can be used to launch LTI with this resource in a classroom. + EduResourceSubjects: + description: The subjects of this resource, or the subjects of the resources included in the folder + type: array + items: + $ref: '#/components/schemas/TeachingTheme' + EduResourceGrades: + description: The grades of this resource, or the grades of the resources included in the folder. + type: array + items: + $ref: '#/components/schemas/Grade' + GroupCreation: type: object properties: - title: - type: string - description: The title of the score - subtitle: - type: string - nullable: true - description: The subtitle of the score - composer: - type: string - nullable: true - description: The composer of the score - lyricist: - type: string - nullable: true - description: The lyricist of the score - arranger: + type: type: string - nullable: true - description: The arranger of the score - privacy: - $ref: '#/components/schemas/ScorePrivacy' - sharingKey: - pattern: ^[a-f0-9]{128}$ + enum: + - classStudentsSubGroup + description: Type of group (currently only classStudentsSubGroup is supported) + classroom: type: string - description: When using the `privacy` mode `privateLink`, this property can be used to set a custom sharing key, otherwise a new key will be generated. - description: + description: Classroom ID + name: type: string - maxLength: 2000 - nullable: true - description: Description of the creation - tags: + description: | + Name of the group (optional - auto-generated if not provided). + + **Special names:** + + * `edu:testing-students`: Creates a group tagged for test student accounts. The display name will be localized (e.g., "Test Students") and the group will be tagged with `edu:testing-students`. + members: type: array - description: Tags describing the score + description: Array of student IDs to add to the group items: type: string - creationType: - $ref: '#/components/schemas/ScoreCreationType' - license: - $ref: '#/components/schemas/ScoreLicense' - licenseText: + required: + - type + - classroom + Group: + type: object + properties: + id: type: string - nullable: true - description: The rights info written on the score - description: Edit the score metadata + description: The unique identifier of the group + name: + type: string + description: The display name of the group + type: + $ref: '#/components/schemas/GroupType' + usersCount: + type: number + description: The number of users in this group + readOnly: + type: boolean + description: | + `True` if the group is set in read-only + organization: + type: string + description: | + If the group is related to an organization, this field will contain + the unique identifier of the organization + creationDate: + type: string + description: The creation date of the group + format: date-time + description: A group of users example: - privacy: private - Collection: + id: '0000000000000000000000043' + name: 5th grade + type: classTeachers + userCount: 24 + readOnly: true + organization: '0000000000000000000000042' + GroupDetails: type: object required: - id - - title - - htmlUrl + - name - type - - privacy - creationDate - - capabilities - - contents + - usersCount + - readOnly + - tags properties: id: type: string - description: Unique identifier of the collection - title: - type: string - description: The title of the collection - htmlUrl: + description: The unique identifier of the group + name: type: string - description: The url where the collection can be viewed in a web browser - format: url + description: The displayable name of the group type: - $ref: '#/components/schemas/CollectionType' - privacy: - $ref: '#/components/schemas/CollectionPrivacy' - sharingKey: + $ref: '#/components/schemas/GroupType' + organization: type: string - description: The private sharing key of the collection (available when the `privacy` mode is set to `privateLink`) - app: - $ref: '#/components/schemas/CollectionApp' + description: The unique identifier of the Organization owning the group + classroom: + type: string + description: The unique identifier of the classroom owning the group. Only available for groups of type 'classromStudentsSubGroup' or 'assignmentStudentsSubGroup' + assignment: + type: string + description: The unique identifier of the assignment owning the group. Only available for groups of type 'assignmentStudentsSubGroup'. + parent: + type: string + description: The unique identifier of the parent class group. Only available for groups of type 'assignmentStudentsSubGroup'. May be null if the parent class group was deleted. creationDate: type: string - description: The date when the collection was created + description: The date when the group was create format: date-time - user: - $ref: '#/components/schemas/UserPublicSummary' - organization: - type: string + usersCount: + type: number + description: The number of students in this group + readOnly: + type: boolean description: | - If the score has been created in an organization, the identifier of this organization. - rights: - $ref: '#/components/schemas/ResourceRights' - collaborators: + `true` if the properties and members of this group are in in read-only + tags: type: array - description: The list of the collaborators of the collection - items: - $ref: '#/components/schemas/ResourceCollaborator' - contents: - type: object - description: The contents of the collection - required: - - scoresCount - properties: - scoresCount: - type: integer - description: The number of scores in the collection - capabilities: - type: object - required: - - canEdit - - canShare - - canDelete - - canAddScores - - canDeleteScores - properties: - canEdit: - type: boolean - description: | - Whether the current user can modify the metadata for the collection - canShare: - type: boolean - description: | - Whether the current user can modify the sharing settings for the collection - canDelete: - type: boolean - description: | - Whether the current user can delete the collection - canAddScores: - type: boolean - description: | - Whether the current user can add scores to the collection - - If this collection has the `type` `trash`, this property will be set to `false`. Use `DELETE /v2/scores/{score}` to trash a score. - canDeleteScores: - type: boolean - description: | - Whether the current user can delete scores from the collection + description: | + Tags for categorizing groups. - If this collection has the `type` `trash`, this property will be set to `false`. Use `POST /v2/scores/{score}/untrash` to restore a score. - description: Capabilities the current user has on this collection. Each capability corresponds to a fine-grained action that a user may take. - collections: - type: array - description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. + * `edu:testing-students`: Marks this group as containing test student accounts items: type: string - description: Collection of scores - CollectionCreation: - type: object - properties: - title: - maxLength: 300 - minLength: 1 - type: string - description: The title of the collection - privacy: - $ref: '#/components/schemas/CollectionPrivacy' + description: The details of a group example: - title: Jazz scores - privacy: private - CollectionModification: + id: 58c4955c226ffff257211a00 + name: 5th Grade - Teachers + type: classTeachers + organization: '0000000000000000000000042' + usersCount: 2 + readOnly: false + GroupType: + type: string + description: | + The type of the group: + * `generic`: A group created by a Flat user + * `classTeachers`: A group created automaticaly by Flat that contains + the teachers of a class + * `classStudents`: A group created automaticaly by Flat that contains + the studnets of a class + * `classStudentsSubGroup`: Manually created sub-group of students of a class. + * `assignmentStudentsSubGroup`: Manually created Sub-group of students of a class, in relation to a specific assignment. + enum: + - generic + - classTeachers + - classStudents + - classStudentsSubGroup + - assignmentStudentsSubGroup + LtiCredentialsCreation: + required: + - lms + - name type: object properties: - title: + name: maxLength: 300 - minLength: 1 type: string - description: The title of the collection - privacy: - $ref: '#/components/schemas/CollectionPrivacy' - description: Edit the collection metadata - CollectionType: - type: string - description: | - Type of the collection. - The type will influence the capabilitied available on the collections and how this collection is/can be populated. - enum: - - root - - regular - - sharedWithMe - - sharedWithGroup - - app - - trash - CollectionPrivacy: - type: string - description: | - The collection main privacy mode. - - `private`: The collection is private and can be only accessed, modified and administred by specified collaborators users. - enum: - - private - CollectionApp: + description: Name of the couple of credentials + lms: + $ref: '#/components/schemas/LmsName' + description: Creation of a couple of LTI 1.x OAuth credentials + example: + name: My couple of credentials for Canvas + lms: canvas + LtiCredentials: type: object - description: For App collections, the details of the app that created the collection properties: id: type: string - description: The app unique identifier + description: The unique identifier of this couple of credentials name: type: string - description: The name of the app - logo: - type: string - description: The app logo url - ScoreRevision: - type: object - required: - - id - - score - - date - properties: - id: + description: Name of the couple of credentials + lms: + $ref: '#/components/schemas/LmsName' + organization: type: string - description: The unique identifier of the revision. - user: + description: The unique identifier of the Organization associated to these credentials + creator: type: string - description: The user identifier who created the revision - score: + description: Unique identifier of the user who created these credentials + creationDate: type: string - description: The score identifier - collaborators: - type: array - items: - type: string - description: | - The list of user identifier or collaborators who worked on this - revision. This is list is built from the history of the revision - specified during the creation of the revision. - date: + description: The creation date of thse credentials + format: date-time + lastUsage: type: string - description: The date when this revision was created + description: The last time these credentials were used format: date-time - event: + consumerKey: type: string - description: The last event (action id) of the revision - description: + description: OAuth 1 Consumer Key + consumerSecret: type: string - description: A description associated to the revision - autosave: + description: OAuth 1 Consumer Secret + enableEmailMatching: type: boolean + default: true description: | - True if this revision was automatically generated by Flat and not on - purpose by the user. - statistics: - $ref: '#/components/schemas/ScoreRevisionStatistics' - description: A score revision metadata + Enable email-based user matching during LTI authentication. + + When true (default): If a user with the same email exists in the organization, + they will be matched and logged in instead of creating a new account. + + When false: Email matching is disabled. Only LTI ID matching is used, which means + multiple LTI users can share the same email address and have separate Flat accounts. + This is useful for cases like siblings sharing a parent email in the LMS. + description: A couple of LTI 1.x OAuth credentials example: - user: '000000000000000000000020' - collaborators: - - '000000000000000000000010' - - '000000000000000000000020' - description: New revision - creationDate: 2017-01-26T20:29:10.622000Z - autosave: true - ScoreRevisionCreation: - required: - - data + id: 59368be5c66caf895ee02387 + name: My couple of credentials for Canvas + lms: canvas + organization: 5832c801a4bedc05f4fb4993 + creator: 5832bf149995c4024bd6de7d + consumerKey: 200082F5-FAFD-4C6E-BB19-7DAB5D6264D4 + consumerSecret: ABCDE1234 + enableEmailMatching: true + LtiConfiguration: + description: LTI configuration details (unified 1.1 and 1.3) + oneOf: + - $ref: '#/components/schemas/LtiConfiguration1p1' + - $ref: '#/components/schemas/LtiConfiguration1p3' + discriminator: + propertyName: ltiVersion + mapping: + 1p1: '#/components/schemas/LtiConfiguration1p1' + 1p3: '#/components/schemas/LtiConfiguration1p3' + LtiConfigurationBase: type: object properties: - data: + id: type: string - description: | - The data of the score file. It must be a MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`) or a Flat.json (aka Adagio.json) file. - Binary payloads (`vnd.recordare.musicxml` and `audio/midi`) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. - example: - dataEncoding: + description: Configuration ID + ltiVersion: type: string - description: The optional encoding of the score data. This property must match the encoding used for the `data` property. enum: - - base64 - autosave: - type: boolean - description: | - Must be set to `true` if the revision was created automatically. - description: + - 1p1 + - 1p3 + description: LTI version + organizationId: type: string - description: A description associated to the revision - description: A new created revision - example: - data: - history: - - id: b278ad43-2e99-4e60-a782-ac119b294ab8 - userId: '000000000000000000000010' - fnc: action.AddMeasure - args: - previousUuid: 888cb742-2110-a050-ba71-28300ba6d61f - measureUuid: 0be9f739-3213-f312-bb0a-00ad0c787ef7 - autosave: true - description: New revision - TaskExportOptions: - type: object - properties: - parts: - type: array - description: A list of parts to specifically export - items: - type: string - description: | - Options for the requested export - example: - parts: - - 49b7d7c5-7490-4f76-9813-607f79e5b92b - - 96b5066b-54ed-4c6b-b3fc-cb7281403a89 - ScoreCommentContext: - required: - - measureUuids - - partUuid - - startDpq - - startTimePos - - stopDpq - - stopTimePos - type: object - properties: - partUuid: + description: Organization ID + organizationName: type: string - description: The unique identifier (UUID) of the score part - staffIdx: - type: number - description: (Deprecated, use `staffUuid`) The identififer of the staff - staffUuid: + description: Organization name + creatorId: type: string - description: The unique identififer (UUID) of the staff - measureUuids: - type: array - description: The list of measure UUIds - items: - type: string - startTimePos: - type: number - stopTimePos: - type: number - startDpq: - type: number - stopDpq: - type: number - description: | - The context of the comment (for inline/contextualized comments). A context will include all the information related to the location of the comment (i.e. score parts, range of measure, time position). - example: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - ScoreCommentCreation: - required: - - comment - type: object - properties: - revision: + description: ID of the user who created this configuration + creationDate: type: string - description: | - The unique indentifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. - comment: + format: date-time + description: Configuration creation date + lastUsedDate: type: string - description: | - The comment text that can includes mentions using the following format: `@[id:username]`. - rawComment: + format: date-time + nullable: true + description: Last time this configuration was used + status: type: string - description: | - A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. - mentions: - type: array - description: The list of user identifiers mentioned in this comment - items: + description: Configuration status indicator + enum: + - ready-to-use + - in-use + - incomplete-setup + required: + - id + - ltiVersion + - creationDate + LtiConfiguration1p1: + allOf: + - $ref: '#/components/schemas/LtiConfigurationBase' + - type: object + properties: + ltiVersion: type: string - replyTo: - type: string - description: | - When the comment is a reply to another comment, the unique identifier of the parent comment - context: - $ref: '#/components/schemas/ScoreCommentContext' - description: Creation of a comment - example: - revision: '000000000000000000000010' - comment: '@[000000000000000000000000:flat] Great work!' - rawComment: '@flat: Great work!' - mentions: - - '000000000000000000000000' - replyTo: '000000000000000000000000' - context: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - ScoreCommentUpdate: - type: object - properties: - revision: - type: string - description: | - The unique indentifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. - comment: - maxLength: 10000 - minLength: 1 - type: string - description: | - The comment text that can includes mentions using the following format: `@[id:username]`. - rawComment: - maxLength: 10000 - minLength: 1 - type: string - description: | - A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. - context: - $ref: '#/components/schemas/ScoreCommentContext' - description: Update of a comment - example: - revision: '000000000000000000000011' - comment: '@[000000000000000000000000:flat] Great work!' - rawComment: '@flat: Great work!' - mentions: - - '000000000000000000000000' - replyTo: '000000000000000000000000' - context: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - ScoreComment: + enum: + - 1p1 + description: LTI version (1.1) + consumerKey: + type: string + description: LTI 1.1 consumer key + consumerSecret: + type: string + description: LTI 1.1 consumer secret (only included for admins) + lms: + type: string + description: LMS type + name: + type: string + description: Configuration name + tool: + type: object + description: Platform/tool product information + properties: + product: + type: string + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance display name + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain + LtiConfiguration1p3: + allOf: + - $ref: '#/components/schemas/LtiConfigurationBase' + - type: object + properties: + ltiVersion: + type: string + enum: + - 1p3 + description: LTI version (1.3) + oneOf: + - $ref: '#/components/schemas/LtiConfiguration1p3Manual' + - $ref: '#/components/schemas/LtiConfiguration1p3Deployment' + - $ref: '#/components/schemas/LtiConfiguration1p3Dynamic' + discriminator: + propertyName: mode + mapping: + 1p3-manual: '#/components/schemas/LtiConfiguration1p3Manual' + 1p3-deployment: '#/components/schemas/LtiConfiguration1p3Deployment' + 1p3-dynamic: '#/components/schemas/LtiConfiguration1p3Dynamic' + LtiConfiguration1p3Base: type: object - required: - - id - - type - - user - - score - - comment - - rawComment - - date properties: - id: + mode: type: string - description: The comment unique identifier - type: - type: string - description: The type of the comment enum: - - document - - inline - user: - type: string - description: The author unique identifier - score: + - 1p3-manual + - 1p3-deployment + - 1p3-dynamic + description: LTI 1.3 configuration mode + platformIss: type: string - description: The unique identifier of the score where the comment was posted - revision: + description: Platform issuer URL + platformName: type: string - description: The unique identifier of revision the comment was posted - replyTo: + description: Platform display name + clientId: type: string - description: | - When the comment is a reply to another comment, the unique identifier of the parent comment - date: + description: OAuth2 client_id allocated by the platform + deploymentId: type: string - description: The date when the comment was posted - format: date-time - modificationDate: + description: Deployment ID linking the tool to a tenant/class (varies by platform) + accessTokenUrl: type: string - description: The date of the last comment modification - format: date-time - comment: + format: url + description: OAuth2 token endpoint (for AGS/NRPS) + authorizationUrl: type: string - description: | - The comment text that can includes mentions using the following - format: `@[id:username]`. - rawComment: + format: url + description: OIDC authorization/login endpoint + jwksUrl: type: string - description: | - A raw version of the comment, that can be displayed without parsing - the mentions. - context: - $ref: '#/components/schemas/ScoreCommentContext' - mentions: - type: array - description: The list of user identifier mentioned on the score - items: - type: string - resolved: - type: boolean - description: | - For inline comments, the comment can be marked as resolved and will be hidden in the future responses - resolvedBy: + format: url + description: Platform JWKS endpoint (public keys) + deploymentMode: type: string - description: | - If the user is marked as resolved, this will contain the unique identifier of the User who marked this comment as resolved - moderation: + enum: + - single + - multi + description: Deployment mode (single for organization-specific, multi for shared parent platforms) + supportedServices: type: object - description: Information about the comment being moderated + description: LTI services support information properties: - hidden: - type: boolean - description: If true, this comment will be hidden from other users - reason: + ags: + type: object + description: Assignment and Grade Services support + properties: + available: + type: boolean + description: Whether AGS claims were detected in launches from this platform + version: + type: string + description: AGS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have AGS enabled for this platform + lineitemsUrl: + type: string + description: Base URL for line items operations as provided by the platform + nrps: + type: object + description: Names and Role Provisioning Services support + properties: + available: + type: boolean + description: Whether NRPS claims were detected in launches from this platform + version: + type: string + description: NRPS version supported (e.g., "2.0") + enabled: + type: boolean + description: Whether we have NRPS enabled for this platform + deepLinking: + type: object + description: Deep Linking support + properties: + available: + type: boolean + description: Whether Deep Linking claims were detected in launches from this platform + version: + type: string + description: Deep Linking version supported (e.g., "2.0") + tool: + type: object + description: Platform/tool product information + properties: + product: type: string - description: If the comment is hidden, the reason why this one has been moderated - enum: [spam, inappropriate] - spam: - type: boolean - description: | - `true if the message has been detected as spam and hidden from other users - description: Comment added on a sheet music - example: - id: '000000000000000000000010' - type: inline - user: '000000000000000000000001' - score: '000000000000000000000042' - revision: '000000000000000000000011' - replyTo: '000000000000000000000000' - date: 2017-01-26T20:29:10.622000Z - modificationDate: 2017-01-26T21:29:10.622000Z - comment: '@[000000000000000000000000:flat] Great work!' - rawComment: '@flat: Great work!' - context: - partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b - staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 - measureUuids: - - e6a6a60b-8710-f819-9a49-e907b19c6f1f - - da83d93c-e3a6-3c73-1bbe-15e5131d6437 - - 056ec5eb-9213-df56-6ae8-d9b99673dc48 - startDpq: 1 - stopDpq: 1 - startTimePos: 2 - stopTimePos: 3 - mentions: - - '000000000000000000000000' - resolved: true - resolvedBy: '000000000000000000000000' - spam: false - AppScopes: - type: string - description: Available scopes - enum: - - account.public_profile - - account.email - - account.education_profile - - scores.readonly - - scores.social - - scores - - collections.readonly - - collections.add_scores - - collections - - notifications.readonly - - edu.resources - - edu.resources.readonly - - edu.classes - - edu.classes.readonly - - edu.assignments - - edu.assignments.readonly - - edu.admin - - edu.admin.lti - - edu.admin.lti.readonly - - edu.admin.users - - edu.admin.users.readonly - - tasks.readonly - OrganizationUserAccessTokenCreation: - required: - - scopes - type: object - properties: - scopes: + description: Product family code (e.g., canvas, moodle, schoology) + version: + type: string + description: Platform version string + instanceName: + type: string + description: Instance name (e.g., 'My University Canvas') + instanceGuid: + type: string + description: Unique instance identifier + instanceContact: + type: string + description: Contact email or handle for the instance + instanceDomain: + type: string + description: Instance root domain + publicKeysetUrl: + type: string + description: Public keyset URL for the platform to retrieve Flat's public keys + initiateLoginUrl: + type: string + description: URL for the platform to initiate LTI login + redirectUris: type: array - description: List of requested scopes for this credential items: - $ref: '#/components/schemas/AppScopes' - description: Creation of a delegated API access token for an organization user - example: - scopes: - - account.public_profile - - account.education_profile - - edu.classes.readonly - ApiAccessToken: + type: string + description: Redirect URI for LTI launches + description: Allowed redirect URIs for LTI launches + enableEmailMatching: + type: boolean + default: true + description: | + Enable email-based user matching during LTI authentication. + + When true (default): If a user with the same email exists in the organization, + they will be matched and logged in instead of creating a new account. + + When false: Email matching is disabled. Only LTI ID matching is used, which means + multiple LTI users can share the same email address and have separate Flat accounts. + This is useful for cases like siblings sharing a parent email in the LMS. + LtiConfiguration1p3Manual: + allOf: + - $ref: '#/components/schemas/LtiConfiguration1p3Base' + - type: object + properties: + mode: + type: string + enum: + - 1p3-manual + description: Manual LTI 1.3 configuration mode + LtiConfiguration1p3Deployment: + allOf: + - $ref: '#/components/schemas/LtiConfiguration1p3Base' + - type: object + properties: + mode: + type: string + enum: + - 1p3-deployment + description: Deployment-based LTI 1.3 configuration mode + parentId: + type: string + description: Parent configuration ID (for deployment-based configs) + deploymentKey: + type: string + description: Deployment key (e.g., schoology, classlink) + deploymentBreakdownBy: + type: string + description: Custom claim used for tenant identification (parent platforms only, read-only) + deploymentBreakdownId: + type: string + description: Value of the custom claim that identifies this specific tenant (child platforms only) + required: + - deploymentId + LtiConfiguration1p3Dynamic: + allOf: + - $ref: '#/components/schemas/LtiConfiguration1p3Base' + - type: object + properties: + mode: + type: string + enum: + - 1p3-dynamic + description: Dynamic registration LTI 1.3 configuration mode + registrationToken: + type: string + description: Only included for admins + registrationUrl: + type: string + format: url + description: Dynamic registration URL (only included for admins when available) + registrationTokenUsed: + type: boolean + description: Whether dynamic registration token has been used + registrationCompletionDate: + type: string + format: date-time + nullable: true + description: Date when dynamic registration completed (null when not completed) + LtiConfigurationCreate: + description: Request to create a new LTI configuration (unified 1.1 and 1.3) + oneOf: + - $ref: '#/components/schemas/LtiConfigurationCreate1p1' + - $ref: '#/components/schemas/LtiConfigurationCreate1p3Dynamic' + - $ref: '#/components/schemas/LtiConfigurationCreate1p3Deployment' + - $ref: '#/components/schemas/LtiConfigurationCreate1p3Manual' + discriminator: + propertyName: mode + mapping: + 1p1-manual: '#/components/schemas/LtiConfigurationCreate1p1' + 1p3-dynamic: '#/components/schemas/LtiConfigurationCreate1p3Dynamic' + 1p3-deployment: '#/components/schemas/LtiConfigurationCreate1p3Deployment' + 1p3-manual: '#/components/schemas/LtiConfigurationCreate1p3Manual' + LtiConfigurationCreate1p1: type: object + required: + - mode + description: LTI 1.1 manual configuration creation properties: - id: + mode: type: string - description: Unique identifier of this private token + enum: + - 1p1-manual + description: LTI 1.1 manual creation mode name: type: string - description: Name of the personal access token - token: + description: Display name for LTI 1.1 credentials + lms: type: string - description: | - The token. This token will only be returned once, then only the first 4 characters will be returned. - issuedDate: + description: LMS identifier for LTI 1.1 credentials + LtiConfigurationCreate1p3Dynamic: + type: object + required: + - mode + description: LTI 1.3 dynamic registration configuration creation + properties: + mode: type: string - description: | - The date then this token was issued - format: date-time - expirationDate: + enum: + - 1p3-dynamic + description: LTI 1.3 dynamic registration mode + platformInfo: + type: object + description: Optional platform information for dynamic registration + properties: + name: + type: string + description: Platform display name + url: + type: string + description: Optional platform homepage or admin URL for reference + locale: type: string - description: | - The date then this token will expire - format: date-time - scopes: - type: array - description: | - The list of scopes associated to the token - items: - $ref: '#/components/schemas/AppScopes' - description: An API access token - example: - id: '0000000000000000' - name: API Access Token name - token: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' - issuedDate: 2022-01-01T00:00:00Z - expirationDate: 2022-01-01T00:00:00Z - scopes: [account.public_profile, account.education_profile, collections.readonly] - OrganizationInvitationCreation: + description: Optional locale code for registration URL. Input values will be automatically normalized to a supported locale code. + LtiConfigurationCreate1p3Deployment: type: object + required: + - mode + - deploymentType + - deploymentId + description: LTI 1.3 deployment-based configuration creation properties: - email: + mode: type: string - description: The email address you want to send the invitation to - organizationRole: - type: string - description: User's Organization Role - default: teacher enum: - - admin - - teacher - description: The parameters to create an organization invitation - example: - email: edu@flat.io - organizationRole: teacher - OrganizationInvitation: + - 1p3-deployment + description: LTI 1.3 deployment-based creation mode + deploymentType: + type: string + description: Parent platform key (e.g., canvas, blackboard, schoology, classlink) + deploymentId: + type: string + description: Deployment identifier provided by the platform + clientId: + type: string + description: OAuth2 client_id for the tenant; required for ClassLink deployments + deploymentBreakdownId: + type: string + description: Value of the custom claim that identifies this specific tenant (for multi-tenant platforms like Schoology) + LtiConfigurationCreate1p3Manual: type: object required: - - organization - - organizationRole - - customCode - - allowMultipleUse + - mode + description: LTI 1.3 manual configuration creation properties: - id: + mode: type: string - description: The invitation unique identifier - creationDate: + enum: + - 1p3-manual + description: LTI 1.3 manual creation mode + platformIss: type: string - description: The creation date of the invitation - format: date-time - organization: + description: Platform issuer URL + platformName: type: string - description: The unique identifier of the Organization owning this class - organizationRole: - $ref: '#/components/schemas/OrganizationRoles' - customCode: + description: Platform display name + clientId: type: string - nullable: true - description: Enrollment code to use when joining this organization - email: + description: OAuth2 client_id allocated by the platform + deploymentId: type: string - description: The email address this invitation was sent to - invitedBy: + description: Deployment identifier provided by the platform + accessTokenUrl: type: string - description: The unique identifier of the User who created this invitation - allowMultipleUse: + format: url + description: Platform access token endpoint URL + authorizationUrl: + type: string + format: url + description: Platform OIDC authorization endpoint URL + jwksUrl: + type: string + format: url + description: Platform JWKS endpoint URL for public keys + enableEmailMatching: type: boolean - description: | - If true, the invitation can be used multiple times. - If false, the invitation can only be used once. - usedBy: - type: array - description: List of users who used this invitation - items: - type: string - description: Details of an invitation to join an organization - example: - creationDate: 2017-07-02T15:05:15.576000Z - customCode: u5raQ7pZ - email: edu@flat.io - id: 59590bab53b1af260610000 - invitedBy: 55b8d8f395c8db031ed00000 - organization: 55df29a6694e4a3953100000 - organizationRole: teacher - LmsName: - type: string - description: LMS name - enum: - - canvas - - moodle - - schoology - - blackboard - - desire2learn - - sakai - - schoolbox - - other - LtiCredentialsCreation: - required: - - lms - - name + description: Enable email-based user matching during LTI authentication + LtiConfigurationUpdate: + description: Update an existing LTI 1.3 configuration (deployment clone or standalone) + anyOf: + - $ref: '#/components/schemas/LtiConfigurationUpdateDeployment' + - $ref: '#/components/schemas/LtiConfigurationUpdateStandalone' + LtiConfigurationUpdateDeployment: type: object + description: Update fields allowed for deployment-based configurations properties: - name: - maxLength: 300 + deploymentId: type: string - description: Name of the couple of credentials - lms: - $ref: '#/components/schemas/LmsName' - description: Creation of a couple of LTI 1.x OAuth credentials - example: - name: My couple of credentials for Canvas - lms: canvas - LtiCredentials: + description: Deployment identifier provided by the platform + deploymentBreakdownId: + type: string + description: Specific tenant identifier for multi-tenant platforms + enableEmailMatching: + type: boolean + description: Enable email-based user matching during LTI authentication + LtiConfigurationUpdateStandalone: type: object + description: Update fields allowed for standalone (manual/dynamic) configurations properties: - id: - type: string - description: The unique identifier of this couple of credentials - name: + deploymentId: type: string - description: Name of the couple of credentials - lms: - $ref: '#/components/schemas/LmsName' - organization: + description: Deployment identifier provided by the platform + platformIss: type: string - description: The unique identifier of the Organization associated to these credentials - creator: + description: Platform issuer URL + platformName: type: string - description: Unique identifier of the user who created these credentials - creationDate: + description: Platform display name + clientId: type: string - description: The creation date of thse credentials - format: date-time - lastUsage: + description: OAuth2 client_id allocated by the platform + accessTokenUrl: type: string - description: The last time these credentials were used - format: date-time - consumerKey: + format: url + description: Platform access token endpoint URL + authorizationUrl: type: string - description: OAuth 1 Consumer Key - consumerSecret: + format: url + description: Platform OIDC authorization endpoint URL + jwksUrl: type: string - description: OAuth 1 Consumer Secret - description: A couple of LTI 1.x OAuth credentials - example: - id: 59368be5c66caf895ee02387 - name: My couple of credentials for Canvas - lms: canvas - organization: 5832c801a4bedc05f4fb4993 - creator: 5832bf149995c4024bd6de7d - creationDate: 2017-06-06T11:03:01.955000Z - lastUsage: 2017-06-13T16:02:34.324000Z - consumerKey: 200082F5-FAFD-4C6E-BB19-7DAB5D6264D4 - consumerSecret: ABCDE1234 - ClassCreation: - required: - - name + format: url + description: Platform JWKS endpoint URL for public keys + enableEmailMatching: + type: boolean + description: Enable email-based user matching during LTI authentication + MicrosoftGraphSubmission: type: object + description: A Microsoft Teams submission + required: + - id + - state properties: - name: - maxLength: 255 + id: type: string - description: The name of the new class - section: - maxLength: 255 + description: Identifier of the submission assigned by Microsoft Teams + state: type: string - description: The section of the new class - level: - $ref: '#/components/schemas/ClassGradeLevel' - skillsFocused: - $ref: '#/components/schemas/EduSkillsFocused' - size: - type: number - minimum: 0 - nullable: true - description: Number of students in the classroom - description: Creation of a classroom + description: State of the submission example: - name: Music Theory Course - section: Music Theory 101 - ClassUpdate: + id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda + state: returned + TutteoProduct: + description: | + A Tutteo product. + + * `flat`: [Flat](https://flat.io) - Music notation software for individual users + * `flatEdu`: [Flat for Education](https://flat.io/edu) - Music notation software for schools and educators + * `msnippet`: [Music Snippet](https://musicsnippet.com) - Embeddable music snippets for websites + * `embed`: [Flat Embed](https://flat.io/developers/embed) - Embeddable music notation editor + type: string + default: flat + enum: + - flat + - flatEdu + - msnippet + - embed + LicenseMode: + type: string + description: Mode of the license + enum: + - credit + - site + LicenseSources: + type: string + description: Source of the license + default: order + enum: + - order + - trial + - voucher + - distributor + - subscription + - appStore + - playStore + - musicfirst + ResourceRights: type: object + required: + - aclRead + - aclWrite + - aclAdmin properties: - name: - maxLength: 255 - type: string - description: The name of the class - section: - maxLength: 255 + aclRead: + type: boolean + default: false + description: | + `True` if the current user can read the current document + aclWrite: + type: boolean + default: false + description: | + `True` if the current user can modify the current document. + + If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. + aclAdmin: + type: boolean + default: false + description: | + `True` if the current user can manage the current document (i.e. share, delete) + + If this is a right of a Collection, the capabilities of the associated user can be lower than this permission, check out the `capabilities` property as the end-user to have the complete possibilities with the collection. + isCollaborator: + type: boolean + default: false + description: | + `True` if the current user is a collaborator of the current document (direct or via group). + collaboratorType: type: string - description: The section of the class - level: - $ref: '#/components/schemas/ClassGradeLevel' - skillsFocused: - $ref: '#/components/schemas/EduSkillsFocused' - size: - type: number - minimum: 0 - nullable: true - description: Number of students in the classroom - description: Update of a classroom + enum: + - owner + - user + - group + description: | + The type of the collaborator for the resource + description: The rights of the current user on a score or collection example: - name: Music Theory Course - section: Music Theory 101 - ClassDetails: + aclRead: true + aclWrite: true + aclAdmin: true + isCollaborator: true + ResourceCollaborator: + description: | + A collaborator of a score. The `userEmail` and `group` are only available if the requesting user is a collaborator of the related score (in this case these permissions will eventualy not be listed and exposed publicly). + allOf: + - $ref: '#/components/schemas/ResourceRights' + - type: object + properties: + id: + type: string + description: The unique identifier of the permission + date: + type: string + format: date-time + description: The date when the permission was added + score: + type: string + description: If this object is a permission of a score, this property will contain the unique identifier of the score + collection: + type: string + description: If this object is a permission of a collection, this property will contain the unique identifier of the collection + user: + $ref: '#/components/schemas/UserPublic' + group: + $ref: '#/components/schemas/Group' + userEmail: + type: string + description: | + If the collaborator is not a user of Flat yet, this field will contain their email. + invited: + type: boolean + description: | + If this property is `true`, this is still a pending invitation + ResourceCollaboratorCreation: type: object - required: - - id properties: - id: - type: string - description: The unique identifier of the class - state: - $ref: '#/components/schemas/ClassState' - name: - type: string - description: The name of the class - section: - type: string - description: The section of the class - description: - type: string - description: An optionnal description for this class - organization: - type: string - description: The unique identifier of the Organization owning this class - owner: + user: type: string - description: The unique identifier of the User owning this class - creationDate: + description: The unique identifier of a Flat user + group: type: string - description: The date when the class was create - format: date-time - enrollmentCode: + description: The unique identifier of a Flat group + userEmail: type: string description: | - [Teachers only] The enrollment code that can be used by the students to join the class - theme: + Fill this field to invite an individual user by email. + userToken: type: string - description: The theme identifier using in Flat User Interface - assignmentsCount: - type: number - description: The number of assignments created in the class - studentsGroup: - $ref: '#/components/schemas/GroupDetails' - teachersGroup: - $ref: '#/components/schemas/GroupDetails' - issues: - type: object - description: Detected issues for this class - properties: - sync: - type: array - description: Synchronization issues for the class - items: - type: object - description: A sync issue - properties: - id: - type: string - description: The account user identifier - email: - type: string - description: The email address of the user concerned by this sync issue - reason: - type: string - enum: [otherOrgnanization, personalSubscription] - description: The reason why the account cannot be synced - googleClassroom: - type: object - properties: - id: - type: string - description: The course identifier on Google Classroom - alternateLink: - type: string - description: Absolute link to this course in the Classroom web UI - description: Google Classroom course-related information - googleDrive: - type: object - properties: - teacherFolderId: - type: string - description: | - [Teachers only] The Drive directory identifier of the teachers' folder - teacherFolderAlternateLink: - type: string - description: | - [Teachers only] The Drive URL of the teachers' folder - description: Google Drive course-related information provided by Google Classroom - microsoftGraph: - type: object - properties: - id: - type: string - description: The course identifier on Microsoft Graph - lti: - type: object - properties: - contextId: - type: string - description: Unique context identifier provided - contextTitle: - type: string - description: Context title - contextLabel: - type: string - description: Context label - description: Meta information provided by the LTI consumer - canvas: - type: object - properties: - id: - type: string - description: Unique identifier of the course on Canvas - domain: - type: string - description: Canvas instance domain (e.g. "canvas.instructure.com") - description: Meta information provided by Canvs LMS - mfc: - type: object - properties: - id: - type: string - description: Unique identifier of the course on MusicFirst Classroom - alternateLink: - type: string - description: Link to MusicFirst Classroom class - description: Meta information provided by Canvs LMS - clever: - type: object - properties: - id: - type: string - description: Clever section unique identifier - creationDate: - type: string - description: The creation date of the section on clever - format: date-time - modificationDate: - type: string - description: The last modification date of the section on clever - format: date-time - subject: - type: string - description: Normalized subject of the course - enum: - - english/language arts - - math - - science - - social studies - - language - - homeroom/advisory - - interventions/online learning - - technology and engineering - - PE and health - - arts and music - - other - termName: - type: string - description: Name of the term when this course happens - termStartDate: - type: string - description: Beginning date of the term - format: date-time - termEndDate: - type: string - description: End date of the term - format: date-time - description: Clever.com section-related information - level: - $ref: '#/components/schemas/ClassGradeLevel' - skillsFocused: - $ref: '#/components/schemas/EduSkillsFocused' - size: - type: number - nullable: true - description: Number of students in the classroom - description: A classroom + description: | + Token received in an invitation to join the score. + aclRead: + type: boolean + description: | + `True` if the related user can read the score. (probably true if the user has a permission on the document). + default: true + aclWrite: + type: boolean + description: | + `True` if the related user can modify the score. + default: false + aclAdmin: + type: boolean + description: | + `True` if the related user can can manage the current document, i.e. changing the document permissions and deleting the document + default: false + description: Add a collaborator to a resource. example: - id: '100000000000000000000001' - state: active - name: Music Theory 101 - section: Music Theory 101 - organization: '100000000000000000000002' - owner: '100000000000000000000003' - enrollmentCode: jm447ear - theme: blue-8 - assignmentsCount: 10 - creationTime: 2017-01-25T09:47:34.544000Z - googleClassroom: - id: '00000000' - alternateLink: http://classroom.google.com/c/music-theory - microsoftGraph: - id: 00000000-0000-0000-0000-000000000000 - googleDrive: - teacherFolderAlternateLink: https://drive.google.com/drive/folders/0B-0000000000000000 - teacherFolderId: 0B-0000000000000000 - lti: - contextId: '042' - contextLabel: MUSIC - contextTitle: Music Theory 101 - canvas: - id: '000000000' - ClassAttachmentCreation: + userEmail: jdoe@flat.io + aclRead: true + aclWrite: true + aclAdmin: false + LmsName: + type: string + description: LMS name + enum: + - canvas + - moodle + - schoology + - blackboard + - desire2learn + - sakai + - schoolbox + - other + MediaAttachment: type: object + required: + - type properties: type: type: string description: | - The type of the attachment posted: - * `rich`, `photo`, `video` are attachment types that are automatically resolved from a `link` attachment. + The type of the assignment resolved: + * `rich`, `photo`, `video` are automatically resolved as `link` * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. enum: - rich @@ -6674,1338 +7725,1729 @@ components: - worksheet score: type: string - description: | - A unique Flat score identifier. The user creating the assignment must at least have read access to the document. If the user has admin rights, new group permissions will be automatically added for the - teachers and students of the class. + description: An unique Flat score identifier + revision: + type: string + description: An unique revision identifier of a score worksheet: type: string - description: An unique worksheet identifier + description: An unique worksheet identifier + dedicated: + type: boolean + description: True if the resource is dedicated for the assignment (for scores and worksheets), meaning on the user-side this one is stored in the assignment + track: + type: string + description: A unique track identifier + partUuid: + type: string + description: The UUID of the instrument part selected for this attachment (for performance submissions) sharingMode: $ref: '#/components/schemas/MediaScoreSharingMode' lockScoreTemplate: type: boolean description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. - url: - type: string - description: The URL of the attachment. - googleDriveFileId: - type: string - description: The ID of the Google Drive File - description: | - Attachment creation for an assignment or stream post. - This attachment must contain a `score` or an `url`, all the details of this one will be resolved and returned as `ClassAttachment` once the assignment or stream post is created. - example: - type: flat - score: '000000000000000001' - sharingMode: copy - ClassGradeLevel: - type: string - description: Class grade level - enum: - - elementary - - middle - - high - - university - - other - EduSkillsFocused: - type: array - description: Specific skills that will be focused in classroom - items: - type: string - enum: - - notation - - sight-reading - - performance-instrumental - - ear-training - - music-theory - - composition - - jazz-ensemble - - music-technology - - other - AssignmentUpdate: - type: object - description: Assignment Resource Editing - properties: - type: - $ref: '#/components/schemas/AssignmentType' title: type: string - description: Title of the assignment - maxLength: 1000 - minLength: 1 + description: The resolved title of the attachment description: type: string - description: Description and content of the assignment - attachments: - type: array - items: - $ref: '#/components/schemas/ClassAttachmentCreation' - nbPlaybackAuthorized: - type: number - nullable: true - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - toolset: + description: The resolved description of the attachment + html: type: string - nullable: true description: | - The id of the toolset to apply to this assignment. - The toolset will be copied to the assignment as a dedicated object to prevent unexpected changes when making modifications to the template toolset. - This property can be set to null to delete the linked toolset and switch back to all the tools available for this assignment. - coverFile: + If the attachment type is `rich` or `video`, the HTML code of the + media to display + htmlWidth: + type: number + description: If the `html` is available, the width of the widget + htmlHeight: + type: number + description: If the `html` is available, the height of the widget + url: type: string - nullable: true - description: The id of the cover to display - cover: + description: The url of the attachment + thumbnailUrl: type: string - nullable: true - description: The URL of the cover to display - maxPoints: - type: number - nullable: true - minimum: 0 - maximum: 10000 description: | - If set, the grading will be enabled for the assignement with this value as the maximum of points - releaseGrades: - type: string - enum: [auto, manual] + If the attachment type is `rich`, `video`, `photo` or `link`, a + displayable thumbnail for this attachment + thumbnailWidth: + type: integer description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: + If the `thumbnailUrl` is available, the width of the thumbnail + thumbnailHeight: + type: integer + description: | + If the `thumbnailUrl` is available, the width of the thumbnail + authorName: + type: string + description: The resolved author name of the attachment + authorUrl: + type: string + description: The resolved author url of the attachment + iconUrl: + type: string + description: The URL of the icon + mimeType: + type: string + description: The mine type of the file + googleDriveFileId: + type: string + description: The ID of the Google Drive File + teacherOnly: type: boolean - description: Mixing worksheets exercises for each student + description: | + If true, this attachment is only visible to teachers. + When students view the assignment, attachments with this flag will be filtered out. + default: false + description: | + Media attachment. The API will automatically resolve the details, oEmbed, + and media available if possible and return them in this object example: - title: First assignment - description: Get started with Flat - maxPoints: 100 - attachments: - - type: flat - score: '0000000000000000' - - type: link - url: https://flat.io/developers - ClassAssignmentUpdate: - type: object - allOf: - - $ref: '#/components/schemas/AssignmentUpdate' - - type: object - properties: - state: - type: string - description: State of the assignment - enum: - - draft - - active - dueDate: - type: string - nullable: true - description: | - The due date of this assignment, late submissions will be marked as paste due. If not set, the assignment won't have a due date. - format: date-time - scheduledDate: - type: string - nullable: true - description: | - The publication (scheduled) date of the assignment. - If this one is specified, the assignment will only be listed to the teachers of the class. - format: date-time - googleClassroom: - type: object - description: Google Classroom options for this assignment - properties: - topicId: - type: string - nullable: true - description: Identifier of the topic where the assignment is created - microsoftGraph: - type: object - description: Microsoft Graph options for this assignment - properties: - categories: - description: List of categories this assignment belongs to - type: array - nullable: true - items: - type: string - assigneeMode: - type: string - description: Possible modes of assigning assignments - enum: - - everyone - - selected - assignedStudents: - type: array - items: - type: string - description: Identifiers for the students that have access to the assignment - description: Assignment creation details - example: - title: First assignment - description: Get started with Flat - maxPoints: 100 - attachments: - - type: flat - score: '0000000000000000' - - type: link - url: https://flat.io/developers - scheduledDate: 2017-06-20T13:56:19.613000Z - dueDate: 2017-07-12T13:56:19.613000Z - AssignmentCopy: - oneOf: - - $ref: '#/components/schemas/AssignmentCopyToClass' - - $ref: '#/components/schemas/AssignmentCopyToResourceLibrary' - AssignmentCopyToResourceLibrary: + type: video + url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw + title: Flat - The online collaborative music notation software + description: Discover Flat on https://flat.io + html: + thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg + thumbnailHeight: 1052 + thumbnailWidth: 1868 + authorName: Flat + authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw + TeachingTheme: + type: string + description: Teaching theme + enum: + - composition + - music-theory + - general-music + - band + - choir + - orchestra + - jazz-ensemble + - music-technology + - other + Grade: + type: string + description: Class grade of the resource + enum: + - '1' + - '2' + - '3' + - '4' + - '5' + - '6' + - '7' + - '8' + - '9' + - '10' + - '11' + - '12' + - university + OrganizationRoles: + type: string + description: User's Organization Role (for Edu users only) + enum: + - admin + - teacher + - user + OrganizationInvitationCreation: type: object - description: Copy the assignment to the EDU Resource Library - required: - - libraryParent properties: - libraryParent: + email: type: string - description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` - verifyIfNotAlreadyInResourceLibrary: - type: boolean - description: Option to check if the assignment is already in Resource Library + description: The email address you want to send the invitation to + organizationRole: + type: string + description: User's Organization Role + default: teacher + enum: + - admin + - teacher + description: The parameters to create an organization invitation example: - libraryParent: '0000000000000000' - AssignmentCopyToClass: + email: edu@flat.io + organizationRole: teacher + OrganizationInvitation: type: object - description: Copy the assignment to a class required: - - classroom + - organization + - organizationRole + - customCode + - allowMultipleUse properties: - classroom: + id: type: string - description: The destination classroom where the assignment will be copied - assignment: + description: The invitation unique identifier + creationDate: type: string - description: An optional destination assignment where the original assignement will be copied. Must be a draft. - scheduledDate: + description: The creation date of the invitation + format: date-time + organization: + type: string + description: The unique identifier of the Organization owning this class + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + customCode: + type: string + nullable: true + description: Enrollment code to use when joining this organization + email: + type: string + description: The email address this invitation was sent to + invitedBy: type: string + description: The unique identifier of the User who created this invitation + htmlUrl: + type: string + description: URL to join the organization using this invitation + allowMultipleUse: + type: boolean description: | - The publication (scheduled) date of the assignment. - If this one is specified, the assignment will only be listed to the teachers of the class. - Alternatively the existing `scheduledDate` from the copied assignment will be used. - format: date-time - example: - classroom: '0000000000000000' - AssignmentCopyResponse: - allOf: - - $ref: '#/components/schemas/Assignment' - - type: object - properties: - resource: + If true, the invitation can be used multiple times. + If false, the invitation can only be used once. + usedBy: + type: array + description: List of users who used this invitation + items: type: string - description: If this assignment is stored as a resource in the Flat for Education Resource Library, the unique identifier of the resource. - AssignmentType: - type: string - description: Type of the assignment - enum: - - none - - newScore - - scoreTemplate - - sharedWriting - - worksheet - - performance - Assignment: + description: Details of an invitation to join an organization + example: + customCode: code + email: edu@flat.io + id: 59590bab53b1af260610000 + invitedBy: 55b8d8f395c8db031ed00000 + organization: 55df29a6694e4a3953100000 + htmlUrl: https://school.flat.io/organization/enroll?enrollcode=code + organizationRole: teacher + ScoreSummary: type: object required: - id - - type - title - - attachments - - capabilities + - privacy + - user + - htmlUrl properties: id: type: string - description: Unique identifier of the assignment - type: - $ref: '#/components/schemas/AssignmentType' - capabilities: - required: - - canEdit - - canPublishInClass - - canArchive - - canUnarchive - type: object - description: Capabilities the current user has on this assignment. Each capability corresponds to a fine-grained action that a user may take. - properties: - canEdit: - type: boolean - description: | - Whether the current user can edit the assignment - canPublishInClass: - type: boolean - description: | - Whether this assignment can be published in a class - canPublishInClassError: - type: object - required: - - code - - message - description: | - If `canPublishInClass` and `canEdit` are false, the issue why this assignment cannot be published in a class - properties: - code: - type: string - description: A corresponding code for this error - message: - type: string - description: A printable and localized message for this error - canArchive: - type: boolean - description: | - Whether the current user can archive the assignment - canUnarchive: - type: boolean - description: | - Whether the current user can unarchive the assignment - title: - type: string - description: Title of the assignment - description: - type: string - description: Description and content of the assignment - cover: - type: string - description: The URL of the cover to display - coverFile: + description: The unique identifier of the score + sharingKey: type: string - description: The id of the cover to display - attachments: - type: array - items: - $ref: '#/components/schemas/MediaAttachment' - useDedicatedAttachments: - type: boolean - description: | - For all assignments created after 02/2023, all the underlying resources must be dedicated and stored in the assignment. - This boolean indicates that this assignment only supports dedicated attachments. - maxPoints: - type: number - description: | - If set, the grading will be enabled for the assignement - releaseGrades: + description: The private sharing key of the score (available when the `privacy` mode is set to `privateLink`) + title: type: string - enum: [auto, manual] - description: | - For worksheets, how grading will work for the assignment: - - If set to `auto`, the grades will be automatically released when the student submits the submissions - - If set to `manual`, the grades will only be set as `draftGrade` and will be released when the teacher returns the submissions - shuffleExercises: - type: boolean - description: Mixing worksheets exercises for each student - toolset: + description: The title of the score + privacy: + $ref: '#/components/schemas/ScorePrivacy' + user: + $ref: '#/components/schemas/UserPublic' + htmlUrl: type: string - description: The id of the associated toolset - nbPlaybackAuthorized: - type: number - description: The number of playback authorized on the scores of the assignment. - restrictPlayNote: - type: boolean - description: Restrict the ability to get an audio feedback every time a student adds or selects a note. - restrictToAudioTracks: - type: boolean - description: Restrict the audio source to provided audio tracks on a score. Students won't be able to use the editor playback. - description: Assignment details + description: The url where the score can be viewed in a web browser + format: url + description: A summary of the score details example: - id: 636a724a89a6eaa0a54c3900 - title: My first assignment - description: Get started with Flat - maxPoints: 100 - attachments: - - type: flat - score: '0000000000000000' - - type: link - url: https://flat.io/developers - - type: video - url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw - title: Flat - The online collaborative music notation software - description: Discover Flat on https://flat.io - html: - thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg - thumbnailHeight: 1052 - thumbnailWidth: 1868 - authorName: Flat - authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw - ClassAssignment: + id: '000000000000000000000000' + title: My score + privacy: private + user: + id: '000000000000000000000001' + username: flat + name: Flat Team + printableName: Flat Team + picture: https://flat.io/img/logo_flat.svg + htmlUrl: https://flat.io/score/000000000000000000000000 + ScoreLicense: + type: string + nullable: true + description: | + License of the creation. Read more about the Creative Commons licenses on https://creativecommons.org/licenses/ + enum: + - copyright + - cc0 + - cc-by + - cc-by-sa + - cc-by-nd + - cc-by-nc + - cc-by-nc-sa + - cc-by-nc-nd + - null + ScoreCreationType: + type: string + nullable: true + description: The type of creation (an orginal, an arrangement) + enum: + - original + - arrangement + - other + - null + ScoreDetails: + description: The score and all its details allOf: - - $ref: '#/components/schemas/Assignment' + - $ref: '#/components/schemas/ScoreSummary' - type: object required: - - state - creationDate - - submissions + - collaborators + - instruments + - instrumentsNames + - samples + - editHtmlUrl properties: - creator: + editHtmlUrl: type: string - description: | - The User unique identifier of the creator of this assignment - state: + description: The url where the score can be edited in a web browser + format: url + subtitle: type: string - description: State of the assignment - enum: - - draft - - active - - archived - classroom: + description: Subtitle of the score + lyricist: type: string - description: The unique identifier of the class where this assignment was posted + description: Lyricist of the score + arranger: + type: string + description: Arranger of the score + composer: + type: string + description: Composer of the score + description: + type: string + description: Description of the creation + tags: + type: array + description: Tags describing the score + items: + pattern: ^[a-zA-Z0-9]{1,30}$ + type: string + creationType: + $ref: '#/components/schemas/ScoreCreationType' + license: + $ref: '#/components/schemas/ScoreLicense' + licenseText: + type: string + description: Additional license text written on the exported/printed score + durationTime: + type: number + description: In seconds, an approximative duration of the score + numberMeasures: + type: integer + description: The number of measures in the score + mainTempoQpm: + type: number + description: The main tempo of the score (in QPM) + mainKeySignature: + type: number + description: The main key signature of the score (expressed between -7 and 7). + rights: + $ref: '#/components/schemas/ResourceRights' + collaborators: + type: array + description: The list of the collaborators of the score + items: + $ref: '#/components/schemas/ResourceCollaborator' creationDate: type: string - description: The creation date of this assignment + description: The date when the score was created format: date-time - scheduledDate: + modificationDate: type: string - description: | - The publication (scheduled) date of the assignment. - If this one is specified, the assignment will only be listed to the teachers of the class. + description: The date of the last revision of the score format: date-time - dueDate: + publicationDate: + type: string + description: The date when the score was published on Flat + format: date-time + scheduledDeletionDate: type: string description: | - The due date of this assignment, late submissions will be marked as - paste due. + The date when the score will be definitively deleted. + This date can be in the past if the score will be deleted at the next deletion batch, in this case you can display something like "Deleted shortly". + + Schedule: + + * For all paying users, the scores will be definitively deleted after 90 days. + * For free users, the scores are no longer available after 24 hours, an can be restored with a paying account up to 90 days. format: date-time - assigneeMode: + highlightedDate: type: string - description: Possible modes of assigning assignments - enum: - - everyone - - selected - assignedStudents: + description: The date when the score was highlighted (featured) on our community + format: date-time + organization: + type: string + description: | + If the score has been created in an organization, the identifier of this organization. This property is especially used with the score privacy `organizationPublic`. + parentScore: + type: string + description: | + If the score has been forked, the unique identifier of the parent score. + instruments: type: array items: type: string - description: Identifiers for the students that have access to the assignment - submissions: + description: | + An array of the instrument identifiers used in the last version of the score. + This is mainly used to display a list of the instruments in the Flat's UI or instruments icons. + The format of the strings is `{instrument-group}.{instrument-id}`. + instrumentsNames: type: array items: - $ref: '#/components/schemas/AssignmentSubmission' - googleClassroom: - $ref: '#/components/schemas/GoogleClassroomCoursework' - microsoftGraph: - $ref: '#/components/schemas/MicrosoftGraphAssignment' - mfc: - type: object - description: A MusicFirst Classroom assignment - properties: - id: - type: string - description: Unique identifier of the course on MusicFirst Task - alternateLink: - type: string - description: Link to MusicFirst Classroom task - canvas: - type: object - description: A Canvas LMS assignment - properties: - id: - type: string - description: Unique identifier of the course on Canvas assignment - alternateLink: - type: string - description: Link to Canvas assignment - lti: - type: object - description: An LTI assignment - properties: - id: - type: string - description: Resource ID in the LMS - issue: - type: string - description: Detected issue for this assignment - example: - id: 636a724a89a6eaa0a54c3900 - title: My first assignment - description: Get started with Flat - state: active - creator: 5832bf149995c4024bd6de7d - classroom: 58c4725345cd836264f0b29e - creationDate: 2017-06-12T13:56:19.613000Z - dueDate: 2017-07-12T13:56:19.613000Z - scheduledDate: 2017-06-18T13:56:19.613000Z - maxPoints: 100 - attachments: - - type: flat - score: '0000000000000000' - - type: link - url: https://flat.io/developers - - type: video - url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw - title: Flat - The online collaborative music notation software - description: Discover Flat on https://flat.io - html: - thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg - thumbnailHeight: 1052 - thumbnailWidth: 1868 - authorName: Flat - authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw - googleClassroom: - id: '1235665432' - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/detail - lti: - id: '12345' - canvas: - id: '12345' - alternateLink: https://canvas.instructure.com/courses/00000/assignments/12345 - submissions: - - id: 58c4955c226ffff257211a90 - classroom: 58c4725345cd836264f0b29e - assignment: 58c49068524c03ec576ca43c - creator: 559eb5c7f0d4d5e46d03781d - creationDate: 2017-03-12T00:25:00.748000Z - submissionDate: 2017-03-12T00:25:22.748000Z - attachments: - - type: flat - score: 58c4955a226ffff257211a8d - title: Hello - Student - googleClassroom: - id: CgsI-00000000000 - state: turned_in - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission - AssignmentSubmissionUpdate: - type: object - properties: - attachments: - type: array - items: - $ref: '#/components/schemas/ClassAttachmentCreation' - submit: - type: boolean - description: If `true`, the submission will be marked as done - draftGrade: - type: number - nullable: true - minimum: 0 - maximum: 10000 - description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission - grade: - type: number - nullable: true - minimum: 0 - maximum: 10000 - description: Optional grade. If unset, no grade was set. - exercisesIds: - type: array - nullable: true - items: + type: string + description: | + An array of the instrument names used in the last version of the score. + This list is localized and ready-to-display and will match the indexes from the `instruments` list. + samples: + type: array + items: + type: string + description: | + An array of the audio samples identifiers used the different score parts. + The format of the strings is `{instrument-group}.{sample-id}`. + googleDriveFileId: type: string - description: The ids of exercises when they need to be in a specific order - return: - type: boolean - description: If `true`, the submission will be marked as done - description: Assignment Submission creation - example: - attachments: - - type: flat - score: 58c4955a226ffff257211a8d - title: Hello - Student - submit: true - AssignmentSubmissionState: - type: string - description: State of the submission - enum: - - created - - turnedIn - - returned - - graded - AssignmentSubmissionHistoryState: + description: | + If the user uses Google Drive and the score exists on Google Drive, this field will contain the unique identifier of the Flat score on Google Drive. You can access the document using the url: `https://drive.google.com/open?id={googleDriveFileId}` + likes: + $ref: '#/components/schemas/ScoreLikesCounts' + comments: + $ref: '#/components/schemas/ScoreCommentsCounts' + views: + $ref: '#/components/schemas/ScoreViewsCounts' + plays: + $ref: '#/components/schemas/ScorePlaysCounts' + collections: + type: array + description: The List of parent collections, which includes all the collections this score is included. Please note that you might not have access to all of them. + items: + type: string + me: + type: object + description: Information about the authenticated user and this score + required: + - isLiked + - isInLibrary + properties: + isLiked: + type: boolean + description: True if the current user likes this score + isInLibrary: + type: boolean + description: True if the score is stored in one of the user's collections + ScorePrivacy: type: string - description: State of the submission history + default: private + description: | + The score main privacy mode. + + - `public`: The score is public on the Internet. This one can be accessible at the url `https://flat.io/score/{score}` and can be modified and administred by specified collaborators users. + - `private`: The score is private and can be only accessed, modified and administred by specified collaborators users. + - `privateLink`: The score is private but can be accessed using a private link `htmlUrl` or the private key in the property `sharingKey`. + - `organizationPublic`: _Available only with [Flat for Education](https://flat.io/edu)._ The score is public in the organization: users of the same organization can access to this one. The score can be modified and administred by specified collaborators users. + + The score can also be individually shared to a set of users or groups using the different collaborators API methods. + + When a file is synchronized from an external source (e.g. Google Drive) and the sharing options are changed on the source, Flat will chose the best privacy mode for the file. + + When using a [Flat for Education](https://flat.io/edu) account, some of the modes may not be available if disabled by an administrator of the organization (e.g. by default the `public` mode is not available). enum: - - created - - turnedIn - - returned - - graded - - reset - AssignmentSubmission: + - public + - private + - organizationPublic + - privateLink + ScoreTrack: type: object required: - id - state - - classroom - - assignment + - score - creator + - default + - type - creationDate - - attachments - - playback - - comments + - modificationDate + - purpose properties: id: type: string - description: Unique identifier of the submission - state: - $ref: '#/components/schemas/AssignmentSubmissionState' - classroom: + description: The unique identifier of the score track + title: type: string - description: | - Unique identifier of the classroom where the assignment was posted - assignment: + description: Title of the track + score: type: string - description: Unique identifier of the assignment + description: The unique identifier of the score creator: type: string - description: The User identifier of the student who created the submission + description: The unique identifier of the track creator creationDate: type: string - description: The date when the submission was created - attachments: + description: The creation date of the track + format: date-time + modificationDate: + type: string + description: The modification date of the track + format: date-time + default: + type: boolean + description: True if the track should be used as default audio source + state: + $ref: '#/components/schemas/ScoreTrackState' + type: + $ref: '#/components/schemas/ScoreTrackType' + purpose: + $ref: '#/components/schemas/ScoreTrackPurpose' + url: + type: string + description: The URL of the track + mediaId: + type: string + description: | + The unique identifier of the track when hosted on an external service. + For example, if the url is `https://www.youtube.com/watch?v=dQw4w9WgXcQ`, `mediaId` will be `dQw4w9WgXcQ` + synchronizationPoints: type: array items: - $ref: '#/components/schemas/MediaAttachment' - submissionDate: + $ref: '#/components/schemas/ScoreTrackPoint' + description: An audio track for a score + ScoreTrackCreation: + type: object + properties: + title: type: string - description: The date when the student submitted their work - returnDate: + description: Title of the track + default: + type: boolean + description: True if the track should be used as default audio source + state: + $ref: '#/components/schemas/ScoreTrackState' + purpose: + $ref: '#/components/schemas/ScoreTrackPurpose' + url: type: string - description: The date when the teacher returned the work - returnCreator: + description: The URL of the track + synchronizationPoints: + type: array + items: + $ref: '#/components/schemas/ScoreTrackPoint' + description: | + Creation of a new track. This one must contain the URL of the track or the corresponding file + example: + title: Rick Astley - Never Gonna Give You Up + url: https://www.youtube.com/watch?v=dQw4w9WgXcQ + default: true + state: draft + synchronizationPoints: + - type: measure + time: 0 + measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c + - type: end + time: 213 + ScoreTrackUpdate: + type: object + properties: + title: type: string - description: | - The User unique identifier of the teacher who returned the submission - grade: + description: Title of the track + default: + type: boolean + description: True if the track should be used as default audio source + state: + $ref: '#/components/schemas/ScoreTrackState' + purpose: + $ref: '#/components/schemas/ScoreTrackPurpose' + synchronizationPoints: + type: array + items: + $ref: '#/components/schemas/ScoreTrackPoint' + description: | + Update an existing track. + example: + title: Rick Astley - Never Gonna Give You Up + url: https://www.youtube.com/watch?v=dQw4w9WgXcQ + default: true + state: draft + synchronizationPoints: + - type: measure + time: 0 + measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c + - type: end + time: 213 + ScoreTrackPoint: + required: + - time + - type + type: object + properties: + type: + type: string + description: The type of the synchronization point. If the type is `measure`, the measure uuid must be present in `measureUuid` + enum: + - measure + - end + measureUuid: + type: string + description: The measure unique identifier + format: uuid + time: + type: number + description: The corresponding time in seconds + description: A track synchronization point + example: + type: measure + time: 0 + measureUuid: 5132a788-69e6-d0c6-84ec-4bd858658d7c + ScoreTrackType: + type: string + description: The type of an audio track + enum: + - audio + - soundcloud + - youtube + - vimeo + ScoreTrackPurpose: + type: string + description: The purpose of the audio track + default: common + enum: + - common + - performanceSubmission + ScoreTrackState: + type: string + description: State of the track + default: draft + enum: + - draft + - completed + - deleted + ScoreLikesCounts: + type: object + properties: + total: + type: number + description: The total number of likes of the score + weekly: + type: number + description: The number of new likes during the last week + monthly: + type: number + description: The number of new likes during the last month + yearly: + type: number + description: The number of new likes during the last year + description: | + A computed version of the weekly, monthly, yearly and total number of likes + for a score + example: + total: 500 + weekly: 10 + monthly: 30 + yearly: 120 + ScoreCommentsCounts: + type: object + properties: + total: + type: number + description: The total number of comments added to the score + unique: + type: number + description: The unique (1/user) number of comments added to the score + weekly: + type: number + description: The weekly unique number of comments added to the score + monthly: + type: number + description: The monthly unique number of comments added to the score + yearly: + type: number + description: The yearly unique number of comments added to the score + description: | + A computed version of the total, unique, weekly, monthly and yearly number of + comments added on the documents (this doesn't include inline comments). + example: + total: 500 + unique: 35 + weekly: 10 + monthly: 30 + yearly: 200 + ScoreViewsCounts: + type: object + properties: + total: type: number - nullable: true - description: Optional grade. If unset, no grade was set. - draftGrade: + description: The total number of views of the score + weekly: type: number - nullable: true - description: Optional grade. If unset, no grade was set. This value is only visible by the teacher, and we will be set to `grade` once the teacher returns the submission - maxPoints: + description: The weekly number of views of the score + monthly: type: number - description: Optional max points for the grade. If set, a corresponding `draftGrade` or `grade` will be set. - exercisesIds: - type: array - items: - type: string - description: The ids of exercises when they need to be in a specific order - playback: - type: array - items: - type: object - description: Playback used by student in this submission (used to limit the playback for the assignment) - required: - - score - - nbPlayAttempt - properties: - score: - type: string - description: The score unique identifier - nbPlayAttempt: - type: number - description: The number of playback used by the student - comments: - type: object - properties: - total: - type: number - description: The total number of comments added to the submission - unread: - type: number - description: The number of unread comments for the current user - googleClassroom: - $ref: '#/components/schemas/GoogleClassroomSubmission' - microsoftGraph: - $ref: '#/components/schemas/MicrosoftGraphSubmission' - lti: - type: object - description: If set, this submission has a linked LTI 1.3 AGS or LTI 1.1 Outcomes - required: - - gradeService - properties: - gradeService: - type: string - description: | - The kind of grading service available for this submission: - - - `ags2p0`: LTI 1.3 Assignment and Grade Services 2.0 - - `outcomes1p1`: LTI 1.1 Outcomes 1.1 - enum: [ags2p0, outcomes1p1] - sourcedid: - type: string - description: The sourcedid of the LTI submission when using LTI Outcomes - description: Assignment Submission + description: The monthly number of views of the score + yearly: + type: number + description: The yearly number of views of the score + description: | + A computed version of the total, weekly, monthly, and yearly number of views of + the score example: - id: 58c4955c226ffff257211a90 - classroom: 58c4725345cd836264f0b29e - assignment: 58c49068524c03ec576ca43c - creator: 559eb5c7f0d4d5e46d03781d - creationDate: 2020-08-12T00:25:00.748000Z - submissionDate: 2020-08-12T00:45:22.748000Z - attachments: - - type: flat - score: 58c4955a226ffff257211a8d - title: Hello - Student - returnDate: 2020-08-15T00:25:00.748000Z - returnCreator: 559eb5c7f0d4d5e46d000000 - grade: 80 - draftGrade: 82 - googleClassroom: - id: CgsI-00000000000 - state: turned_in - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission - AssignmentSubmissionComment: - description: Feedback comment added to an assignment submission + total: 42 + weekly: 10 + monthly: 30 + yearly: 365 + ScorePlaysCounts: type: object properties: - id: - type: string - description: The comment unique identifier - user: - type: string - description: The author unique identifier - submission: - type: string - description: The submission unique identifier - date: + total: + type: number + description: The total number of plays of the score + weekly: + type: number + description: The weekly number of plays of the score + monthly: + type: number + description: The monthly number of plays of the score + yearly: + type: number + description: The yearly number of plays of the score + description: | + A computed version of the total, weekly, monthly, and yearly number of plays of + the score + example: + total: 42 + weekly: 10 + monthly: 30 + yearly: 400 + ScoreRevisionStatistics: + type: object + properties: + additions: + type: number + description: The number of additions operations in the last revision + deletions: + type: number + description: The number of deletions operations in the last revision + startDate: type: string - description: The date when the comment was posted format: date-time - modificationDate: + description: The date of the first action included in this revision + endDate: type: string - description: The date of the last comment modification format: date-time - comment: - type: string - description: The comment text - unread: - type: boolean - description: True if the comment is unread by the current user - AssignmentSubmissionCommentCreation: - description: Creation of a assignment submission comment - required: - - comment + description: The date of the latest action included in this revision + description: | + The statistics related to the score revision (additions and deletions) + example: + additions: 24 + deletions: 5 + ScoreSource: type: object properties: - comment: + googleDrive: type: string - description: The comment text - AssignmentSubmissionHistory: - description: History item of the submission + description: | + If the score is a file on Google Drive, this field property must contain its identifier. To use this method, the Drive file must be public or the Flat Drive App must have access to the file. + example: + googleDrive: 0B-0000000000000001 + ScoreCreation: + oneOf: + - $ref: '#/components/schemas/ScoreCreationBuilderData' + - $ref: '#/components/schemas/ScoreCreationFileImport' + - $ref: '#/components/schemas/ScoreCreationGoogleDriveImport' + ScoreCreationCommon: type: object - required: - - date - - users properties: - date: - description: The date when the submission was changed - type: string - format: date-time - classroom: - description: The classroom unique identifier where the submission was changed + title: type: string - assignment: - description: The assignment unique identifier where the submission was changed + description: | + The title of the new score. If the title is too long, the API may trim this one. + + If this title is not specified, the API will try to (in this order): + - Use the title contained in the file (e.g. [`movement-title`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-movement-title.htm) or [`credit-words`](https://usermanuals.musicxml.com/MusicXML/Content/EL-MusicXML-credit-words.htm) for [MusicXML](http://www.musicxml.com/) files). + - Use the name of the file for files from a specified `source` (e.g. Google Drive) or the one in the `filename` property + - Set a default title (e.g. "New Music Score") + privacy: + $ref: '#/components/schemas/ScorePrivacy' + collection: type: string - submission: - description: The submission unique identifier + description: | + Unique identifier of a collection where the score will be created. + If no collection identifier is provided, the score will not be added to any collection and will only be visible in the `allScores` virtual collection. + googleDriveFolder: type: string - users: - description: The user(s) unique identifier(s) who made the change - type: array - items: + description: | + If the user uses Google Drive and this properties is specified, the file will be created in this directory. The currently user creating the file must be granted to write in this directory. + ScoreCreationFileImport: + allOf: + - $ref: '#/components/schemas/ScoreCreationCommon' + - type: object + required: + - data + properties: + filename: type: string - source: - description: The source of the change if the change was made by a third-party software - type: string - enum: - - lti - - googleClassroom - - microsoftGraph - state: - $ref: '#/components/schemas/AssignmentSubmissionHistoryState' - draftGrade: - type: number - description: The numerator of the grade at this time in the submission grade history - grade: - type: number - description: The numerator of the grade at this time in the submission grade history - maxPoints: - type: number - description: The denominator of the grade at this time in the submission grade history - comment: - type: string - description: The comment that is made to this submission - dueDate: - type: string - description: The due date of this assignment - format: date-time - attachment: - type: object - properties: - score: - type: string - description: The score identifier that changed - revision: - type: string - description: The revision identifier that changed - title: - type: string - description: The title of the score that changed - EduLibrary: - description: A Flat for Education Library + description: If this is an imported file, its filename + data: + type: string + description: | + The data of the score file. See the `POST /scores` endpoint description for the full list of supported formats. + Binary payloads (e.g. compressed MusicXML, MIDI, Guitar Pro) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. + dataEncoding: + type: string + description: The optional encoding of the score data. This property must match the encoding used for the `data` property. + enum: + - base64 + description: A newly created score from an imported file + example: + title: My new score + privacy: private + data: ...[Your actual file will be provided in this property]... + ScoreCreationGoogleDriveImport: + allOf: + - $ref: '#/components/schemas/ScoreCreationCommon' + - type: object + required: + - source + properties: + source: + $ref: '#/components/schemas/ScoreSource' + description: A newly created score from a file from Google Drive + example: + title: My new score + privacy: private + source: + googleDrive: 0B-0000000000000001 + ScoreCreationBuilderData: + allOf: + - $ref: '#/components/schemas/ScoreCreationCommon' + - type: object + required: + - title + - builderData + properties: + builderData: + type: object + required: + - scoreData + properties: + scoreData: + required: + - instruments + type: object + properties: + useTabStaff: + type: boolean + description: true if the TAB staff is displayed with fretted instruments + useChordGrid: + type: boolean + description: true if the chord grid must be displayed with fretted instruments + fifths: + type: number + description: The key signature of the score (expressed between -7 and 7). Major C is used when the value is not provided. + nbBeats: + type: number + description: The number of beats in the measure + beatType: + type: number + description: The duration of a beat in the measure + instruments: + type: array + description: | + The list of instruments to add to the score. + See https://prod.flat-cdn.com/fixtures/instruments_en.json for the possible values for `group` and `instrument`. + items: + required: + - group + - instrument + type: object + properties: + group: + type: string + description: The of the instrument group (e.g. `keyboards`, `brass`) + instrument: + type: string + description: The identifier of the instrument (e.g. `piano`, `trumpet`) + longName: + type: string + description: The full name of the instrument + shortName: + type: string + description: The abbreviation of the name of the instrument + hasQuarterTone: + type: boolean + description: True if the part can use quarter tone (prevent the part to have a TAB/chord grid) + layoutData: + type: object + description: Control the appearance of the score. If missing, default values are used. + properties: + notesSpacingCoeff: + type: number + description: A float value >= 1 that controls the spacing between notes. + lengthUnit: + description: The unit to use for layout customizations + type: string + default: cm + enum: + - cm + - inch + pageHeight: + type: number + description: The height of the page in chosen unit (`lengthUnit`). + pageWidth: + type: number + description: The width of the page in chosen unit (`lengthUnit`). + pageMarginTop: + type: number + description: The top margin of the page in chosen unit (`lengthUnit`). + pageMarginBottom: + type: number + description: The bottom margin of the page in chosen unit (`lengthUnit`). + pageMarginLeft: + type: number + description: The left margin of the page in chosen unit (`lengthUnit`). + pageMarginRight: + type: number + description: The right margin of the page in chosen unit (`lengthUnit`). + example: + title: Violin and Piano + privacy: private + builderData: + scoreData: + fifths: 8 + nbBeats: 2 + beatType: 4 + instruments: + - group: strings + instrument: hq-violin + - group: strings + instrument: hq-grand-piano + shortName: Pno. + longName: Super Piano + layoutData: + notesSpacingCoeff: 2 + lengthUnit: cm + pageHeight: 29.7 + pageWidth: 21 + pageMarginTop: 1.5 + pageMarginBottom: 1.5 + pageMarginLeft: 2.5 + pageMarginRight: 2.5 + ScoreFork: type: object - required: - - id - - name - - type - - visibility properties: - id: + collection: type: string + nullable: true description: | - Unique identifier of the library. + Unique identifier of a collection where the score will be copied. - This one can be used to list the underlying resources using - `GET /v2/eduResources?parent={library-id}` - name: - type: string - description: Name of the lirbary - type: - type: string - description: Type of the library - enum: - - myResources - - organizationResources - - flatEduSamples - visibility: - description: Visibility of the library - type: string - enum: - - private - - organization - - public - example: - id: root - name: My resources - visibility: private - EduResourcePrivacy: - type: string - description: | - The Education resource privacy mode. - default: private - enum: - - private - - organizationPublic - - public - EduResource: - description: A Flat for Education resource contained in a resources library + If no collection identifier is provided, a virtual collection is used, or `null` is provided, the score won't be added to any collection and will only be visible in the `allScores` virtual collection. + googleDriveDisabled: + type: boolean + default: false + description: | + If set to `true`, the API won't create the score on Google Drive + keepOriginalTitle: + type: boolean + description: | + Option to keep the original title of the score (i.e. don't prepend it with "Copy of ", or add the student name in assignment usage). + description: Options to fork the score + ScoreModification: type: object - required: - - id - - type - - title - - capabilities properties: - id: + title: type: string - description: Resource unique identifier - creator: + description: The title of the score + subtitle: type: string - description: The User identifier of the resource creator - type: - $ref: '#/components/schemas/EduResourceType' - privacy: - $ref: '#/components/schemas/EduResourcePrivacy' - tags: - type: array - description: Specific attributes for the resource (e.g. sample resources with custom design) - items: - type: string - parent: + nullable: true + description: The subtitle of the score + composer: type: string - description: Identifier of the parent resource, e.g. a folder or root - title: + nullable: true + description: The composer of the score + lyricist: type: string - description: Title of the resource - sharingDescription: + nullable: true + description: The lyricist of the score + arranger: type: string - description: Sharing description of this resource - creationDate: + nullable: true + description: The arranger of the score + privacy: + $ref: '#/components/schemas/ScorePrivacy' + sharingKey: + pattern: ^[a-f0-9]{128}$ type: string - format: date-time - description: The date when the resource was created - updateDate: + description: When using the `privacy` mode `privateLink`, this property can be used to set a custom sharing key, otherwise a new key will be generated. + description: type: string - format: date-time - description: The date when the resource was updated - resource: - oneOf: - - $ref: '#/components/schemas/Assignment' - - $ref: '#/components/schemas/EduResourceFolder' - capabilities: - description: Capabilities available for this resource - type: object - properties: - canEdit: - type: boolean - description: | - Whether the current user can modify this resource - canAddResources: - type: boolean - description: | - Whether the current user can add resources within this resource (e.g. `assignment` inside a `folder`) - canAddFolders: - type: boolean - description: | - Whether the current user can add folders within this resource (e.g. `folder` inside `root`) - canChangePrivacy: - type: boolean - description: | - Whether the current user can change the privacy of this resource (e.g. to share as `organizationPublic` or unshare it with `private`) - subjects: - $ref: '#/components/schemas/EduResourceSubjects' - grades: - $ref: '#/components/schemas/EduResourceGrades' - EduResourceCreation: - description: Creation of an education resource + maxLength: 2000 + nullable: true + description: Description of the creation + tags: + type: array + description: Tags describing the score + items: + type: string + creationType: + $ref: '#/components/schemas/ScoreCreationType' + license: + $ref: '#/components/schemas/ScoreLicense' + licenseText: + type: string + nullable: true + description: The rights info written on the score + description: Edit the score metadata + example: + privacy: private + ScoreRevision: type: object required: - - type - - title + - id + - score + - date properties: - type: - $ref: '#/components/schemas/EduResourceType' - title: + id: type: string - description: Title of the resource - maxLength: 1000 - minLength: 1 - parent: + description: The unique identifier of the revision. + user: type: string - default: root - description: Identifier of the parent resource where the new one will created, e.g. a folder id or `root` - EduResourceUpdate: - description: Update of an education resource + description: The user identifier who created the revision + score: + type: string + description: The score identifier + collaborators: + type: array + items: + type: string + description: | + The list of user identifier or collaborators who worked on this + revision. This is list is built from the history of the revision + specified during the creation of the revision. + date: + type: string + description: The date when this revision was created + format: date-time + event: + type: string + description: The last event (action id) of the revision + description: + type: string + description: A description associated to the revision + autosave: + type: boolean + description: | + True if this revision was automatically generated by Flat and not on + purpose by the user. + statistics: + $ref: '#/components/schemas/ScoreRevisionStatistics' + description: A score revision metadata + example: + user: '000000000000000000000020' + collaborators: + - '000000000000000000000010' + - '000000000000000000000020' + description: New revision + autosave: true + ScoreRevisionCreation: + required: + - data type: object properties: - title: + data: type: string - description: Title of the resource - maxLength: 1000 - minLength: 1 - sharingDescription: + description: | + The data of the score file. It must be a MusicXML 3 file (`vnd.recordare.musicxml` or `vnd.recordare.musicxml+xml`), a MIDI file (`audio/midi`) or a Flat.json (aka Adagio.json) file. + Binary payloads (`vnd.recordare.musicxml` and `audio/midi`) can be encoded in Base64, in this case the `dataEncoding` property must match the encoding used for the API request. + example: + dataEncoding: type: string - description: Sharing description of the resource - maxLength: 400 - privacy: - $ref: '#/components/schemas/EduResourcePrivacy' - subjects: - $ref: '#/components/schemas/EduResourceSubjects' - grades: - $ref: '#/components/schemas/EduResourceGrades' - EduResourceType: - description: Type of an education resource - type: string - enum: - - assignment - - folder - EduResourceFolder: - description: Education resources folder + description: The optional encoding of the score data. This property must match the encoding used for the `data` property. + enum: + - base64 + autosave: + type: boolean + description: | + Must be set to `true` if the revision was created automatically. + description: + type: string + description: A description associated to the revision + description: A new created revision + example: + data: + history: + - id: b278ad43-2e99-4e60-a782-ac119b294ab8 + userId: '000000000000000000000010' + fnc: action.AddMeasure + args: + previousUuid: 888cb742-2110-a050-ba71-28300ba6d61f + measureUuid: 0be9f739-3213-f312-bb0a-00ad0c787ef7 + autosave: true + description: New revision + ScoreCommentContext: + required: + - measureUuids + - partUuid + - startDpq + - startTimePos + - stopDpq + - stopTimePos type: object properties: - title: + partUuid: type: string - description: Title of the folder - assignmentsTypes: - description: The assignment type of the resources that are included in the folder, + description: The unique identifier (UUID) of the score part + staffIdx: + type: number + description: (Deprecated, use `staffUuid`) The identififer of the staff + deprecated: true + staffUuid: + type: string + description: The unique identififer (UUID) of the staff + measureUuids: type: array + description: The list of measure UUIds items: - $ref: '#/components/schemas/AssignmentType' - resourcesCount: - description: The number of resources inside the folder + type: string + startTimePos: type: number - EduResourceMove: - description: Move an education resource - type: object + stopTimePos: + type: number + startDpq: + type: number + stopDpq: + type: number + description: | + The context of the comment (for inline/contextualized comments). A context will include all the information related to the location of the comment (i.e. score parts, range of measure, time position). + example: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + ScoreCommentCreation: required: - - destination - properties: - destination: - type: string - description: | - Unique identifier of the destination of the folder where to move this resource. - This can also be `root` to move the resource at the root of the user resource library. - EduResourceCopy: - description: Copy an education resource + - comment type: object - required: - - destination properties: - destination: + revision: type: string description: | - Unique identifier of the destination of the folder where to copy this resource. - This can also be `root` to copy the resource at the root of the user resource library. - EduResourceUseInClass: - description: Use an education resource in class - type: object - required: - - classroom - properties: - classroom: + The unique identifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. + comment: type: string - description: The destination classroom where the resource will be copied. - assignment: + description: | + The comment text that can includes mentions using the following format: `@[id:username]`. + rawComment: type: string - description: An optional destination assignment where the original assignement will be copied. Must be a draft. - EduResourceLtiLink: - description: LTI Link details for the class - type: object - required: - - ltiUrl - properties: - ltiUrl: + description: | + A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. + mentions: + type: array + description: The list of user identifiers mentioned in this comment + items: + type: string + replyTo: type: string - description: An URL that can be used to launch LTI with this resource in a classroom. - EduResourceSubjects: - description: The subjects of this resource, or the subjects of the resources included in the folder - type: array - items: - $ref: '#/components/schemas/TeachingTheme' - EduResourceGrades: - description: The grades of this resource, or the grades of the resources included in the folder. - type: array - items: - $ref: '#/components/schemas/Grade' - MicrosoftGraphAssignment: + description: | + When the comment is a reply to another comment, the unique identifier of the parent comment + context: + $ref: '#/components/schemas/ScoreCommentContext' + description: Creation of a comment + example: + revision: '000000000000000000000010' + comment: '@[000000000000000000000000:flat] Great work!' + rawComment: '@flat: Great work!' + mentions: + - '000000000000000000000000' + replyTo: '000000000000000000000000' + context: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + ScoreCommentUpdate: type: object - description: A Microsoft Teams asignment properties: - id: + revision: type: string - description: Identifier of the assignement assigned by Microsoft Teams - state: + description: | + The unique identifier of the revision of the score where the comment was added. If this property is unspecified or contains "last", the API will automatically take the last revision created. + comment: + maxLength: 10000 + minLength: 1 type: string - description: State of the assignment - alternateLink: + description: | + The comment text that can includes mentions using the following format: `@[id:username]`. + rawComment: + maxLength: 10000 + minLength: 1 type: string - description: Absolute link to this assignement in the Microsoft Teams web UI - categories: - type: array - description: List of categories where this assignment is published under - items: - type: string - description: A Microsoft Teams assignment category ID + description: | + A raw version of the comment, that can be displayed without the mentions. If you use mentions, this property must be set. + context: + $ref: '#/components/schemas/ScoreCommentContext' + description: Update of a comment example: - id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda - state: draft - alternateLink: https://teams.microsoft.com/l/entity - categories: [0a012acd-6e78-4cd0-89a9-80d296e48f82] - MicrosoftGraphSubmission: + revision: '000000000000000000000011' + comment: '@[000000000000000000000000:flat] Great work!' + rawComment: '@flat: Great work!' + mentions: + - '000000000000000000000000' + replyTo: '000000000000000000000000' + context: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + ScoreComment: type: object - description: A Microsoft Teams submission required: - id - - state + - type + - user + - score + - comment + - rawComment + - date properties: id: type: string - description: Identifier of the submission assigned by Microsoft Teams - state: + description: The comment unique identifier + type: type: string - description: State of the submission - example: - id: 8e460d32-d2d4-46b3-8e1a-9b7677a48fda - state: returned - GoogleClassroomCoursework: - type: object - properties: - id: + description: The type of the comment + enum: + - document + - inline + user: type: string - description: Identifier of the coursework assigned by Classroom - state: + description: The author unique identifier + score: type: string - description: State of the coursework - alternateLink: + description: The unique identifier of the score where the comment was posted + revision: type: string - description: Absolute link to this coursework in the Classroom web UI - topicId: + description: The unique identifier of revision the comment was posted + replyTo: type: string - nullable: true - description: Identifier of the topic where the assignment is created - description: A coursework on Google Classroom + description: | + When the comment is a reply to another comment, the unique identifier of the parent comment + date: + type: string + description: The date when the comment was posted + format: date-time + modificationDate: + type: string + description: The date of the last comment modification + format: date-time + comment: + type: string + description: | + The comment text that can includes mentions using the following + format: `@[id:username]`. + rawComment: + type: string + description: | + A raw version of the comment, that can be displayed without parsing + the mentions. + context: + $ref: '#/components/schemas/ScoreCommentContext' + mentions: + type: array + description: The list of user identifier mentioned on the score + items: + type: string + resolved: + type: boolean + description: | + For inline comments, the comment can be marked as resolved and will be hidden in the future responses + resolvedBy: + type: string + description: | + If the user is marked as resolved, this will contain the unique identifier of the User who marked this comment as resolved + moderation: + type: object + description: Information about the comment being moderated + properties: + hidden: + type: boolean + description: If true, this comment will be hidden from other users + reason: + type: string + description: If the comment is hidden, the reason why this one has been moderated + enum: + - spam + - inappropriate + spam: + type: boolean + description: | + `true if the message has been detected as spam and hidden from other users + description: Comment added on a sheet music example: - id: '1235665432' - state: draft - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/detail - GoogleClassroomSubmission: + id: '000000000000000000000010' + type: inline + user: '000000000000000000000001' + score: '000000000000000000000042' + revision: '000000000000000000000011' + replyTo: '000000000000000000000000' + comment: '@[000000000000000000000000:flat] Great work!' + rawComment: '@flat: Great work!' + context: + partUuid: 91982db7-2e6d-285e-7a19-76b4bd005b8b + staffUuid: 9395d8f3-f42b-47b6-8c5d-6ba704961ec0 + measureUuids: + - e6a6a60b-8710-f819-9a49-e907b19c6f1f + - da83d93c-e3a6-3c73-1bbe-15e5131d6437 + - 056ec5eb-9213-df56-6ae8-d9b99673dc48 + startDpq: 1 + stopDpq: 1 + startTimePos: 2 + stopTimePos: 3 + mentions: + - '000000000000000000000000' + resolved: true + resolvedBy: '000000000000000000000000' + spam: false + MediaScoreSharingMode: + type: string + description: The sharing mode of the score for classes post and assignments + default: read + enum: + - read + - write + - copy + - performance + TaskExportOptions: type: object + properties: + parts: + type: array + description: A list of parts to specifically export + items: + type: string + description: | + Options for the requested export + example: + parts: + - 49b7d7c5-7490-4f76-9813-607f79e5b92b + - 96b5066b-54ed-4c6b-b3fc-cb7281403a89 + Task: + type: object + description: An asynchronous task required: - id - state - - alternateLink properties: id: type: string - description: Identifier of the coursework submission assigned by Classroom - state: + description: Unique identifier of the task + type: type: string - description: State of the submission on Google Classroom - alternateLink: + description: | + Type of the task: + * `audio-export`: Exports a score to audio format (MP3, WAV) + * `score-save`: Saves or updates a score document + state: type: string - description: Absolute link to this coursework in the Classroom web UI - description: A coursework submission on Google Classroom - example: - id: CgsI-00000000000 - state: turned_in - alternateLink: http://classroom.google.com/c/music-theory/a/first-assignment/submissions/student/my-submission - GroupDetails: - type: object - properties: - id: + description: State of the Task + enum: + - created + - blocked + - doing + - done + - canceled + - error + format: type: string - description: The unique identifier of the group - name: + description: For files processing, the file format (e.g. `mp3`, `wav`) + score: type: string - description: The displayable name of the group - type: - $ref: '#/components/schemas/GroupType' - organization: + description: The score unique identifier for tasks related to scores + revision: type: string - description: The unique identifier of the Organization owning the group + description: The score revision identifier for tasks related to scores + progress: + type: object + description: Details about the task progression + properties: + percent: + type: number + description: Percent of the task progression + text: + type: string + description: Text details of the task progress creationDate: type: string - description: The date when the group was create + description: The creation date of the task format: date-time - usersCount: - type: number - description: The number of students in this group - readOnly: + modificationDate: + type: string + description: The last modification date of the task + format: date-time + doneDate: + type: string + description: The date when the task has been completed + format: date-time + result: + type: object + description: Optional result information about this task + properties: + url: + description: URL returned by the task worker + type: string + error: + description: Error returned by task worker + type: string + errorHistory: + type: array + description: If any errors happened when processing this task, the list of errors identifiers + items: + type: string + isCancellable: type: boolean description: | - `true` if the properties and members of this group are in in read-only - description: The details of a group - example: - id: 58c4955c226ffff257211a00 - name: 5th Grade - Teachers - type: classTeachers - organization: '0000000000000000000000042' - creationDate: 2017-07-02T15:02:40.207000Z - usersCount: 2 - readOnly: false - GroupType: - type: string - description: The type of the group - enum: - - generic - - classTeachers - - classStudents - ClassState: - type: string - description: The state of a classroom - enum: - - active - - inactive - - archived - - deleted - MediaScoreSharingMode: - type: string - description: The sharing mode of the score for classes post and assignments - default: read - enum: - - read - - write - - copy - - performance - MediaAttachment: + Whether the task can be canceled by the user. + Only `true` when the task is in `created` state (waiting to be processed). + readOnly: true + children: + type: array + description: Child tasks for hierarchical task structures (e.g., conversion subtasks) + items: + $ref: '#/components/schemas/Task' + UserBasics: type: object required: + - id - type + - product + - username + - picture properties: + id: + type: string + description: The user unique identifier type: type: string - description: | - The type of the assignment resolved: - * `rich`, `photo`, `video` are automatically resolved as `link` - * A `flat` attachment is a score document where the unique identifier will be specified in the `score` property. Its sharing mode will be provided in the `sharingMode` property. + description: The type of user account enum: - - rich - - photo - - video - - link - - flat - - googleDrive - - worksheet - score: - type: string - description: An unique Flat score identifier - revision: + - user + - guest + product: + $ref: '#/components/schemas/TutteoProduct' + username: type: string - description: An unique revision identifier of a score - worksheet: + description: The user name (unique for the organization) + printableName: type: string - description: An unique worksheet identifier - dedicated: - type: boolean - description: True if the resource is dedicated for the assignment (for scores and worksheets), meaning on the user-side this one is stored in the assignment - track: + description: The name that can be directly printed (name, firstname & lastname, or username) + firstname: type: string - description: A unique track identifier - sharingMode: - $ref: '#/components/schemas/MediaScoreSharingMode' - lockScoreTemplate: - type: boolean - description: To be used with a score attached in `sharingMode` `copy` (score used as template). If true, students won't be able to change the original notes of the template. - title: + description: Firstname of the user (for education users) + lastname: type: string - description: The resolved title of the attachment - description: + description: Lastname of the user (for education users) + name: type: string - description: The resolved description of the attachment - html: + description: A displayable name for the user (for consumer users) + picture: type: string + nullable: true + description: The URL of the picture to display + badges: + type: array description: | - If the attachment type is `rich` or `video`, the HTML code of the - media to display - htmlWidth: - type: string - description: If the `html` is available, the width of the widget - htmlHeight: - type: string - description: If the `html` is available, the height of the widget - url: - type: string - description: The url of the attachment - thumbnailUrl: + List of badges for the user profile: + + - `power` + - `staff` + - `composerOfTheMonth` + - `ambassador` + - `challenge` + items: + type: string + description: Badge name + example: + id: '000000000000000000000001' + username: flat + name: Flat Team + printableName: Flat Team + picture: https://flat.io/img/logo_flat.svg + badges: + - power + - staff + UserPublicSummary: + description: Public User details summary + allOf: + - $ref: '#/components/schemas/UserBasics' + - type: object + properties: + organization: + type: string + description: Organization ID (for Edu users only) + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + classRole: + $ref: '#/components/schemas/ClassRoles' + htmlUrl: + type: string + description: Link to user profile (for Indiv. users only) + UserPublic: + description: Public User details + allOf: + - $ref: '#/components/schemas/UserPublicSummary' + - type: object + properties: + bio: + type: string + description: User's biography + registrationDate: + type: string + description: Date the user signed up + format: date-time + likedScoresCount: + type: integer + description: Number of the scores liked by the user + followersCount: + type: integer + description: Number of followers the user have + followingCount: + type: integer + description: Number of people the user follow + ownedPublicScoresCount: + type: integer + description: Number of public scores the user have + allPublicScoresCount: + type: integer + description: Total number of public scores the user participates in (owned + joined) + likesCount: + type: integer + description: Number of likes on the user published scores + playsCount: + type: integer + description: Number of plays on the user published scores + coverPicture: + type: string + description: Cover picture (backgroud) for the profile + nullable: true + profileTheme: + type: string + description: Theme (background) for the profile + links: + $ref: '#/components/schemas/UserCommunityProfileLinks' + UserDetailsAdmin: + description: User details (view for organization teacher / admin) + allOf: + - $ref: '#/components/schemas/UserPublicSummary' + - type: object + properties: + email: + type: string + description: Email of the user + format: email + lastActivityDate: + type: string + description: Date of the last user activity + format: date-time + license: + type: object + properties: + id: + type: string + description: ID of the current license + expirationDate: + type: string + description: Date when the license expires + format: date-time + source: + $ref: '#/components/schemas/LicenseSources' + mode: + $ref: '#/components/schemas/LicenseMode' + active: + type: boolean + description: ID of the current license + description: Current active license of the user + groups: + description: For Flat for Education accounts, list of Group identifiers the user is part of. + type: array + items: + type: string + description: Unique group identifier + isEduTestingStudent: + type: boolean + description: | + Indicates if the user account is marked as a testing student account. + Testing students are typically excluded from certain educational integrations and workflows. + This field helps API clients distinguish between regular students and testing accounts. + UserCreation: + required: + - password + - username + type: object + properties: + username: + maxLength: 30 + minLength: 1 type: string - description: | - If the attachment type is `rich`, `video`, `photo` or `link`, a - displayable thumbnail for this attachment - thumbnailWidth: - type: integer - description: | - If the `thumbnailUrl` is available, the width of the thumbnail - thumbnailHeight: - type: integer - description: | - If the `thumbnailUrl` is available, the width of the thumbnail - authorName: + description: Username of the new account + firstname: + maxLength: 60 type: string - description: The resolved author name of the attachment - authorUrl: + description: First name of the user + lastname: + maxLength: 60 type: string - description: The resolved author url of the attachment - iconUrl: + description: Last name of the user + email: type: string - description: The URL of the icon - mimeType: + description: Email of the new account + format: email + password: + minLength: 6 + maxLength: 1000 type: string - description: The mine type of the file - googleDriveFileId: + description: Password of the new account + format: password + locale: + description: User language. Input values will be automatically normalized to a supported locale code. type: string - description: The ID of the Google Drive File - description: | - Media attachment. The API will automatically resolve the details, oEmbed, - and media available if possible and return them in this object - example: - type: video - url: https://www.youtube.com/watch?v=SNbRUiBZ4Uw - title: Flat - The online collaborative music notation software - description: Discover Flat on https://flat.io - html: - thumbnailUrl: https://i.ytimg.com/vi/SNbRUiBZ4Uw/maxresdefault.jpg - thumbnailHeight: 1052 - thumbnailWidth: 1868 - authorName: Flat - authorUrl: https://www.youtube.com/channel/UCEUIbEP9Rba_g0r4eeGhmXw - Task: + default: en + role: + description: Role of the new account + type: string + default: user + enum: + - user + - teacher + - admin + description: User creation + UserAdminUpdate: type: object - description: An asynchronous task - required: - - id - - state properties: - id: + password: + minLength: 6 + maxLength: 1000 type: string - description: Unique identifier of the task - type: + description: Password of the account + format: password + organizationRole: + $ref: '#/components/schemas/OrganizationRoles' + username: + maxLength: 30 + minLength: 1 type: string - description: Type of the task (e.g. audio-export) - state: + description: Username of the account + firstname: + maxLength: 60 type: string - description: State of the Task - enum: - - created - - doing - - done - - canceled - - error - format: + description: First name of the user + lastname: + maxLength: 60 type: string - description: For files processing, the file format (e.g. `mp3`, `wav`) - score: + description: Last name of the user + email: type: string - description: The score unique identifier for tasks related to scores - progress: - type: object - description: Details about the task progression - properties: - percent: - type: number - description: Percent of the task progression - text: - type: string - description: Text details of the task progress - creationDate: + description: Email of the account + format: email + description: User update as an organization admin + UserAzureDetails: + type: object + properties: + oid: type: string - description: The creation date of the task - format: date-time - modificationDate: + description: User object identifier on Azure AD + hd: type: string - description: The last modification date of the task - format: date-time - doneDate: + description: User tenant (domain name) + preferredUsername: type: string - description: The date when the task has been completed - format: date-time - result: - type: object - description: Optional result information about this task - properties: - url: - description: URL returned by the task worker - type: string - error: - description: Error returned by task worker + description: User Preferred Username (UPN), i.e. the main email of the user + UserDetails: + description: User details + allOf: + - $ref: '#/components/schemas/UserPublic' + - type: object + properties: + isEmailVerified: + type: boolean + description: Whether the user's email address has been verified + azureDetails: + $ref: '#/components/schemas/UserAzureDetails' + privateProfile: + type: boolean + description: Tell either this user profile is private or not (individual accounts only) + locale: + $ref: '#/components/schemas/FlatLocalesString' + groups: + description: For Flat for Education accounts, list of Group identifiers the user is part of. + type: array + items: type: string - errorHistory: - type: array - description: If any errors happened when processing this task, the list of errors identifiers - items: + description: Unique group identifier + pictureFile: type: string - FlatErrorResponse: - description: An API Error response + nullable: true + description: The ID of the user profile picture + coverPictureFile: + type: string + nullable: true + description: The ID of the user profile cover picture + UserSigninLinkCreation: type: object - required: - - code - - message properties: - code: + destinationPath: type: string - description: A corresponding code for this error - message: + description: Path to redirect to after signin + default: / + example: + destinationPath: /class + UserSigninLink: + type: object + properties: + url: type: string - description: A printable message for this error - id: + description: URL to use to sign in to this account + token: type: string - description: An unique error identifier generated for the request - param: + description: Raw sign-in token, can be used to build custom URLs (e.g. deep links) + expirationDate: type: string - description: The related parameter that caused the error + description: Date when the link expires + format: date-time example: - code: CLIENT_ERROR - message: Invalid request - id: '123456789' + url: https://demo.flat.io/auth/signin-link/00000000-0000-0000-0000-000000000000?next=%2F + token: 0 + OrganizationUserAccessTokenCreation: + required: + - scopes + type: object + properties: + scopes: + type: array + description: List of requested scopes for this credential + items: + $ref: '#/components/schemas/AppScopes' + description: Creation of a delegated API access token for an organization user + example: + scopes: + - account.public_profile + - account.education_profile + - edu.classes.readonly UserCommunityProfileLinks: type: object description: Social networks links @@ -8034,36 +9476,6 @@ components: type: string nullable: true description: Personnal website URL - TeachingTheme: - type: string - description: Teaching theme - enum: - - composition - - music-theory - - general-music - - band - - choir - - orchestra - - jazz-ensemble - - music-technology - - other - Grade: - type: string - description: Class grade of the resource - enum: - - '1' - - '2' - - '3' - - '4' - - '5' - - '6' - - '7' - - '8' - - '9' - - '10' - - '11' - - '12' - - university parameters: limit: name: limit @@ -8090,6 +9502,18 @@ components: The paginated API URLs are returned in the `Link` header when requesting the API. These URLs will contain a `next` and `previous` cursor based on the available data. schema: type: string + eventProperties: + name: eventProperties + in: query + description: | + Optional analytics properties merged into XP tracking for this request. + + JSON-encoded string representing event properties. Example: + + - `?eventProperties={"context":"discover","screenLevel0":"home"}` + schema: + type: string + example: '{"context":"discover","screenLevel0":"home","screenRoute":"/discover"}' sortDirection: name: direction in: query @@ -8174,3 +9598,44 @@ components: description: Filter users who don't have an active license schema: type: boolean + testAccounts: + name: testAccounts + in: query + description: | + Filter users based on test account status. + Test accounts are student accounts created for testing purposes by teachers. + + * `exclude`: Hide test accounts from results. + * `only`: Show only test accounts. + + When omitted, all users are returned. + schema: + type: string + enum: + - exclude + - only + headers: + X-Flat-User: + description: User identifier from the session + schema: + type: string + X-Flat-Access-Token: + description: Access token for API authentication + schema: + type: string + X-CSRF-Token: + description: CSRF protection token + schema: + type: string + X-Flat-Organization: + description: Organization identifier from the session + schema: + type: string + X-Server-Date: + description: | + Server timestamp (ISO 8601) captured at the start of the request. + Use as `modifiedSince` or `deletedSince` value for the next sync call + to avoid clock skew between the client and server. + schema: + type: string + format: date-time From a80ba291f281035ed6d19250b729a8194a679f55 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Tue, 7 Apr 2026 21:15:24 +0000 Subject: [PATCH 2/2] fix: package.json & pnpm-lock.yaml to reduce vulnerabilities The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-BRACEEXPANSION-15789759 --- package.json | 4 +- pnpm-lock.yaml | 2326 +++++++++++++----------------------------------- 2 files changed, 621 insertions(+), 1709 deletions(-) diff --git a/package.json b/package.json index d281822..d3bee99 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,11 @@ "bower": "1.8.14", "connect": "3.7.0", "cors": "2.8.5", - "gulp": "4.0.2", + "gulp": "5.0.0", "gulp-connect": "5.7.0", "gulp-util": "3.0.8", "portfinder": "1.0.32", - "shelljs": "0.8.5" + "shelljs": "0.9.0" }, "private": true, "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef12312..4157b41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ importers: specifier: 2.8.5 version: 2.8.5 gulp: - specifier: 4.0.2 - version: 4.0.2 + specifier: 5.0.0 + version: 5.0.0 gulp-connect: specifier: 5.7.0 version: 5.7.0 @@ -33,8 +33,8 @@ importers: specifier: 1.0.32 version: 1.0.32 shelljs: - specifier: 0.8.5 - version: 0.8.5 + specifier: 0.9.0 + version: 0.9.0 packages: @@ -66,6 +66,14 @@ packages: resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} engines: {node: '>=14.0.0', npm: '>=6.0.0'} + '@gulpjs/messages@1.1.0': + resolution: {integrity: sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==} + engines: {node: '>=10.13.0'} + + '@gulpjs/to-absolute-glob@4.0.0': + resolution: {integrity: sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==} + engines: {node: '>=10.13.0'} + '@humanwhocodes/momoa@2.0.4': resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} @@ -74,6 +82,18 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@opentelemetry/api-logs@0.202.0': resolution: {integrity: sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw==} engines: {node: '>=8.0.0'} @@ -237,10 +257,6 @@ packages: ajv: optional: true - ansi-colors@1.1.0: - resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==} - engines: {node: '>=0.10.0'} - ansi-colors@2.0.5: resolution: {integrity: sha512-yAdfUZ+c2wetVNIFsNRn44THW+Lty6S5TwMpUfLA/UaGhiXbBv/F8E60/1hMLd0cnF/CDoWH8vzVaI5bAcHCjw==} engines: {node: '>=6'} @@ -269,39 +285,13 @@ packages: resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==} engines: {node: '>=0.10.0'} - anymatch@2.0.0: - resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} - - append-buffer@1.0.2: - resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==} - engines: {node: '>=0.10.0'} - - archy@1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - arr-diff@4.0.0: - resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} - engines: {node: '>=0.10.0'} - - arr-filter@1.1.2: - resolution: {integrity: sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==} - engines: {node: '>=0.10.0'} - - arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - - arr-map@2.0.2: - resolution: {integrity: sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==} - engines: {node: '>=0.10.0'} - - arr-union@3.1.0: - resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} - engines: {node: '>=0.10.0'} - array-differ@1.0.0: resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==} engines: {node: '>=0.10.0'} @@ -310,56 +300,36 @@ packages: resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==} engines: {node: '>=0.10.0'} - array-initial@1.1.0: - resolution: {integrity: sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==} - engines: {node: '>=0.10.0'} - - array-last@1.3.0: - resolution: {integrity: sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==} - engines: {node: '>=0.10.0'} - array-slice@1.1.0: resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==} engines: {node: '>=0.10.0'} - array-sort@1.0.0: - resolution: {integrity: sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==} - engines: {node: '>=0.10.0'} - array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} - array-unique@0.3.2: - resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} - engines: {node: '>=0.10.0'} - - assign-symbols@1.0.0: - resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} - engines: {node: '>=0.10.0'} - - async-done@1.3.2: - resolution: {integrity: sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==} - engines: {node: '>= 0.10'} - - async-each@1.0.6: - resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} + async-done@2.0.0: + resolution: {integrity: sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==} + engines: {node: '>= 10.13.0'} - async-settle@1.0.0: - resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==} - engines: {node: '>= 0.10'} + async-settle@2.0.0: + resolution: {integrity: sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==} + engines: {node: '>= 10.13.0'} async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true - bach@1.2.0: - resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==} - engines: {node: '>= 0.10'} + bach@2.0.1: + resolution: {integrity: sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==} + engines: {node: '>=10.13.0'} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -368,9 +338,16 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - base@0.11.2: - resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} - engines: {node: '>=0.10.0'} + bare-events@2.8.2: + resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -385,12 +362,12 @@ packages: peerDependencies: ajv: 4.11.8 - 8 - binary-extensions@1.13.1: - resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} - engines: {node: '>=0.10.0'} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} body@5.1.0: resolution: {integrity: sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==} @@ -400,9 +377,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -410,24 +384,16 @@ packages: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} - braces@2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - - buffer-equal@1.0.1: - resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} - engines: {node: '>=0.4'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} bytes@1.0.0: resolution: {integrity: sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==} - cache-base@1.0.1: - resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} - engines: {node: '>=0.10.0'} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -435,10 +401,6 @@ packages: call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - camelcase@3.0.0: - resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==} - engines: {node: '>=0.10.0'} - camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} @@ -450,32 +412,19 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chokidar@2.1.8: - resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} - - class-utils@0.3.6: - resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} - engines: {node: '>=0.10.0'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - cliui@3.2.0: - resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - clone-buffer@1.0.0: - resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} - engines: {node: '>= 0.10'} - clone-stats@0.0.1: resolution: {integrity: sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==} - clone-stats@1.0.0: - resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -484,25 +433,10 @@ packages: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} - cloneable-readable@1.1.3: - resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - code-point-at@1.1.0: - resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} - engines: {node: '>=0.10.0'} - - collection-map@1.0.0: - resolution: {integrity: sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==} - engines: {node: '>=0.10.0'} - - collection-visit@1.0.0: - resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} - engines: {node: '>=0.10.0'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -520,16 +454,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - component-emitter@1.3.1: - resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - connect-livereload@0.6.1: resolution: {integrity: sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==} @@ -540,19 +464,16 @@ packages: continuable-cache@0.3.1: resolution: {integrity: sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - copy-descriptor@0.1.1: - resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} - engines: {node: '>=0.10.0'} - - copy-props@2.0.5: - resolution: {integrity: sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==} + copy-props@4.0.0: + resolution: {integrity: sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==} + engines: {node: '>= 10.13.0'} core-js@3.37.1: resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} @@ -564,6 +485,10 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} @@ -574,10 +499,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - dateformat@2.2.0: resolution: {integrity: sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==} @@ -606,45 +527,13 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decko@1.2.0: resolution: {integrity: sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - - default-compare@1.0.0: - resolution: {integrity: sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==} - engines: {node: '>=0.10.0'} - - default-resolution@2.0.0: - resolution: {integrity: sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==} - engines: {node: '>= 0.10'} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - define-property@0.2.5: - resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} - engines: {node: '>=0.10.0'} - - define-property@1.0.0: - resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} - engines: {node: '>=0.10.0'} - - define-property@2.0.2: - resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} - engines: {node: '>=0.10.0'} - depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -674,11 +563,9 @@ packages: duplexer2@0.0.2: resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==} - duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} - - each-props@1.3.2: - resolution: {integrity: sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==} + each-props@3.0.0: + resolution: {integrity: sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==} + engines: {node: '>= 10.13.0'} ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -693,9 +580,6 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error@7.2.1: resolution: {integrity: sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==} @@ -707,23 +591,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - - es6-weak-map@2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -735,17 +605,10 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -753,32 +616,20 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - expand-brackets@2.1.4: - resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} - engines: {node: '>=0.10.0'} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - - extend-shallow@3.0.2: - resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} - engines: {node: '>=0.10.0'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - extglob@2.0.4: - resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} - engines: {node: '>=0.10.0'} - fancy-log@1.3.3: resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==} engines: {node: '>= 0.10'} @@ -786,8 +637,15 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-levenshtein@1.1.4: - resolution: {integrity: sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -802,43 +660,36 @@ packages: resolution: {integrity: sha512-go2J2xODMc32hT+4Xr/bBGXMaIoiCwrwp2mMtAvKyvEFW6S/v5Gn2pBmE4nvbwNjGhpcAiOwEv7R6/GZ6XRa9w==} hasBin: true + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + faye-websocket@0.10.0: resolution: {integrity: sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==} engines: {node: '>=0.4.0'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - fill-range@4.0.0: - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} - engines: {node: '>=0.10.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} - find-up@1.1.2: - resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} - engines: {node: '>=0.10.0'} - - findup-sync@2.0.0: - resolution: {integrity: sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==} - engines: {node: '>= 0.10'} - - findup-sync@3.0.0: - resolution: {integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==} - engines: {node: '>= 0.10'} - - fined@1.2.0: - resolution: {integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==} - engines: {node: '>= 0.10'} + findup-sync@5.0.0: + resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} + engines: {node: '>= 10.13.0'} - flagged-respawn@1.0.1: - resolution: {integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==} - engines: {node: '>= 0.10'} + fined@2.0.0: + resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==} + engines: {node: '>= 10.13.0'} - flush-write-stream@1.1.1: - resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + flagged-respawn@2.0.0: + resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} + engines: {node: '>= 10.13.0'} for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} @@ -851,33 +702,22 @@ packages: foreach@2.0.6: resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} - fragment-cache@0.2.1: - resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} - engines: {node: '>=0.10.0'} - fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fs-mkdirp-stream@1.0.0: - resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==} - engines: {node: '>= 0.10'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs-mkdirp-stream@2.0.1: + resolution: {integrity: sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==} + engines: {node: '>=10.13.0'} - fsevents@1.2.13: - resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} - engines: {node: '>= 4.0'} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - deprecated: Upgrade to fsevents v2 to mitigate potential security issues function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - get-caller-file@1.0.3: - resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -886,29 +726,30 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-value@2.0.6: - resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} - engines: {node: '>=0.10.0'} + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} - glob-parent@3.1.0: - resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} - glob-stream@6.1.0: - resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==} - engines: {node: '>= 0.10'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} - glob-watcher@5.0.5: - resolution: {integrity: sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==} - engines: {node: '>= 0.10'} + glob-stream@8.0.3: + resolution: {integrity: sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==} + engines: {node: '>=10.13.0'} + + glob-watcher@6.0.0: + resolution: {integrity: sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==} + engines: {node: '>= 10.13.0'} glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} @@ -921,15 +762,19 @@ packages: resolution: {integrity: sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==} engines: {node: '>= 0.10'} + glogg@2.2.0: + resolution: {integrity: sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==} + engines: {node: '>= 10.13.0'} + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gulp-cli@2.3.0: - resolution: {integrity: sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==} - engines: {node: '>= 0.10'} + gulp-cli@3.1.0: + resolution: {integrity: sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==} + engines: {node: '>=10.13.0'} hasBin: true gulp-connect@5.7.0: @@ -941,15 +786,19 @@ packages: engines: {node: '>=0.10'} deprecated: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5 - gulp@4.0.2: - resolution: {integrity: sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==} - engines: {node: '>= 0.10'} + gulp@5.0.0: + resolution: {integrity: sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==} + engines: {node: '>=10.13.0'} hasBin: true gulplog@1.0.0: resolution: {integrity: sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==} engines: {node: '>= 0.10'} + gulplog@2.2.0: + resolution: {integrity: sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==} + engines: {node: '>= 10.13.0'} + handlebars@4.7.9: resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} @@ -978,22 +827,6 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - has-value@0.3.1: - resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} - engines: {node: '>=0.10.0'} - - has-value@1.0.0: - resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} - engines: {node: '>=0.10.0'} - - has-values@0.1.4: - resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} - engines: {node: '>=0.10.0'} - - has-values@1.0.0: - resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} - engines: {node: '>=0.10.0'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1002,9 +835,6 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - http-errors@1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} @@ -1023,9 +853,12 @@ packages: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -1040,68 +873,30 @@ packages: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} - invert-kv@1.0.0: - resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} - engines: {node: '>=0.10.0'} + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} is-absolute@1.0.0: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} engines: {node: '>=0.10.0'} - is-accessor-descriptor@1.0.1: - resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} - engines: {node: '>= 0.10'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-binary-path@1.0.1: - resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} - engines: {node: '>=0.10.0'} - - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} is-core-module@2.14.0: resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} engines: {node: '>= 0.4'} - is-data-descriptor@1.0.1: - resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} - engines: {node: '>= 0.4'} - - is-descriptor@0.1.7: - resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} - engines: {node: '>= 0.4'} - - is-descriptor@1.0.3: - resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} - engines: {node: '>= 0.4'} - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - - is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@1.0.0: - resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} - engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-glob@3.1.0: - resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} - engines: {node: '>=0.10.0'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1110,17 +905,9 @@ packages: resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} engines: {node: '>=0.10.0'} - is-number@3.0.0: - resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} - engines: {node: '>=0.10.0'} - - is-number@4.0.0: - resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==} - engines: {node: '>=0.10.0'} - - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} @@ -1130,13 +917,14 @@ packages: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} engines: {node: '>=0.10.0'} + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} - is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - is-valid-glob@1.0.0: resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==} engines: {node: '>=0.10.0'} @@ -1154,10 +942,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isobject@2.1.0: - resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} - engines: {node: '>=0.10.0'} - isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -1183,9 +967,6 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - jsonpath-rfc9535@1.3.0: resolution: {integrity: sha512-3jFHya7oZ45aDxIIdx+/zQARahHXxFSMWBkcBUldfXpLS9VCXDJyTKt35kQfEXLqh0K3Ixw/9xFnvcDStaxh7Q==} engines: {node: '>=20'} @@ -1194,56 +975,25 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - just-debounce@1.1.0: - resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==} - - kind-of@3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} - engines: {node: '>=0.10.0'} - - kind-of@4.0.0: - resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} - engines: {node: '>=0.10.0'} - - kind-of@5.1.0: - resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} - engines: {node: '>=0.10.0'} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - last-run@1.1.1: - resolution: {integrity: sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==} - engines: {node: '>= 0.10'} - - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - - lcid@1.0.0: - resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==} - engines: {node: '>=0.10.0'} + last-run@2.0.0: + resolution: {integrity: sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==} + engines: {node: '>= 10.13.0'} - lead@1.0.0: - resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==} - engines: {node: '>= 0.10'} + lead@4.0.0: + resolution: {integrity: sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==} + engines: {node: '>=10.13.0'} leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - liftoff@3.1.0: - resolution: {integrity: sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==} - engines: {node: '>= 0.8'} + liftoff@5.0.1: + resolution: {integrity: sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==} + engines: {node: '>=10.13.0'} livereload-js@2.4.0: resolution: {integrity: sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==} - load-json-file@1.1.0: - resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} - engines: {node: '>=0.10.0'} - lodash._basecopy@3.0.1: resolution: {integrity: sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==} @@ -1314,10 +1064,6 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - make-iterator@1.0.1: - resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==} - engines: {node: '>=0.10.0'} - map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} @@ -1325,10 +1071,6 @@ packages: map-stream@0.0.7: resolution: {integrity: sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==} - map-visit@1.0.0: - resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} - engines: {node: '>=0.10.0'} - mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -1337,13 +1079,13 @@ packages: engines: {node: '>= 12'} hasBin: true - matchdep@2.0.0: - resolution: {integrity: sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==} - engines: {node: '>= 0.10.0'} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} - micromatch@3.1.10: - resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} - engines: {node: '>=0.10.0'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -1366,9 +1108,6 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -1380,10 +1119,6 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - mixin-deep@1.3.2: - resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} - engines: {node: '>=0.10.0'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -1429,22 +1164,15 @@ packages: multipipe@0.1.2: resolution: {integrity: sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==} - mute-stdout@1.0.1: - resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==} - engines: {node: '>= 0.10'} - - nan@2.20.0: - resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + mute-stdout@2.0.0: + resolution: {integrity: sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==} + engines: {node: '>= 10.13.0'} nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanomatch@1.2.13: - resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} - engines: {node: '>=0.10.0'} - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -1452,8 +1180,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} node-fetch-h2@2.3.0: resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} @@ -1471,24 +1199,17 @@ packages: node-readfiles@0.2.0: resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - now-and-later@2.0.1: - resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==} - engines: {node: '>= 0.10'} + now-and-later@3.0.0: + resolution: {integrity: sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==} + engines: {node: '>= 10.13.0'} - number-is-nan@1.0.1: - resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} - engines: {node: '>=0.10.0'} + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} oas-kit-common@1.0.8: resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} @@ -1514,42 +1235,18 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-copy@0.1.0: - resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} - engines: {node: '>=0.10.0'} - object-inspect@1.13.2: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object-visit@1.0.1: - resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} - engines: {node: '>=0.10.0'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - object.defaults@1.1.0: resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==} engines: {node: '>=0.10.0'} - object.map@1.0.1: - resolution: {integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==} - engines: {node: '>=0.10.0'} - object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} - object.reduce@1.0.1: - resolution: {integrity: sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==} - engines: {node: '>=0.10.0'} - on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -1567,24 +1264,17 @@ packages: openapi-sampler@1.7.2: resolution: {integrity: sha512-OKytvqB5XIaTgA9xtw8W8UTar+uymW2xPVpFN0NihMtuHPdPTGxBEhGnfFnJW5g/gOSIvkP+H0Xh3XhVI9/n7g==} - ordered-read-streams@1.0.1: - resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==} - - os-locale@1.4.0: - resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} - engines: {node: '>=0.10.0'} - outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + parse-filepath@1.0.2: resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} engines: {node: '>=0.8'} - parse-json@2.2.0: - resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} - engines: {node: '>=0.10.0'} - parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} @@ -1597,27 +1287,16 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - pascalcase@0.1.1: - resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} - engines: {node: '>=0.10.0'} - path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-dirname@1.0.2: - resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} - - path-exists@2.1.0: - resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} - engines: {node: '>=0.10.0'} - path-expression-matcher@1.4.0: resolution: {integrity: sha512-s4DQMxIdhj3jLFWd9LxHOplj4p9yQ4ffMGowFf3cpEgrrJjEhN0V5nxw4Ye1EViAGDoL4/1AeO6qHpqYPOzE4Q==} engines: {node: '>=14.0.0'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -1634,32 +1313,20 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - path-type@1.1.0: - resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} - engines: {node: '>=0.10.0'} - perfect-scrollbar@1.5.5: resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - - pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -1672,10 +1339,6 @@ packages: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} - posix-character-classes@0.1.1: - resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} - engines: {node: '>=0.10.0'} - postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -1683,10 +1346,6 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} - pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} @@ -1701,11 +1360,8 @@ packages: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} - pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - - pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} qs@6.12.1: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} @@ -1742,14 +1398,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - read-pkg-up@1.0.1: - resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} - engines: {node: '>=0.10.0'} - - read-pkg@1.1.0: - resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} - engines: {node: '>=0.10.0'} - readable-stream@1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} @@ -1760,14 +1408,18 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readdirp@2.2.1: - resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} - engines: {node: '>=0.10'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + redoc@2.5.1: resolution: {integrity: sha512-LmqA+4A3CmhTllGG197F0arUpmChukAj9klfSdxNRemT9Hr07xXr7OGKu4PHzBs359sgrJ+4JwmOlM7nxLPGMg==} engines: {node: '>=6.9', npm: '>=3.0.0'} @@ -1784,40 +1436,20 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-not@1.0.2: - resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} - engines: {node: '>=0.10.0'} - - remove-bom-buffer@3.0.0: - resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==} - engines: {node: '>=0.10.0'} - - remove-bom-stream@1.2.0: - resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==} - engines: {node: '>= 0.10'} - remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - repeat-element@1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - replace-ext@0.0.1: resolution: {integrity: sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==} engines: {node: '>= 0.4'} - replace-ext@1.0.1: - resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} - engines: {node: '>= 0.10'} + replace-ext@2.0.0: + resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==} + engines: {node: '>= 10'} - replace-homedir@1.0.0: - resolution: {integrity: sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==} - engines: {node: '>= 0.10'} + replace-homedir@2.0.0: + resolution: {integrity: sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==} + engines: {node: '>= 10.13.0'} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -1827,28 +1459,24 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@1.0.1: - resolution: {integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==} - resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} - resolve-options@1.1.0: - resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==} - engines: {node: '>= 0.10'} - - resolve-url@0.2.1: - resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} - deprecated: https://github.com/lydell/resolve-url#deprecated + resolve-options@2.0.0: + resolution: {integrity: sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==} + engines: {node: '>= 10.13.0'} resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - ret@0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} - engines: {node: '>=0.12'} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -1859,20 +1487,24 @@ packages: safe-json-parse@1.0.1: resolution: {integrity: sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==} - safe-regex@1.1.0: - resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - semver-greatest-satisfied-range@1.1.0: - resolution: {integrity: sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==} - engines: {node: '>= 0.10'} + semver-greatest-satisfied-range@2.0.0: + resolution: {integrity: sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==} + engines: {node: '>= 10.13.0'} semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} @@ -1894,9 +1526,6 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -1904,10 +1533,6 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-value@2.0.1: - resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} - engines: {node: '>=0.10.0'} - setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -1917,9 +1542,17 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shelljs@0.9.0: + resolution: {integrity: sha512-uwlECU3w0BCxLXEZW88et6rHF8Wt3xdVgoiVzDzVBmEqjzJG7t4rPmWF/9L40aCk3/bD5Z44/CoU8V6wIeUmxQ==} + engines: {node: '>=18'} hasBin: true should-equal@2.0.0: @@ -1944,6 +1577,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + simple-websocket@9.1.0: resolution: {integrity: sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==} @@ -1951,34 +1587,10 @@ packages: resolution: {integrity: sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==} engines: {node: '>=8.0.0'} - snapdragon-node@2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} - - snapdragon-util@3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} - - snapdragon@0.8.2: - resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-resolve@0.5.3: - resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - - source-map-url@0.4.1: - resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} - deprecated: See https://github.com/lydell/source-map-url#deprecated - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -1987,28 +1599,9 @@ packages: resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==} engines: {node: '>= 0.10'} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - - split-string@3.1.0: - resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} - engines: {node: '>=0.10.0'} - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - - static-extend@0.1.2: - resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} - engines: {node: '>=0.10.0'} + sparkles@2.1.0: + resolution: {integrity: sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==} + engines: {node: '>= 10.13.0'} statuses@1.4.0: resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} @@ -2025,19 +1618,18 @@ packages: stickyfill@1.1.1: resolution: {integrity: sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==} + stream-composer@1.0.2: + resolution: {integrity: sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==} + stream-exhaust@1.0.2: resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==} - stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} string-template@0.2.1: resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} - string-width@1.0.2: - resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} - engines: {node: '>=0.10.0'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2059,8 +1651,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-bom@2.0.0: - resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} strnum@2.2.3: @@ -2091,15 +1683,18 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - sver-compat@1.5.0: - resolution: {integrity: sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==} + sver@1.8.4: + resolution: {integrity: sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==} swagger2openapi@7.0.8: resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} hasBin: true - through2-filter@3.0.0: - resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -2111,25 +1706,13 @@ packages: tiny-lr@1.1.1: resolution: {integrity: sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==} - to-absolute-glob@2.0.2: - resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==} - engines: {node: '>=0.10.0'} - - to-object-path@0.3.0: - resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} - engines: {node: '>=0.10.0'} - - to-regex-range@2.1.1: - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} - engines: {node: '>=0.10.0'} - - to-regex@3.0.2: - resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} - engines: {node: '>=0.10.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} - to-through@2.0.0: - resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==} - engines: {node: '>= 0.10'} + to-through@3.0.0: + resolution: {integrity: sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==} + engines: {node: '>=10.13.0'} toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} @@ -2144,12 +1727,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - type@2.7.3: - resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - uglify-js@3.18.0: resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} @@ -2167,13 +1744,13 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} - undertaker-registry@1.0.1: - resolution: {integrity: sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==} - engines: {node: '>= 0.10'} + undertaker-registry@2.0.0: + resolution: {integrity: sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==} + engines: {node: '>= 10.13.0'} - undertaker@1.3.0: - resolution: {integrity: sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==} - engines: {node: '>= 0.10'} + undertaker@2.0.0: + resolution: {integrity: sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==} + engines: {node: '>=10.13.0'} undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} @@ -2182,29 +1759,10 @@ packages: resolution: {integrity: sha512-lVLNosgqo5EkGqh5XUDhGfsMSoO8K0BAN0TyJLvwNRSl4xWGZlCVYsAIpa/OpA3TvmnM01GWcoKmc3ZWo5wKKA==} engines: {node: '>=18.17'} - union-value@1.0.1: - resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} - engines: {node: '>=0.10.0'} - - unique-stream@2.3.1: - resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unset-value@1.0.0: - resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} - engines: {node: '>=0.10.0'} - - upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - - urix@0.1.0: - resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} - deprecated: Please see https://github.com/lydell/urix#deprecated - url-template@2.0.8: resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} @@ -2213,10 +1771,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - use@3.1.1: - resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} - engines: {node: '>=0.10.0'} - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2224,36 +1778,37 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - v8flags@3.2.0: - resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} - engines: {node: '>= 0.10'} - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + v8flags@4.0.1: + resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==} + engines: {node: '>= 10.13.0'} - value-or-function@3.0.0: - resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==} - engines: {node: '>= 0.10'} + value-or-function@4.0.0: + resolution: {integrity: sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==} + engines: {node: '>= 10.13.0'} vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vinyl-fs@3.0.3: - resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==} - engines: {node: '>= 0.10'} + vinyl-contents@2.0.0: + resolution: {integrity: sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==} + engines: {node: '>=10.13.0'} - vinyl-sourcemap@1.1.0: - resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==} - engines: {node: '>= 0.10'} + vinyl-fs@4.0.2: + resolution: {integrity: sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==} + engines: {node: '>=10.13.0'} + + vinyl-sourcemap@2.0.0: + resolution: {integrity: sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==} + engines: {node: '>=10.13.0'} vinyl@0.5.3: resolution: {integrity: sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==} engines: {node: '>= 0.9'} - vinyl@2.2.1: - resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} - engines: {node: '>= 0.10'} + vinyl@3.0.1: + resolution: {integrity: sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==} + engines: {node: '>=10.13.0'} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2269,9 +1824,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-module@1.0.0: - resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==} - which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -2279,10 +1831,6 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@2.1.0: - resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} - engines: {node: '>=0.10.0'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2306,9 +1854,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@3.2.2: - resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2324,16 +1869,14 @@ packages: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} - yargs-parser@5.0.1: - resolution: {integrity: sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==} + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} yargs@17.0.1: resolution: {integrity: sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==} engines: {node: '>=12'} - yargs@7.1.2: - resolution: {integrity: sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==} - snapshots: '@babel/code-frame@7.29.0': @@ -2360,10 +1903,28 @@ snapshots: '@faker-js/faker@7.6.0': {} + '@gulpjs/messages@1.1.0': {} + + '@gulpjs/to-absolute-glob@4.0.0': + dependencies: + is-negated-glob: 1.0.0 + '@humanwhocodes/momoa@2.0.4': {} '@noble/hashes@1.8.0': {} + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + '@opentelemetry/api-logs@0.202.0': dependencies: '@opentelemetry/api': 1.9.1 @@ -2595,10 +2156,6 @@ snapshots: optionalDependencies: ajv: '@redocly/ajv@8.18.0' - ansi-colors@1.1.0: - dependencies: - ansi-wrap: 0.1.0 - ansi-colors@2.0.5: {} ansi-gray@0.1.1: @@ -2617,106 +2174,50 @@ snapshots: ansi-wrap@0.1.0: {} - anymatch@2.0.0: - dependencies: - micromatch: 3.1.10 - normalize-path: 2.1.1 - transitivePeerDependencies: - - supports-color - - append-buffer@1.0.2: + anymatch@3.1.3: dependencies: - buffer-equal: 1.0.1 - - archy@1.0.0: {} + normalize-path: 3.0.0 + picomatch: 2.3.2 argparse@2.0.1: {} - arr-diff@4.0.0: {} - - arr-filter@1.1.2: - dependencies: - make-iterator: 1.0.1 - - arr-flatten@1.1.0: {} - - arr-map@2.0.2: - dependencies: - make-iterator: 1.0.1 - - arr-union@3.1.0: {} - array-differ@1.0.0: {} array-each@1.0.1: {} - array-initial@1.1.0: - dependencies: - array-slice: 1.1.0 - is-number: 4.0.0 - - array-last@1.3.0: - dependencies: - is-number: 4.0.0 - array-slice@1.1.0: {} - array-sort@1.0.0: - dependencies: - default-compare: 1.0.0 - get-value: 2.0.6 - kind-of: 5.1.0 - array-uniq@1.0.3: {} - array-unique@0.3.2: {} - - assign-symbols@1.0.0: {} - - async-done@1.3.2: + async-done@2.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - process-nextick-args: 2.0.1 stream-exhaust: 1.0.2 - async-each@1.0.6: {} - - async-settle@1.0.0: + async-settle@2.0.0: dependencies: - async-done: 1.3.2 + async-done: 2.0.0 async@2.6.4: dependencies: lodash: 4.17.21 - atob@2.1.2: {} + b4a@1.8.0: {} - bach@1.2.0: + bach@2.0.1: dependencies: - arr-filter: 1.1.2 - arr-flatten: 1.1.0 - arr-map: 2.0.2 - array-each: 1.0.1 - array-initial: 1.1.0 - array-last: 1.3.0 - async-done: 1.3.2 - async-settle: 1.0.0 - now-and-later: 2.0.1 + async-done: 2.0.0 + async-settle: 2.0.0 + now-and-later: 3.0.0 balanced-match@1.0.2: {} balanced-match@4.0.4: {} - base@0.11.2: - dependencies: - cache-base: 1.0.1 - class-utils: 0.3.6 - component-emitter: 1.3.1 - define-property: 1.0.0 - isobject: 3.0.1 - mixin-deep: 1.3.2 - pascalcase: 0.1.1 + bare-events@2.8.2: {} + + base64-js@1.5.1: {} batch@0.6.1: {} @@ -2731,12 +2232,13 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - binary-extensions@1.13.1: {} + binary-extensions@2.3.0: {} - bindings@1.5.0: + bl@5.1.0: dependencies: - file-uri-to-path: 1.0.0 - optional: true + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 body@5.1.0: dependencies: @@ -2747,11 +2249,6 @@ snapshots: bower@1.8.14: {} - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 @@ -2760,39 +2257,17 @@ snapshots: dependencies: balanced-match: 4.0.4 - braces@2.3.2: + braces@3.0.3: dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color + fill-range: 7.1.1 - buffer-equal@1.0.1: {} - - buffer-from@1.1.2: {} + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 bytes@1.0.0: {} - cache-base@1.0.1: - dependencies: - collection-visit: 1.0.0 - component-emitter: 1.3.1 - get-value: 2.0.6 - has-value: 1.0.0 - isobject: 3.0.1 - set-value: 2.0.1 - to-object-path: 0.3.0 - union-value: 1.0.1 - unset-value: 1.0.0 - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -2803,8 +2278,6 @@ snapshots: call-me-maybe@1.0.2: {} - camelcase@3.0.0: {} - camelize@1.0.1: {} chalk@1.1.3: @@ -2820,76 +2293,34 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chokidar@2.1.8: + chokidar@3.6.0: dependencies: - anymatch: 2.0.0 - async-each: 1.0.6 - braces: 2.3.2 - glob-parent: 3.1.0 - inherits: 2.0.4 - is-binary-path: 1.0.1 + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 is-glob: 4.0.3 normalize-path: 3.0.0 - path-is-absolute: 1.0.1 - readdirp: 2.2.1 - upath: 1.2.0 + readdirp: 3.6.0 optionalDependencies: - fsevents: 1.2.13 - transitivePeerDependencies: - - supports-color - - class-utils@0.3.6: - dependencies: - arr-union: 3.1.0 - define-property: 0.2.5 - isobject: 3.0.1 - static-extend: 0.1.2 + fsevents: 2.3.3 classnames@2.5.1: {} - cliui@3.2.0: - dependencies: - string-width: 1.0.2 - strip-ansi: 3.0.1 - wrap-ansi: 2.1.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-buffer@1.0.0: {} - clone-stats@0.0.1: {} - clone-stats@1.0.0: {} - clone@1.0.4: {} clone@2.1.2: {} - cloneable-readable@1.1.3: - dependencies: - inherits: 2.0.4 - process-nextick-args: 2.0.1 - readable-stream: 2.3.8 - clsx@2.1.1: {} - code-point-at@1.1.0: {} - - collection-map@1.0.0: - dependencies: - arr-map: 2.0.2 - for-own: 1.0.0 - make-iterator: 1.0.1 - - collection-visit@1.0.0: - dependencies: - map-visit: 1.0.0 - object-visit: 1.0.1 - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -2902,17 +2333,6 @@ snapshots: colorette@2.0.20: {} - component-emitter@1.3.1: {} - - concat-map@0.0.1: {} - - concat-stream@1.6.2: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.8 - typedarray: 0.0.6 - connect-livereload@0.6.1: {} connect@3.7.0: @@ -2926,15 +2346,13 @@ snapshots: continuable-cache@0.3.1: {} - convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie@0.7.2: {} - copy-descriptor@0.1.1: {} - - copy-props@2.0.5: + copy-props@4.0.0: dependencies: - each-props: 1.3.2 + each-props: 3.0.0 is-plain-object: 5.0.0 core-js@3.37.1: {} @@ -2946,6 +2364,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + css-color-keywords@1.0.0: {} css-to-react-native@3.2.0: @@ -2956,11 +2382,6 @@ snapshots: csstype@3.2.3: {} - d@1.0.2: - dependencies: - es5-ext: 0.10.64 - type: 2.7.3 - dateformat@2.2.0: {} debug@2.6.9: @@ -2975,43 +2396,14 @@ snapshots: dependencies: ms: 2.1.2 - decamelize@1.2.0: {} - decko@1.2.0: {} - decode-uri-component@0.2.2: {} - - default-compare@1.0.0: - dependencies: - kind-of: 5.1.0 - - default-resolution@2.0.0: {} - define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - define-property@0.2.5: - dependencies: - is-descriptor: 0.1.7 - - define-property@1.0.0: - dependencies: - is-descriptor: 1.0.3 - - define-property@2.0.2: - dependencies: - is-descriptor: 1.0.3 - isobject: 3.0.1 - depd@1.1.2: {} depd@2.0.0: {} @@ -3032,16 +2424,9 @@ snapshots: dependencies: readable-stream: 1.1.14 - duplexify@3.7.1: - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 2.3.8 - stream-shift: 1.0.3 - - each-props@1.3.2: + each-props@3.0.0: dependencies: - is-plain-object: 2.0.4 + is-plain-object: 5.0.0 object.defaults: 1.1.0 ee-first@1.1.1: {} @@ -3054,10 +2439,6 @@ snapshots: dependencies: once: 1.4.0 - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - error@7.2.1: dependencies: string-template: 0.2.1 @@ -3068,101 +2449,42 @@ snapshots: es-errors@1.3.0: {} - es5-ext@0.10.64: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - es6-promise@3.3.1: {} - es6-symbol@3.1.4: - dependencies: - d: 1.0.2 - ext: 1.7.0 - - es6-weak-map@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - escalade@3.1.2: {} escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} - esniff@2.0.1: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.3 - etag@1.8.1: {} - event-emitter@0.3.5: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-target-shim@5.0.1: {} eventemitter3@5.0.1: {} - expand-brackets@2.1.4: + events-universal@1.0.1: dependencies: - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 + bare-events: 2.8.2 transitivePeerDependencies: - - supports-color - - expand-tilde@2.0.2: - dependencies: - homedir-polyfill: 1.0.3 - - ext@1.7.0: - dependencies: - type: 2.7.3 + - bare-abort-controller - extend-shallow@2.0.1: + execa@1.0.0: dependencies: - is-extendable: 0.1.1 + cross-spawn: 6.0.6 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 - extend-shallow@3.0.2: + expand-tilde@2.0.2: dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 + homedir-polyfill: 1.0.3 extend@3.0.2: {} - extglob@2.0.4: - dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - fancy-log@1.3.3: dependencies: ansi-gray: 0.1.1 @@ -3172,7 +2494,19 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-levenshtein@1.1.4: {} + fast-fifo@1.3.2: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-levenshtein@3.0.0: + dependencies: + fastest-levenshtein: 1.0.16 fast-safe-stringify@2.1.1: {} @@ -3188,19 +2522,19 @@ snapshots: path-expression-matcher: 1.4.0 strnum: 2.2.3 + fastest-levenshtein@1.0.16: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + faye-websocket@0.10.0: dependencies: websocket-driver: 0.7.4 - file-uri-to-path@1.0.0: - optional: true - - fill-range@4.0.0: + fill-range@7.1.1: dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 + to-regex-range: 5.0.1 finalhandler@1.1.2: dependencies: @@ -3214,43 +2548,22 @@ snapshots: transitivePeerDependencies: - supports-color - find-up@1.1.2: - dependencies: - path-exists: 2.1.0 - pinkie-promise: 2.0.1 - - findup-sync@2.0.0: - dependencies: - detect-file: 1.0.0 - is-glob: 3.1.0 - micromatch: 3.1.10 - resolve-dir: 1.0.1 - transitivePeerDependencies: - - supports-color - - findup-sync@3.0.0: + findup-sync@5.0.0: dependencies: detect-file: 1.0.0 is-glob: 4.0.3 - micromatch: 3.1.10 + micromatch: 4.0.8 resolve-dir: 1.0.1 - transitivePeerDependencies: - - supports-color - fined@1.2.0: + fined@2.0.0: dependencies: expand-tilde: 2.0.2 - is-plain-object: 2.0.4 + is-plain-object: 5.0.0 object.defaults: 1.1.0 object.pick: 1.3.0 parse-filepath: 1.0.2 - flagged-respawn@1.0.1: {} - - flush-write-stream@1.1.1: - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 + flagged-respawn@2.0.0: {} for-in@1.0.2: {} @@ -3260,29 +2573,21 @@ snapshots: foreach@2.0.6: {} - fragment-cache@0.2.1: - dependencies: - map-cache: 0.2.2 - fresh@0.5.2: {} - fs-mkdirp-stream@1.0.0: + fs-mkdirp-stream@2.0.1: dependencies: graceful-fs: 4.2.11 - through2: 2.0.5 - - fs.realpath@1.0.0: {} + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - fsevents@1.2.13: - dependencies: - bindings: 1.5.0 - nan: 2.20.0 + fsevents@2.3.3: optional: true function-bind@1.1.2: {} - get-caller-file@1.0.3: {} - get-caller-file@2.0.5: {} get-intrinsic@1.2.4: @@ -3293,37 +2598,36 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - get-value@2.0.6: {} + get-stream@4.1.0: + dependencies: + pump: 3.0.4 - glob-parent@3.1.0: + glob-parent@5.1.2: dependencies: - is-glob: 3.1.0 - path-dirname: 1.0.2 + is-glob: 4.0.3 - glob-stream@6.1.0: + glob-parent@6.0.2: dependencies: - extend: 3.0.2 - glob: 7.2.3 - glob-parent: 3.1.0 - is-negated-glob: 1.0.0 - ordered-read-streams: 1.0.1 - pumpify: 1.5.1 - readable-stream: 2.3.8 - remove-trailing-separator: 1.1.0 - to-absolute-glob: 2.0.2 - unique-stream: 2.3.1 + is-glob: 4.0.3 - glob-watcher@5.0.5: + glob-stream@8.0.3: dependencies: - anymatch: 2.0.0 - async-done: 1.3.2 - chokidar: 2.1.8 + '@gulpjs/to-absolute-glob': 4.0.0 + anymatch: 3.1.3 + fastq: 1.20.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 is-negated-glob: 1.0.0 - just-debounce: 1.1.0 normalize-path: 3.0.0 - object.defaults: 1.1.0 + streamx: 2.25.0 transitivePeerDependencies: - - supports-color + - bare-abort-controller + - react-native-b4a + + glob-watcher@6.0.0: + dependencies: + async-done: 2.0.0 + chokidar: 3.6.0 glob@13.0.6: dependencies: @@ -3331,15 +2635,6 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-modules@1.0.0: dependencies: global-prefix: 1.0.2 @@ -3358,34 +2653,30 @@ snapshots: dependencies: sparkles: 1.0.1 + glogg@2.2.0: + dependencies: + sparkles: 2.1.0 + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 graceful-fs@4.2.11: {} - gulp-cli@2.3.0: + gulp-cli@3.1.0: dependencies: - ansi-colors: 1.1.0 - archy: 1.0.0 - array-sort: 1.0.0 - color-support: 1.1.3 - concat-stream: 1.6.2 - copy-props: 2.0.5 - fancy-log: 1.3.3 - gulplog: 1.0.0 - interpret: 1.4.0 - isobject: 3.0.1 - liftoff: 3.1.0 - matchdep: 2.0.0 - mute-stdout: 1.0.1 - pretty-hrtime: 1.0.3 - replace-homedir: 1.0.0 - semver-greatest-satisfied-range: 1.1.0 - v8flags: 3.2.0 - yargs: 7.1.2 - transitivePeerDependencies: - - supports-color + '@gulpjs/messages': 1.1.0 + chalk: 4.1.2 + copy-props: 4.0.0 + gulplog: 2.2.0 + interpret: 3.1.1 + liftoff: 5.0.1 + mute-stdout: 2.0.0 + replace-homedir: 2.0.0 + semver-greatest-satisfied-range: 2.0.0 + string-width: 4.2.3 + v8flags: 4.0.1 + yargs: 16.2.0 gulp-connect@5.7.0: dependencies: @@ -3422,19 +2713,24 @@ snapshots: through2: 2.0.5 vinyl: 0.5.3 - gulp@4.0.2: + gulp@5.0.0: dependencies: - glob-watcher: 5.0.5 - gulp-cli: 2.3.0 - undertaker: 1.3.0 - vinyl-fs: 3.0.3 + glob-watcher: 6.0.0 + gulp-cli: 3.1.0 + undertaker: 2.0.0 + vinyl-fs: 4.0.2 transitivePeerDependencies: - - supports-color + - bare-abort-controller + - react-native-b4a gulplog@1.0.0: dependencies: glogg: 1.0.2 + gulplog@2.2.0: + dependencies: + glogg: 2.2.0 + handlebars@4.7.9: dependencies: minimist: 1.2.8 @@ -3462,25 +2758,6 @@ snapshots: has-symbols@1.0.3: {} - has-value@0.3.1: - dependencies: - get-value: 2.0.6 - has-values: 0.1.4 - isobject: 2.1.0 - - has-value@1.0.0: - dependencies: - get-value: 2.0.6 - has-values: 1.0.0 - isobject: 3.0.1 - - has-values@0.1.4: {} - - has-values@1.0.0: - dependencies: - is-number: 3.0.0 - kind-of: 4.0.0 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -3489,8 +2766,6 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hosted-git-info@2.8.9: {} - http-errors@1.6.3: dependencies: depd: 1.1.2 @@ -3517,10 +2792,11 @@ snapshots: transitivePeerDependencies: - supports-color - inflight@1.0.6: + iconv-lite@0.6.3: dependencies: - once: 1.4.0 - wrappy: 1.0.2 + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} inherits@2.0.3: {} @@ -3530,76 +2806,32 @@ snapshots: interpret@1.4.0: {} - invert-kv@1.0.0: {} + interpret@3.1.1: {} is-absolute@1.0.0: dependencies: is-relative: 1.0.0 is-windows: 1.0.2 - is-accessor-descriptor@1.0.1: - dependencies: - hasown: 2.0.2 - - is-arrayish@0.2.1: {} - - is-binary-path@1.0.1: + is-binary-path@2.1.0: dependencies: - binary-extensions: 1.13.1 - - is-buffer@1.1.6: {} + binary-extensions: 2.3.0 is-core-module@2.14.0: dependencies: hasown: 2.0.2 - is-data-descriptor@1.0.1: - dependencies: - hasown: 2.0.2 - - is-descriptor@0.1.7: - dependencies: - is-accessor-descriptor: 1.0.1 - is-data-descriptor: 1.0.1 - - is-descriptor@1.0.3: - dependencies: - is-accessor-descriptor: 1.0.1 - is-data-descriptor: 1.0.1 - - is-extendable@0.1.1: {} - - is-extendable@1.0.1: - dependencies: - is-plain-object: 2.0.4 - is-extglob@2.1.1: {} - is-fullwidth-code-point@1.0.0: - dependencies: - number-is-nan: 1.0.1 - is-fullwidth-code-point@3.0.0: {} - is-glob@3.1.0: - dependencies: - is-extglob: 2.1.1 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-negated-glob@1.0.0: {} - is-number@3.0.0: - dependencies: - kind-of: 3.2.2 - - is-number@4.0.0: {} - - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 + is-number@7.0.0: {} is-plain-object@5.0.0: {} @@ -3607,12 +2839,12 @@ snapshots: dependencies: is-unc-path: 1.0.0 + is-stream@1.1.0: {} + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 - is-utf8@0.2.1: {} - is-valid-glob@1.0.0: {} is-windows@1.0.2: {} @@ -3623,10 +2855,6 @@ snapshots: isexe@2.0.0: {} - isobject@2.1.0: - dependencies: - isarray: 1.0.0 - isobject@3.0.1: {} js-levenshtein@1.1.6: {} @@ -3649,68 +2877,28 @@ snapshots: json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - jsonpath-rfc9535@1.3.0: {} jsonpointer@5.0.1: {} - just-debounce@1.1.0: {} - - kind-of@3.2.2: - dependencies: - is-buffer: 1.1.6 - - kind-of@4.0.0: - dependencies: - is-buffer: 1.1.6 - - kind-of@5.1.0: {} - - kind-of@6.0.3: {} - - last-run@1.1.1: - dependencies: - default-resolution: 2.0.0 - es6-weak-map: 2.0.3 - - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 + last-run@2.0.0: {} - lcid@1.0.0: - dependencies: - invert-kv: 1.0.0 - - lead@1.0.0: - dependencies: - flush-write-stream: 1.1.1 + lead@4.0.0: {} leven@3.1.0: {} - liftoff@3.1.0: + liftoff@5.0.1: dependencies: extend: 3.0.2 - findup-sync: 3.0.0 - fined: 1.2.0 - flagged-respawn: 1.0.1 - is-plain-object: 2.0.4 - object.map: 1.0.1 - rechoir: 0.6.2 + findup-sync: 5.0.0 + fined: 2.0.0 + flagged-respawn: 2.0.0 + is-plain-object: 5.0.0 + rechoir: 0.8.0 resolve: 1.22.8 - transitivePeerDependencies: - - supports-color livereload-js@2.4.0: {} - load-json-file@1.1.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 2.2.0 - pify: 2.3.0 - pinkie-promise: 2.0.1 - strip-bom: 2.0.0 - lodash._basecopy@3.0.1: {} lodash._basetostring@3.0.1: {} @@ -3776,48 +2964,20 @@ snapshots: lunr@2.3.9: {} - make-iterator@1.0.1: - dependencies: - kind-of: 6.0.3 - map-cache@0.2.2: {} map-stream@0.0.7: {} - map-visit@1.0.0: - dependencies: - object-visit: 1.0.1 - mark.js@8.11.1: {} marked@4.3.0: {} - matchdep@2.0.0: - dependencies: - findup-sync: 2.0.0 - micromatch: 3.1.10 - resolve: 1.22.8 - stack-trace: 0.0.10 - transitivePeerDependencies: - - supports-color + merge2@1.4.1: {} - micromatch@3.1.10: - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 6.0.3 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -3833,10 +2993,6 @@ snapshots: dependencies: brace-expansion: 5.0.5 - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 @@ -3845,11 +3001,6 @@ snapshots: minipass@7.1.3: {} - mixin-deep@1.3.2: - dependencies: - for-in: 1.0.2 - is-extendable: 1.0.1 - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -3882,34 +3033,15 @@ snapshots: dependencies: duplexer2: 0.0.2 - mute-stdout@1.0.1: {} - - nan@2.20.0: - optional: true + mute-stdout@2.0.0: {} nanoid@3.3.7: {} - nanomatch@1.2.13: - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.3 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - negotiator@0.6.3: {} neo-async@2.6.2: {} - next-tick@1.1.0: {} + nice-try@1.0.5: {} node-fetch-h2@2.3.0: dependencies: @@ -3923,24 +3055,15 @@ snapshots: dependencies: es6-promise: 3.3.1 - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - normalize-path@2.1.1: - dependencies: - remove-trailing-separator: 1.1.0 - normalize-path@3.0.0: {} - now-and-later@2.0.1: + now-and-later@3.0.0: dependencies: once: 1.4.0 - number-is-nan@1.0.1: {} + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 oas-kit-common@1.0.8: dependencies: @@ -3977,27 +3100,8 @@ snapshots: object-assign@4.1.1: {} - object-copy@0.1.0: - dependencies: - copy-descriptor: 0.1.1 - define-property: 0.2.5 - kind-of: 3.2.2 - object-inspect@1.13.2: {} - object-keys@1.1.1: {} - - object-visit@1.0.1: - dependencies: - isobject: 3.0.1 - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - object.defaults@1.1.0: dependencies: array-each: 1.0.1 @@ -4005,20 +3109,10 @@ snapshots: for-own: 1.0.0 isobject: 3.0.1 - object.map@1.0.1: - dependencies: - for-own: 1.0.0 - make-iterator: 1.0.1 - object.pick@1.3.0: dependencies: isobject: 3.0.1 - object.reduce@1.0.1: - dependencies: - for-own: 1.0.0 - make-iterator: 1.0.1 - on-finished@2.3.0: dependencies: ee-first: 1.1.1 @@ -4042,45 +3136,27 @@ snapshots: fast-xml-parser: 5.5.10 json-pointer: 0.6.2 - ordered-read-streams@1.0.1: - dependencies: - readable-stream: 2.3.8 - - os-locale@1.4.0: - dependencies: - lcid: 1.0.0 - outdent@0.8.0: {} + p-finally@1.0.0: {} + parse-filepath@1.0.2: dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 - parse-json@2.2.0: - dependencies: - error-ex: 1.3.2 - parse-node-version@1.0.1: {} parse-passwd@1.0.0: {} parseurl@1.3.3: {} - pascalcase@0.1.1: {} - path-browserify@1.0.1: {} - path-dirname@1.0.2: {} - - path-exists@2.1.0: - dependencies: - pinkie-promise: 2.0.1 - path-expression-matcher@1.4.0: {} - path-is-absolute@1.0.1: {} + path-key@2.0.1: {} path-parse@1.0.7: {} @@ -4095,25 +3171,13 @@ snapshots: lru-cache: 11.3.2 minipass: 7.1.3 - path-type@1.1.0: - dependencies: - graceful-fs: 4.2.11 - pify: 2.3.0 - pinkie-promise: 2.0.1 - perfect-scrollbar@1.5.5: {} picocolors@1.1.1: {} - picomatch@4.0.4: {} - - pify@2.3.0: {} + picomatch@2.3.2: {} - pinkie-promise@2.0.1: - dependencies: - pinkie: 2.0.4 - - pinkie@2.0.4: {} + picomatch@4.0.4: {} pluralize@8.0.0: {} @@ -4129,8 +3193,6 @@ snapshots: transitivePeerDependencies: - supports-color - posix-character-classes@0.1.1: {} - postcss-value-parser@4.2.0: {} postcss@8.4.49: @@ -4139,8 +3201,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - pretty-hrtime@1.0.3: {} - prismjs@1.29.0: {} process-nextick-args@2.0.1: {} @@ -4166,17 +3226,11 @@ snapshots: '@types/node': 25.5.2 long: 5.3.2 - pump@2.0.1: + pump@3.0.4: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - pumpify@1.5.1: - dependencies: - duplexify: 3.7.1 - inherits: 2.0.4 - pump: 2.0.1 - qs@6.12.1: dependencies: side-channel: 1.0.6 @@ -4212,17 +3266,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - read-pkg-up@1.0.1: - dependencies: - find-up: 1.1.2 - read-pkg: 1.1.0 - - read-pkg@1.1.0: - dependencies: - load-json-file: 1.1.0 - normalize-package-data: 2.5.0 - path-type: 1.1.0 - readable-stream@1.1.14: dependencies: core-util-is: 1.0.3 @@ -4246,18 +3289,18 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@2.2.1: + readdirp@3.6.0: dependencies: - graceful-fs: 4.2.11 - micromatch: 3.1.10 - readable-stream: 2.3.8 - transitivePeerDependencies: - - supports-color + picomatch: 2.3.2 rechoir@0.6.2: dependencies: resolve: 1.22.8 + rechoir@0.8.0: + dependencies: + resolve: 1.22.8 + redoc@2.5.1(core-js@3.37.1)(mobx@6.12.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@redocly/openapi-core': 1.25.7 @@ -4295,54 +3338,26 @@ snapshots: regenerator-runtime@0.14.1: {} - regex-not@1.0.2: - dependencies: - extend-shallow: 3.0.2 - safe-regex: 1.1.0 - - remove-bom-buffer@3.0.0: - dependencies: - is-buffer: 1.1.6 - is-utf8: 0.2.1 - - remove-bom-stream@1.2.0: - dependencies: - remove-bom-buffer: 3.0.0 - safe-buffer: 5.2.1 - through2: 2.0.5 - remove-trailing-separator@1.1.0: {} - repeat-element@1.1.4: {} - - repeat-string@1.6.1: {} - replace-ext@0.0.1: {} - replace-ext@1.0.1: {} + replace-ext@2.0.0: {} - replace-homedir@1.0.0: - dependencies: - homedir-polyfill: 1.0.3 - is-absolute: 1.0.0 - remove-trailing-separator: 1.1.0 + replace-homedir@2.0.0: {} require-directory@2.1.1: {} require-from-string@2.0.2: {} - require-main-filename@1.0.1: {} - resolve-dir@1.0.1: dependencies: expand-tilde: 2.0.2 global-modules: 1.0.0 - resolve-options@1.1.0: + resolve-options@2.0.0: dependencies: - value-or-function: 3.0.0 - - resolve-url@0.2.1: {} + value-or-function: 4.0.0 resolve@1.22.8: dependencies: @@ -4350,7 +3365,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - ret@0.1.15: {} + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 safe-buffer@5.1.2: {} @@ -4358,20 +3377,21 @@ snapshots: safe-json-parse@1.0.1: {} - safe-regex@1.1.0: - dependencies: - ret: 0.1.15 + safer-buffer@2.1.2: {} scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - semver-greatest-satisfied-range@1.1.0: + semver-greatest-satisfied-range@2.0.0: dependencies: - sver-compat: 1.5.0 + sver: 1.8.4 semver@5.7.2: {} + semver@6.3.1: + optional: true + semver@7.6.2: {} send@0.16.2: @@ -4431,8 +3451,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: {} - set-cookie-parser@2.7.2: {} set-function-length@1.2.2: @@ -4444,22 +3462,22 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - set-value@2.0.1: - dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - split-string: 3.1.0 - setprototypeof@1.1.0: {} setprototypeof@1.2.0: {} shallowequal@1.1.0: {} - shelljs@0.8.5: + shebang-command@1.2.0: dependencies: - glob: 7.2.3 + shebang-regex: 1.0.0 + + shebang-regex@1.0.0: {} + + shelljs@0.9.0: + dependencies: + execa: 1.0.0 + fast-glob: 3.3.3 interpret: 1.4.0 rechoir: 0.6.2 @@ -4496,6 +3514,8 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + signal-exit@3.0.7: {} + simple-websocket@9.1.0: dependencies: debug: 4.3.5 @@ -4510,71 +3530,13 @@ snapshots: slugify@1.4.7: {} - snapdragon-node@2.1.1: - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - - snapdragon-util@3.0.1: - dependencies: - kind-of: 3.2.2 - - snapdragon@0.8.2: - dependencies: - base: 0.11.2 - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.3 - use: 3.1.1 - transitivePeerDependencies: - - supports-color - source-map-js@1.2.1: {} - source-map-resolve@0.5.3: - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.2 - resolve-url: 0.2.1 - source-map-url: 0.4.1 - urix: 0.1.0 - - source-map-url@0.4.1: {} - - source-map@0.5.7: {} - source-map@0.6.1: {} sparkles@1.0.1: {} - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - - spdx-license-ids@3.0.18: {} - - split-string@3.1.0: - dependencies: - extend-shallow: 3.0.2 - - stack-trace@0.0.10: {} - - static-extend@0.1.2: - dependencies: - define-property: 0.2.5 - object-copy: 0.1.0 + sparkles@2.1.0: {} statuses@1.4.0: {} @@ -4584,18 +3546,26 @@ snapshots: stickyfill@1.1.1: {} + stream-composer@1.0.2: + dependencies: + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + stream-exhaust@1.0.2: {} - stream-shift@1.0.3: {} + streamx@2.25.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a string-template@0.2.1: {} - string-width@1.0.2: - dependencies: - code-point-at: 1.1.0 - is-fullwidth-code-point: 1.0.0 - strip-ansi: 3.0.1 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -4620,9 +3590,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-bom@2.0.0: - dependencies: - is-utf8: 0.2.1 + strip-eof@1.0.0: {} strnum@2.2.3: {} @@ -4651,10 +3619,9 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - sver-compat@1.5.0: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 + sver@1.8.4: + optionalDependencies: + semver: 6.3.1 swagger2openapi@7.0.8: dependencies: @@ -4672,10 +3639,18 @@ snapshots: transitivePeerDependencies: - encoding - through2-filter@3.0.0: + teex@1.0.1: dependencies: - through2: 2.0.5 - xtend: 4.0.2 + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + text-decoder@1.2.7: + dependencies: + b4a: 1.8.0 + transitivePeerDependencies: + - react-native-b4a through2@2.0.5: dependencies: @@ -4695,30 +3670,16 @@ snapshots: transitivePeerDependencies: - supports-color - to-absolute-glob@2.0.2: + to-regex-range@5.0.1: dependencies: - is-absolute: 1.0.0 - is-negated-glob: 1.0.0 + is-number: 7.0.0 - to-object-path@0.3.0: + to-through@3.0.0: dependencies: - kind-of: 3.2.2 - - to-regex-range@2.1.1: - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - - to-regex@3.0.2: - dependencies: - define-property: 2.0.2 - extend-shallow: 3.0.2 - regex-not: 1.0.2 - safe-regex: 1.1.0 - - to-through@2.0.0: - dependencies: - through2: 2.0.5 + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a toidentifier@1.0.1: {} @@ -4728,10 +3689,6 @@ snapshots: tslib@2.8.1: {} - type@2.7.3: {} - - typedarray@0.0.6: {} - uglify-js@3.18.0: optional: true @@ -4741,102 +3698,76 @@ snapshots: unc-path-regex@0.1.2: {} - undertaker-registry@1.0.1: {} + undertaker-registry@2.0.0: {} - undertaker@1.3.0: + undertaker@2.0.0: dependencies: - arr-flatten: 1.1.0 - arr-map: 2.0.2 - bach: 1.2.0 - collection-map: 1.0.0 - es6-weak-map: 2.0.3 - fast-levenshtein: 1.1.4 - last-run: 1.1.1 - object.defaults: 1.1.0 - object.reduce: 1.0.1 - undertaker-registry: 1.0.1 + bach: 2.0.1 + fast-levenshtein: 3.0.0 + last-run: 2.0.0 + undertaker-registry: 2.0.0 undici-types@7.18.2: {} undici@6.24.0: {} - union-value@1.0.1: - dependencies: - arr-union: 3.1.0 - get-value: 2.0.6 - is-extendable: 0.1.1 - set-value: 2.0.1 - - unique-stream@2.3.1: - dependencies: - json-stable-stringify-without-jsonify: 1.0.1 - through2-filter: 3.0.0 - unpipe@1.0.0: {} - unset-value@1.0.0: - dependencies: - has-value: 0.3.1 - isobject: 3.0.1 - - upath@1.2.0: {} - - urix@0.1.0: {} - url-template@2.0.8: {} use-sync-external-store@1.6.0(react@18.3.1): dependencies: react: 18.3.1 - use@3.1.1: {} - util-deprecate@1.0.2: {} utils-merge@1.0.1: {} - v8flags@3.2.0: - dependencies: - homedir-polyfill: 1.0.3 - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 + v8flags@4.0.1: {} - value-or-function@3.0.0: {} + value-or-function@4.0.0: {} vary@1.1.2: {} - vinyl-fs@3.0.3: + vinyl-contents@2.0.0: dependencies: - fs-mkdirp-stream: 1.0.0 - glob-stream: 6.1.0 + bl: 5.1.0 + vinyl: 3.0.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + vinyl-fs@4.0.2: + dependencies: + fs-mkdirp-stream: 2.0.1 + glob-stream: 8.0.3 graceful-fs: 4.2.11 + iconv-lite: 0.6.3 is-valid-glob: 1.0.0 - lazystream: 1.0.1 - lead: 1.0.0 - object.assign: 4.1.5 - pumpify: 1.5.1 - readable-stream: 2.3.8 - remove-bom-buffer: 3.0.0 - remove-bom-stream: 1.2.0 - resolve-options: 1.1.0 - through2: 2.0.5 - to-through: 2.0.0 - value-or-function: 3.0.0 - vinyl: 2.2.1 - vinyl-sourcemap: 1.1.0 + lead: 4.0.0 + normalize-path: 3.0.0 + resolve-options: 2.0.0 + stream-composer: 1.0.2 + streamx: 2.25.0 + to-through: 3.0.0 + value-or-function: 4.0.0 + vinyl: 3.0.1 + vinyl-sourcemap: 2.0.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - vinyl-sourcemap@1.1.0: + vinyl-sourcemap@2.0.0: dependencies: - append-buffer: 1.0.2 - convert-source-map: 1.9.0 + convert-source-map: 2.0.0 graceful-fs: 4.2.11 - normalize-path: 2.1.1 - now-and-later: 2.0.1 - remove-bom-buffer: 3.0.0 - vinyl: 2.2.1 + now-and-later: 3.0.0 + streamx: 2.25.0 + vinyl: 3.0.1 + vinyl-contents: 2.0.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a vinyl@0.5.3: dependencies: @@ -4844,14 +3775,15 @@ snapshots: clone-stats: 0.0.1 replace-ext: 0.0.1 - vinyl@2.2.1: + vinyl@3.0.1: dependencies: clone: 2.1.2 - clone-buffer: 1.0.0 - clone-stats: 1.0.0 - cloneable-readable: 1.1.3 remove-trailing-separator: 1.1.0 - replace-ext: 1.0.1 + replace-ext: 2.0.0 + teex: 1.0.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a webidl-conversions@3.0.1: {} @@ -4868,19 +3800,12 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-module@1.0.0: {} - which@1.3.1: dependencies: isexe: 2.0.0 wordwrap@1.0.0: {} - wrap-ansi@2.1.0: - dependencies: - string-width: 1.0.2 - strip-ansi: 3.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -4893,8 +3818,6 @@ snapshots: xtend@4.0.2: {} - y18n@3.2.2: {} - y18n@5.0.8: {} yaml-ast-parser@0.0.43: {} @@ -4903,12 +3826,7 @@ snapshots: yargs-parser@20.2.9: {} - yargs-parser@5.0.1: - dependencies: - camelcase: 3.0.0 - object.assign: 4.1.5 - - yargs@17.0.1: + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.2 @@ -4918,18 +3836,12 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.9 - yargs@7.1.2: + yargs@17.0.1: dependencies: - camelcase: 3.0.0 - cliui: 3.2.0 - decamelize: 1.2.0 - get-caller-file: 1.0.3 - os-locale: 1.4.0 - read-pkg-up: 1.0.1 + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 require-directory: 2.1.1 - require-main-filename: 1.0.1 - set-blocking: 2.0.0 - string-width: 1.0.2 - which-module: 1.0.0 - y18n: 3.2.2 - yargs-parser: 5.0.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9