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
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