hymnkeep 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/openapi.json CHANGED
@@ -74,6 +74,7 @@
74
74
  "name": "community",
75
75
  "in": "path",
76
76
  "required": true,
77
+ "description": "The community's slug, as in the address of any of its pages.",
77
78
  "schema": {
78
79
  "type": "string"
79
80
  }
@@ -133,6 +134,7 @@
133
134
  "name": "community",
134
135
  "in": "path",
135
136
  "required": true,
137
+ "description": "The community's slug, as in the address of any of its pages.",
136
138
  "schema": {
137
139
  "type": "string"
138
140
  }
@@ -180,6 +182,7 @@
180
182
  "type": "string",
181
183
  "format": "uuid"
182
184
  },
185
+ "uniqueItems": true,
183
186
  "minItems": 1
184
187
  }
185
188
  },
@@ -195,6 +198,7 @@
195
198
  "name": "community",
196
199
  "in": "path",
197
200
  "required": true,
201
+ "description": "The community's slug, as in the address of any of its pages.",
198
202
  "schema": {
199
203
  "type": "string"
200
204
  }
@@ -253,6 +257,7 @@
253
257
  "name": "community",
254
258
  "in": "path",
255
259
  "required": true,
260
+ "description": "The community's slug, as in the address of any of its pages.",
256
261
  "schema": {
257
262
  "type": "string"
258
263
  }
@@ -261,6 +266,7 @@
261
266
  "name": "jobCategory",
262
267
  "in": "path",
263
268
  "required": true,
269
+ "description": "The job category's id.",
264
270
  "schema": {
265
271
  "type": "string"
266
272
  }
@@ -318,6 +324,7 @@
318
324
  "name": "community",
319
325
  "in": "path",
320
326
  "required": true,
327
+ "description": "The community's slug, as in the address of any of its pages.",
321
328
  "schema": {
322
329
  "type": "string"
323
330
  }
@@ -326,6 +333,7 @@
326
333
  "name": "jobCategory",
327
334
  "in": "path",
328
335
  "required": true,
336
+ "description": "The job category's id.",
329
337
  "schema": {
330
338
  "type": "string"
331
339
  }
@@ -365,6 +373,7 @@
365
373
  "name": "community",
366
374
  "in": "path",
367
375
  "required": true,
376
+ "description": "The community's slug, as in the address of any of its pages.",
368
377
  "schema": {
369
378
  "type": "string"
370
379
  }
@@ -412,7 +421,8 @@
412
421
  },
413
422
  "duplicate_id": {
414
423
  "type": "string",
415
- "format": "uuid"
424
+ "format": "uuid",
425
+ "description": "Different from canonical_id."
416
426
  }
417
427
  },
418
428
  "required": [
@@ -428,6 +438,7 @@
428
438
  "name": "community",
429
439
  "in": "path",
430
440
  "required": true,
441
+ "description": "The community's slug, as in the address of any of its pages.",
431
442
  "schema": {
432
443
  "type": "string"
433
444
  }
@@ -464,7 +475,7 @@
464
475
  "tags": [
465
476
  "contributors"
466
477
  ],
467
- "summary": "Contributors Merge",
478
+ "summary": "Folds duplicate_id into canonical_id: the duplicate's credits move to the canonical name, and the duplicate goes.",
468
479
  "requestBody": {
469
480
  "required": true,
470
481
  "content": {
@@ -478,7 +489,8 @@
478
489
  },
479
490
  "duplicate_id": {
480
491
  "type": "string",
481
- "format": "uuid"
492
+ "format": "uuid",
493
+ "description": "Different from canonical_id."
482
494
  }
483
495
  },
484
496
  "required": [
@@ -494,6 +506,7 @@
494
506
  "name": "community",
495
507
  "in": "path",
496
508
  "required": true,
509
+ "description": "The community's slug, as in the address of any of its pages.",
497
510
  "schema": {
498
511
  "type": "string"
499
512
  }
@@ -533,6 +546,7 @@
533
546
  "name": "community",
534
547
  "in": "path",
535
548
  "required": true,
549
+ "description": "The community's slug, as in the address of any of its pages.",
536
550
  "schema": {
537
551
  "type": "string"
538
552
  }
@@ -578,6 +592,7 @@
578
592
  "type": "string",
579
593
  "format": "uuid"
580
594
  },
595
+ "uniqueItems": true,
581
596
  "minItems": 1
582
597
  },
583
598
  "description": {
@@ -607,6 +622,7 @@
607
622
  "name": "community",
608
623
  "in": "path",
609
624
  "required": true,
625
+ "description": "The community's slug, as in the address of any of its pages.",
610
626
  "schema": {
611
627
  "type": "string"
612
628
  }
@@ -654,6 +670,7 @@
654
670
  "type": "string",
655
671
  "format": "uuid"
656
672
  },
673
+ "uniqueItems": true,
657
674
  "minItems": 1
658
675
  }
659
676
  },
@@ -669,6 +686,7 @@
669
686
  "name": "community",
670
687
  "in": "path",
671
688
  "required": true,
689
+ "description": "The community's slug, as in the address of any of its pages.",
672
690
  "schema": {
673
691
  "type": "string"
674
692
  }
@@ -708,6 +726,7 @@
708
726
  "name": "community",
709
727
  "in": "path",
710
728
  "required": true,
729
+ "description": "The community's slug, as in the address of any of its pages.",
711
730
  "schema": {
712
731
  "type": "string"
713
732
  }
@@ -716,6 +735,7 @@
716
735
  "name": "ensemble",
717
736
  "in": "path",
718
737
  "required": true,
738
+ "description": "The ensemble's id.",
719
739
  "schema": {
720
740
  "type": "string"
721
741
  }
@@ -749,7 +769,7 @@
749
769
  ],
750
770
  "summary": "Name and description; whether it is active is its own call.",
751
771
  "requestBody": {
752
- "required": true,
772
+ "required": false,
753
773
  "content": {
754
774
  "application/json": {
755
775
  "schema": {
@@ -761,6 +781,7 @@
761
781
  "type": "string",
762
782
  "format": "uuid"
763
783
  },
784
+ "uniqueItems": true,
764
785
  "minItems": 1
765
786
  },
766
787
  "description": {
@@ -774,10 +795,7 @@
774
795
  "type": "string",
775
796
  "maxLength": 255
776
797
  }
777
- },
778
- "required": [
779
- "name"
780
- ]
798
+ }
781
799
  }
782
800
  }
783
801
  }
@@ -787,6 +805,7 @@
787
805
  "name": "community",
788
806
  "in": "path",
789
807
  "required": true,
808
+ "description": "The community's slug, as in the address of any of its pages.",
790
809
  "schema": {
791
810
  "type": "string"
792
811
  }
@@ -795,6 +814,7 @@
795
814
  "name": "ensemble",
796
815
  "in": "path",
797
816
  "required": true,
817
+ "description": "The ensemble's id.",
798
818
  "schema": {
799
819
  "type": "string"
800
820
  }
@@ -852,6 +872,7 @@
852
872
  "name": "community",
853
873
  "in": "path",
854
874
  "required": true,
875
+ "description": "The community's slug, as in the address of any of its pages.",
855
876
  "schema": {
856
877
  "type": "string"
857
878
  }
@@ -860,6 +881,7 @@
860
881
  "name": "ensemble",
861
882
  "in": "path",
862
883
  "required": true,
884
+ "description": "The ensemble's id.",
863
885
  "schema": {
864
886
  "type": "string"
865
887
  }
@@ -893,7 +915,7 @@
893
915
  "tags": [
894
916
  "ensembles"
895
917
  ],
896
- "summary": "`joined_on` left out means the community's today.",
918
+ "summary": "Puts a person on the roster, from today if `joined_on` is left out. The answer's `member_id` is the id the other member calls take, not their membership id.",
897
919
  "requestBody": {
898
920
  "required": true,
899
921
  "content": {
@@ -917,7 +939,8 @@
917
939
  "items": {
918
940
  "type": "string",
919
941
  "format": "uuid"
920
- }
942
+ },
943
+ "uniqueItems": true
921
944
  }
922
945
  },
923
946
  "required": [
@@ -932,6 +955,7 @@
932
955
  "name": "community",
933
956
  "in": "path",
934
957
  "required": true,
958
+ "description": "The community's slug, as in the address of any of its pages.",
935
959
  "schema": {
936
960
  "type": "string"
937
961
  }
@@ -940,6 +964,7 @@
940
964
  "name": "ensemble",
941
965
  "in": "path",
942
966
  "required": true,
967
+ "description": "The ensemble's id.",
943
968
  "schema": {
944
969
  "type": "string"
945
970
  }
@@ -993,7 +1018,8 @@
993
1018
  "items": {
994
1019
  "type": "string",
995
1020
  "format": "uuid"
996
- }
1021
+ },
1022
+ "uniqueItems": true
997
1023
  }
998
1024
  }
999
1025
  }
@@ -1005,6 +1031,7 @@
1005
1031
  "name": "community",
1006
1032
  "in": "path",
1007
1033
  "required": true,
1034
+ "description": "The community's slug, as in the address of any of its pages.",
1008
1035
  "schema": {
1009
1036
  "type": "string"
1010
1037
  }
@@ -1013,6 +1040,7 @@
1013
1040
  "name": "ensemble",
1014
1041
  "in": "path",
1015
1042
  "required": true,
1043
+ "description": "The ensemble's id.",
1016
1044
  "schema": {
1017
1045
  "type": "string"
1018
1046
  }
@@ -1021,6 +1049,7 @@
1021
1049
  "name": "member",
1022
1050
  "in": "path",
1023
1051
  "required": true,
1052
+ "description": "The ensemble member's id.",
1024
1053
  "schema": {
1025
1054
  "type": "string"
1026
1055
  }
@@ -1058,6 +1087,7 @@
1058
1087
  "name": "community",
1059
1088
  "in": "path",
1060
1089
  "required": true,
1090
+ "description": "The community's slug, as in the address of any of its pages.",
1061
1091
  "schema": {
1062
1092
  "type": "string"
1063
1093
  }
@@ -1066,6 +1096,7 @@
1066
1096
  "name": "ensemble",
1067
1097
  "in": "path",
1068
1098
  "required": true,
1099
+ "description": "The ensemble's id.",
1069
1100
  "schema": {
1070
1101
  "type": "string"
1071
1102
  }
@@ -1074,6 +1105,7 @@
1074
1105
  "name": "member",
1075
1106
  "in": "path",
1076
1107
  "required": true,
1108
+ "description": "The ensemble member's id.",
1077
1109
  "schema": {
1078
1110
  "type": "string"
1079
1111
  }
@@ -1132,6 +1164,7 @@
1132
1164
  "name": "community",
1133
1165
  "in": "path",
1134
1166
  "required": true,
1167
+ "description": "The community's slug, as in the address of any of its pages.",
1135
1168
  "schema": {
1136
1169
  "type": "string"
1137
1170
  }
@@ -1140,6 +1173,7 @@
1140
1173
  "name": "ensemble",
1141
1174
  "in": "path",
1142
1175
  "required": true,
1176
+ "description": "The ensemble's id.",
1143
1177
  "schema": {
1144
1178
  "type": "string"
1145
1179
  }
@@ -1148,6 +1182,7 @@
1148
1182
  "name": "member",
1149
1183
  "in": "path",
1150
1184
  "required": true,
1185
+ "description": "The ensemble member's id.",
1151
1186
  "schema": {
1152
1187
  "type": "string"
1153
1188
  }
@@ -1187,6 +1222,7 @@
1187
1222
  "name": "community",
1188
1223
  "in": "path",
1189
1224
  "required": true,
1225
+ "description": "The community's slug, as in the address of any of its pages.",
1190
1226
  "schema": {
1191
1227
  "type": "string"
1192
1228
  }
@@ -1195,6 +1231,7 @@
1195
1231
  "name": "ensemble",
1196
1232
  "in": "path",
1197
1233
  "required": true,
1234
+ "description": "The ensemble's id.",
1198
1235
  "schema": {
1199
1236
  "type": "string"
1200
1237
  }
@@ -1203,6 +1240,7 @@
1203
1240
  "name": "member",
1204
1241
  "in": "path",
1205
1242
  "required": true,
1243
+ "description": "The ensemble member's id.",
1206
1244
  "schema": {
1207
1245
  "type": "string"
1208
1246
  }
@@ -1212,6 +1250,9 @@
1212
1250
  "200": {
1213
1251
  "description": "What was read or written, as JSON."
1214
1252
  },
1253
+ "409": {
1254
+ "description": "Refused as things stand; `message` says why."
1255
+ },
1215
1256
  "401": {
1216
1257
  "$ref": "#/components/responses/Unknown"
1217
1258
  },
@@ -1242,6 +1283,7 @@
1242
1283
  "name": "community",
1243
1284
  "in": "path",
1244
1285
  "required": true,
1286
+ "description": "The community's slug, as in the address of any of its pages.",
1245
1287
  "schema": {
1246
1288
  "type": "string"
1247
1289
  }
@@ -1264,7 +1306,7 @@
1264
1306
  "required": true,
1265
1307
  "schema": {
1266
1308
  "type": "string",
1267
- "description": "As Y-m-d"
1309
+ "description": "As Y-m-d."
1268
1310
  }
1269
1311
  },
1270
1312
  {
@@ -1285,7 +1327,7 @@
1285
1327
  "required": true,
1286
1328
  "schema": {
1287
1329
  "type": "string",
1288
- "description": "As Y-m-d"
1330
+ "description": "As Y-m-d. On or after from."
1289
1331
  }
1290
1332
  }
1291
1333
  ],
@@ -1335,11 +1377,11 @@
1335
1377
  "string",
1336
1378
  "null"
1337
1379
  ],
1338
- "description": "As H:i"
1380
+ "description": "As H:i."
1339
1381
  },
1340
1382
  "event_date": {
1341
1383
  "type": "string",
1342
- "description": "As Y-m-d"
1384
+ "description": "As Y-m-d."
1343
1385
  },
1344
1386
  "for": {
1345
1387
  "type": "array",
@@ -1365,7 +1407,8 @@
1365
1407
  },
1366
1408
  "repeat": {
1367
1409
  "enum": [
1368
- "weekly"
1410
+ "weekly",
1411
+ null
1369
1412
  ]
1370
1413
  },
1371
1414
  "start_time": {
@@ -1373,7 +1416,7 @@
1373
1416
  "string",
1374
1417
  "null"
1375
1418
  ],
1376
- "description": "As H:i"
1419
+ "description": "As H:i."
1377
1420
  },
1378
1421
  "title": {
1379
1422
  "type": "string",
@@ -1384,7 +1427,7 @@
1384
1427
  "string",
1385
1428
  "null"
1386
1429
  ],
1387
- "description": "As Y-m-d"
1430
+ "description": "As Y-m-d. Required when repeat is weekly. On or after event_date."
1388
1431
  },
1389
1432
  "venue_id": {
1390
1433
  "type": [
@@ -1407,6 +1450,7 @@
1407
1450
  "name": "community",
1408
1451
  "in": "path",
1409
1452
  "required": true,
1453
+ "description": "The community's slug, as in the address of any of its pages.",
1410
1454
  "schema": {
1411
1455
  "type": "string"
1412
1456
  }
@@ -1446,6 +1490,7 @@
1446
1490
  "name": "community",
1447
1491
  "in": "path",
1448
1492
  "required": true,
1493
+ "description": "The community's slug, as in the address of any of its pages.",
1449
1494
  "schema": {
1450
1495
  "type": "string"
1451
1496
  }
@@ -1454,6 +1499,7 @@
1454
1499
  "name": "event",
1455
1500
  "in": "path",
1456
1501
  "required": true,
1502
+ "description": "The event's id.",
1457
1503
  "schema": {
1458
1504
  "type": "string"
1459
1505
  }
@@ -1487,7 +1533,7 @@
1487
1533
  ],
1488
1534
  "summary": "Events Update",
1489
1535
  "requestBody": {
1490
- "required": true,
1536
+ "required": false,
1491
1537
  "content": {
1492
1538
  "application/json": {
1493
1539
  "schema": {
@@ -1508,11 +1554,11 @@
1508
1554
  "string",
1509
1555
  "null"
1510
1556
  ],
1511
- "description": "As H:i"
1557
+ "description": "As H:i."
1512
1558
  },
1513
1559
  "event_date": {
1514
1560
  "type": "string",
1515
- "description": "As Y-m-d"
1561
+ "description": "As Y-m-d."
1516
1562
  },
1517
1563
  "for": {
1518
1564
  "type": "array",
@@ -1541,7 +1587,7 @@
1541
1587
  "string",
1542
1588
  "null"
1543
1589
  ],
1544
- "description": "As H:i"
1590
+ "description": "As H:i."
1545
1591
  },
1546
1592
  "title": {
1547
1593
  "type": "string",
@@ -1554,11 +1600,7 @@
1554
1600
  ],
1555
1601
  "format": "uuid"
1556
1602
  }
1557
- },
1558
- "required": [
1559
- "event_date",
1560
- "title"
1561
- ]
1603
+ }
1562
1604
  }
1563
1605
  }
1564
1606
  }
@@ -1568,6 +1610,7 @@
1568
1610
  "name": "community",
1569
1611
  "in": "path",
1570
1612
  "required": true,
1613
+ "description": "The community's slug, as in the address of any of its pages.",
1571
1614
  "schema": {
1572
1615
  "type": "string"
1573
1616
  }
@@ -1576,6 +1619,7 @@
1576
1619
  "name": "event",
1577
1620
  "in": "path",
1578
1621
  "required": true,
1622
+ "description": "The event's id.",
1579
1623
  "schema": {
1580
1624
  "type": "string"
1581
1625
  }
@@ -1613,6 +1657,7 @@
1613
1657
  "name": "community",
1614
1658
  "in": "path",
1615
1659
  "required": true,
1660
+ "description": "The community's slug, as in the address of any of its pages.",
1616
1661
  "schema": {
1617
1662
  "type": "string"
1618
1663
  }
@@ -1621,14 +1666,15 @@
1621
1666
  "name": "event",
1622
1667
  "in": "path",
1623
1668
  "required": true,
1669
+ "description": "The event's id.",
1624
1670
  "schema": {
1625
1671
  "type": "string"
1626
1672
  }
1627
1673
  }
1628
1674
  ],
1629
1675
  "responses": {
1630
- "200": {
1631
- "description": "What was read or written, as JSON."
1676
+ "204": {
1677
+ "description": "Done; nothing comes back."
1632
1678
  },
1633
1679
  "401": {
1634
1680
  "$ref": "#/components/responses/Unknown"
@@ -1660,6 +1706,7 @@
1660
1706
  "name": "community",
1661
1707
  "in": "path",
1662
1708
  "required": true,
1709
+ "description": "The community's slug, as in the address of any of its pages.",
1663
1710
  "schema": {
1664
1711
  "type": "string"
1665
1712
  }
@@ -1704,7 +1751,7 @@
1704
1751
  "string",
1705
1752
  "null"
1706
1753
  ],
1707
- "description": "As Y-m-d"
1754
+ "description": "As Y-m-d."
1708
1755
  },
1709
1756
  "name": {
1710
1757
  "type": "string",
@@ -1733,6 +1780,7 @@
1733
1780
  "name": "community",
1734
1781
  "in": "path",
1735
1782
  "required": true,
1783
+ "description": "The community's slug, as in the address of any of its pages.",
1736
1784
  "schema": {
1737
1785
  "type": "string"
1738
1786
  }
@@ -1783,7 +1831,7 @@
1783
1831
  "string",
1784
1832
  "null"
1785
1833
  ],
1786
- "description": "As Y-m-d"
1834
+ "description": "As Y-m-d."
1787
1835
  },
1788
1836
  "name": {
1789
1837
  "type": [
@@ -1805,6 +1853,7 @@
1805
1853
  "name": "community",
1806
1854
  "in": "path",
1807
1855
  "required": true,
1856
+ "description": "The community's slug, as in the address of any of its pages.",
1808
1857
  "schema": {
1809
1858
  "type": "string"
1810
1859
  }
@@ -1844,6 +1893,7 @@
1844
1893
  "name": "community",
1845
1894
  "in": "path",
1846
1895
  "required": true,
1896
+ "description": "The community's slug, as in the address of any of its pages.",
1847
1897
  "schema": {
1848
1898
  "type": "string"
1849
1899
  }
@@ -1877,9 +1927,9 @@
1877
1927
  "tags": [
1878
1928
  "hymnals"
1879
1929
  ],
1880
- "summary": "Retires a book in use, or changes the day a retired one went out; blank means today.",
1930
+ "summary": "Retires a book in use, blank meaning today, or changes the day a retired one went out, which must then be sent.",
1881
1931
  "requestBody": {
1882
- "required": true,
1932
+ "required": false,
1883
1933
  "content": {
1884
1934
  "application/json": {
1885
1935
  "schema": {
@@ -1887,12 +1937,9 @@
1887
1937
  "properties": {
1888
1938
  "in_use_until": {
1889
1939
  "type": "string",
1890
- "description": "As Y-m-d"
1940
+ "description": "As Y-m-d."
1891
1941
  }
1892
- },
1893
- "required": [
1894
- "in_use_until"
1895
- ]
1942
+ }
1896
1943
  }
1897
1944
  }
1898
1945
  }
@@ -1902,6 +1949,7 @@
1902
1949
  "name": "community",
1903
1950
  "in": "path",
1904
1951
  "required": true,
1952
+ "description": "The community's slug, as in the address of any of its pages.",
1905
1953
  "schema": {
1906
1954
  "type": "string"
1907
1955
  }
@@ -1910,6 +1958,7 @@
1910
1958
  "name": "hymnal",
1911
1959
  "in": "path",
1912
1960
  "required": true,
1961
+ "description": "The community edition's id.",
1913
1962
  "schema": {
1914
1963
  "type": "string"
1915
1964
  }
@@ -1953,7 +2002,7 @@
1953
2002
  "properties": {
1954
2003
  "in_use_from": {
1955
2004
  "type": "string",
1956
- "description": "As Y-m-d"
2005
+ "description": "As Y-m-d."
1957
2006
  }
1958
2007
  },
1959
2008
  "required": [
@@ -1968,6 +2017,7 @@
1968
2017
  "name": "community",
1969
2018
  "in": "path",
1970
2019
  "required": true,
2020
+ "description": "The community's slug, as in the address of any of its pages.",
1971
2021
  "schema": {
1972
2022
  "type": "string"
1973
2023
  }
@@ -1976,6 +2026,7 @@
1976
2026
  "name": "hymnal",
1977
2027
  "in": "path",
1978
2028
  "required": true,
2029
+ "description": "The community edition's id.",
1979
2030
  "schema": {
1980
2031
  "type": "string"
1981
2032
  }
@@ -2015,6 +2066,7 @@
2015
2066
  "name": "community",
2016
2067
  "in": "path",
2017
2068
  "required": true,
2069
+ "description": "The community's slug, as in the address of any of its pages.",
2018
2070
  "schema": {
2019
2071
  "type": "string"
2020
2072
  }
@@ -2076,6 +2128,7 @@
2076
2128
  "name": "community",
2077
2129
  "in": "path",
2078
2130
  "required": true,
2131
+ "description": "The community's slug, as in the address of any of its pages.",
2079
2132
  "schema": {
2080
2133
  "type": "string"
2081
2134
  }
@@ -2123,6 +2176,7 @@
2123
2176
  "type": "string",
2124
2177
  "format": "uuid"
2125
2178
  },
2179
+ "uniqueItems": true,
2126
2180
  "minItems": 1
2127
2181
  }
2128
2182
  },
@@ -2138,6 +2192,7 @@
2138
2192
  "name": "community",
2139
2193
  "in": "path",
2140
2194
  "required": true,
2195
+ "description": "The community's slug, as in the address of any of its pages.",
2141
2196
  "schema": {
2142
2197
  "type": "string"
2143
2198
  }
@@ -2197,6 +2252,7 @@
2197
2252
  "name": "community",
2198
2253
  "in": "path",
2199
2254
  "required": true,
2255
+ "description": "The community's slug, as in the address of any of its pages.",
2200
2256
  "schema": {
2201
2257
  "type": "string"
2202
2258
  }
@@ -2205,6 +2261,7 @@
2205
2261
  "name": "serviceJob",
2206
2262
  "in": "path",
2207
2263
  "required": true,
2264
+ "description": "The service job's id.",
2208
2265
  "schema": {
2209
2266
  "type": "string"
2210
2267
  }
@@ -2262,6 +2319,7 @@
2262
2319
  "name": "community",
2263
2320
  "in": "path",
2264
2321
  "required": true,
2322
+ "description": "The community's slug, as in the address of any of its pages.",
2265
2323
  "schema": {
2266
2324
  "type": "string"
2267
2325
  }
@@ -2270,6 +2328,7 @@
2270
2328
  "name": "serviceJob",
2271
2329
  "in": "path",
2272
2330
  "required": true,
2331
+ "description": "The service job's id.",
2273
2332
  "schema": {
2274
2333
  "type": "string"
2275
2334
  }
@@ -2309,6 +2368,7 @@
2309
2368
  "name": "community",
2310
2369
  "in": "path",
2311
2370
  "required": true,
2371
+ "description": "The community's slug, as in the address of any of its pages.",
2312
2372
  "schema": {
2313
2373
  "type": "string"
2314
2374
  }
@@ -2455,6 +2515,7 @@
2455
2515
  "name": "community",
2456
2516
  "in": "path",
2457
2517
  "required": true,
2518
+ "description": "The community's slug, as in the address of any of its pages.",
2458
2519
  "schema": {
2459
2520
  "type": "string"
2460
2521
  }
@@ -2494,6 +2555,7 @@
2494
2555
  "name": "community",
2495
2556
  "in": "path",
2496
2557
  "required": true,
2558
+ "description": "The community's slug, as in the address of any of its pages.",
2497
2559
  "schema": {
2498
2560
  "type": "string"
2499
2561
  }
@@ -2566,6 +2628,7 @@
2566
2628
  "name": "community",
2567
2629
  "in": "path",
2568
2630
  "required": true,
2631
+ "description": "The community's slug, as in the address of any of its pages.",
2569
2632
  "schema": {
2570
2633
  "type": "string"
2571
2634
  }
@@ -2629,6 +2692,7 @@
2629
2692
  "name": "community",
2630
2693
  "in": "path",
2631
2694
  "required": true,
2695
+ "description": "The community's slug, as in the address of any of its pages.",
2632
2696
  "schema": {
2633
2697
  "type": "string"
2634
2698
  }
@@ -2665,12 +2729,13 @@
2665
2729
  "tags": [
2666
2730
  "music"
2667
2731
  ],
2668
- "summary": "The Music page's list with its dial turned down, fifty to a page. `q` matches a title or a number in one of the community's books; `group` and `hymnal` take ids from the lists in the answer, and the same lenses the page offers apply.",
2732
+ "summary": "The Music page's list with its dial turned down, fifty to a page. `q` matches a title or a number in one of the community's books; `group` and `hymnal` take ids from the lists in the answer, and the same lenses the page offers apply: `key`, `mode` and `familiarity` a value or `none`; `history` never, a-year, three-years or most-often; `files` no-recording, no-tagged-recording, missing-expected-part, parts-not-listed, no-score or score-not-pointed; `tune`, `meter` and `contributor` the start of one; `topic` one exactly; `pairings` 1 for on. A value outside these is ignored.",
2669
2733
  "parameters": [
2670
2734
  {
2671
2735
  "name": "community",
2672
2736
  "in": "path",
2673
2737
  "required": true,
2738
+ "description": "The community's slug, as in the address of any of its pages.",
2674
2739
  "schema": {
2675
2740
  "type": "string"
2676
2741
  }
@@ -2679,9 +2744,44 @@
2679
2744
  "name": "archived",
2680
2745
  "in": "query",
2681
2746
  "required": false,
2747
+ "schema": {
2748
+ "type": "integer",
2749
+ "enum": [
2750
+ 1,
2751
+ 0
2752
+ ],
2753
+ "description": "1 for yes, 0 for no."
2754
+ }
2755
+ },
2756
+ {
2757
+ "name": "contributor",
2758
+ "in": "query",
2759
+ "required": false,
2682
2760
  "schema": {
2683
2761
  "type": [
2684
- "boolean",
2762
+ "string",
2763
+ "null"
2764
+ ]
2765
+ }
2766
+ },
2767
+ {
2768
+ "name": "familiarity",
2769
+ "in": "query",
2770
+ "required": false,
2771
+ "schema": {
2772
+ "type": [
2773
+ "string",
2774
+ "null"
2775
+ ]
2776
+ }
2777
+ },
2778
+ {
2779
+ "name": "files",
2780
+ "in": "query",
2781
+ "required": false,
2782
+ "schema": {
2783
+ "type": [
2784
+ "string",
2685
2785
  "null"
2686
2786
  ]
2687
2787
  }
@@ -2697,6 +2797,17 @@
2697
2797
  ]
2698
2798
  }
2699
2799
  },
2800
+ {
2801
+ "name": "history",
2802
+ "in": "query",
2803
+ "required": false,
2804
+ "schema": {
2805
+ "type": [
2806
+ "string",
2807
+ "null"
2808
+ ]
2809
+ }
2810
+ },
2700
2811
  {
2701
2812
  "name": "hymnal",
2702
2813
  "in": "query",
@@ -2708,6 +2819,39 @@
2708
2819
  ]
2709
2820
  }
2710
2821
  },
2822
+ {
2823
+ "name": "key",
2824
+ "in": "query",
2825
+ "required": false,
2826
+ "schema": {
2827
+ "type": [
2828
+ "string",
2829
+ "null"
2830
+ ]
2831
+ }
2832
+ },
2833
+ {
2834
+ "name": "meter",
2835
+ "in": "query",
2836
+ "required": false,
2837
+ "schema": {
2838
+ "type": [
2839
+ "string",
2840
+ "null"
2841
+ ]
2842
+ }
2843
+ },
2844
+ {
2845
+ "name": "mode",
2846
+ "in": "query",
2847
+ "required": false,
2848
+ "schema": {
2849
+ "type": [
2850
+ "string",
2851
+ "null"
2852
+ ]
2853
+ }
2854
+ },
2711
2855
  {
2712
2856
  "name": "page",
2713
2857
  "in": "query",
@@ -2720,6 +2864,17 @@
2720
2864
  "minimum": 1
2721
2865
  }
2722
2866
  },
2867
+ {
2868
+ "name": "pairings",
2869
+ "in": "query",
2870
+ "required": false,
2871
+ "schema": {
2872
+ "type": [
2873
+ "string",
2874
+ "null"
2875
+ ]
2876
+ }
2877
+ },
2723
2878
  {
2724
2879
  "name": "q",
2725
2880
  "in": "query",
@@ -2731,6 +2886,28 @@
2731
2886
  ],
2732
2887
  "maxLength": 255
2733
2888
  }
2889
+ },
2890
+ {
2891
+ "name": "topic",
2892
+ "in": "query",
2893
+ "required": false,
2894
+ "schema": {
2895
+ "type": [
2896
+ "string",
2897
+ "null"
2898
+ ]
2899
+ }
2900
+ },
2901
+ {
2902
+ "name": "tune",
2903
+ "in": "query",
2904
+ "required": false,
2905
+ "schema": {
2906
+ "type": [
2907
+ "string",
2908
+ "null"
2909
+ ]
2910
+ }
2734
2911
  }
2735
2912
  ],
2736
2913
  "responses": {
@@ -2761,11 +2938,11 @@
2761
2938
  "tags": [
2762
2939
  "music"
2763
2940
  ],
2764
- "summary": "Uploading for a tune the community only has in its books makes the tune its own; the answer names it, so what follows goes to it.",
2941
+ "summary": "Uploading for a tune the community only has in its books makes the tune its own; the answer's `tune_id` names it, so what follows goes to it. `belongs_to` is not read here.",
2765
2942
  "requestBody": {
2766
2943
  "required": true,
2767
2944
  "content": {
2768
- "application/json": {
2945
+ "multipart/form-data": {
2769
2946
  "schema": {
2770
2947
  "type": "object",
2771
2948
  "properties": {
@@ -2776,7 +2953,7 @@
2776
2953
  "file": {
2777
2954
  "type": "string",
2778
2955
  "format": "binary",
2779
- "maxLength": 65536
2956
+ "description": "A file (mp3, pdf), up to 64 MB."
2780
2957
  }
2781
2958
  },
2782
2959
  "required": [
@@ -2791,6 +2968,7 @@
2791
2968
  "name": "community",
2792
2969
  "in": "path",
2793
2970
  "required": true,
2971
+ "description": "The community's slug, as in the address of any of its pages.",
2794
2972
  "schema": {
2795
2973
  "type": "string"
2796
2974
  }
@@ -2799,6 +2977,7 @@
2799
2977
  "name": "catalogTune",
2800
2978
  "in": "path",
2801
2979
  "required": true,
2980
+ "description": "The catalog tune's id.",
2802
2981
  "schema": {
2803
2982
  "type": "string"
2804
2983
  }
@@ -2860,6 +3039,7 @@
2860
3039
  "name": "community",
2861
3040
  "in": "path",
2862
3041
  "required": true,
3042
+ "description": "The community's slug, as in the address of any of its pages.",
2863
3043
  "schema": {
2864
3044
  "type": "string"
2865
3045
  }
@@ -2868,6 +3048,7 @@
2868
3048
  "name": "tune",
2869
3049
  "in": "path",
2870
3050
  "required": true,
3051
+ "description": "The tune's id.",
2871
3052
  "schema": {
2872
3053
  "type": "string"
2873
3054
  }
@@ -2907,6 +3088,7 @@
2907
3088
  "name": "community",
2908
3089
  "in": "path",
2909
3090
  "required": true,
3091
+ "description": "The community's slug, as in the address of any of its pages.",
2910
3092
  "schema": {
2911
3093
  "type": "string"
2912
3094
  }
@@ -2915,6 +3097,7 @@
2915
3097
  "name": "tune",
2916
3098
  "in": "path",
2917
3099
  "required": true,
3100
+ "description": "The tune's id.",
2918
3101
  "schema": {
2919
3102
  "type": "string"
2920
3103
  }
@@ -2946,11 +3129,11 @@
2946
3129
  "tags": [
2947
3130
  "music"
2948
3131
  ],
2949
- "summary": "Music Tunes Files Store",
3132
+ "summary": "Uploads a PDF or MP3 to the tune as a form, field `file`; `belongs_to` is `tune` or `tune:{node}`.",
2950
3133
  "requestBody": {
2951
3134
  "required": true,
2952
3135
  "content": {
2953
- "application/json": {
3136
+ "multipart/form-data": {
2954
3137
  "schema": {
2955
3138
  "type": "object",
2956
3139
  "properties": {
@@ -2961,7 +3144,7 @@
2961
3144
  "file": {
2962
3145
  "type": "string",
2963
3146
  "format": "binary",
2964
- "maxLength": 65536
3147
+ "description": "A file (mp3, pdf), up to 64 MB."
2965
3148
  }
2966
3149
  },
2967
3150
  "required": [
@@ -2976,6 +3159,7 @@
2976
3159
  "name": "community",
2977
3160
  "in": "path",
2978
3161
  "required": true,
3162
+ "description": "The community's slug, as in the address of any of its pages.",
2979
3163
  "schema": {
2980
3164
  "type": "string"
2981
3165
  }
@@ -2984,6 +3168,7 @@
2984
3168
  "name": "tune",
2985
3169
  "in": "path",
2986
3170
  "required": true,
3171
+ "description": "The tune's id.",
2987
3172
  "schema": {
2988
3173
  "type": "string"
2989
3174
  }
@@ -3037,7 +3222,8 @@
3037
3222
  "phrygian",
3038
3223
  "lydian",
3039
3224
  "mixolydian",
3040
- "locrian"
3225
+ "locrian",
3226
+ null
3041
3227
  ]
3042
3228
  },
3043
3229
  "notes": {
@@ -3055,7 +3241,8 @@
3055
3241
  "items": {
3056
3242
  "type": "string",
3057
3243
  "format": "uuid"
3058
- }
3244
+ },
3245
+ "uniqueItems": true
3059
3246
  },
3060
3247
  "tonal_center": {
3061
3248
  "enum": [
@@ -3079,7 +3266,8 @@
3079
3266
  "b_flat",
3080
3267
  "b",
3081
3268
  "b_sharp",
3082
- "c_flat"
3269
+ "c_flat",
3270
+ null
3083
3271
  ]
3084
3272
  }
3085
3273
  }
@@ -3092,6 +3280,7 @@
3092
3280
  "name": "community",
3093
3281
  "in": "path",
3094
3282
  "required": true,
3283
+ "description": "The community's slug, as in the address of any of its pages.",
3095
3284
  "schema": {
3096
3285
  "type": "string"
3097
3286
  }
@@ -3100,6 +3289,7 @@
3100
3289
  "name": "tune",
3101
3290
  "in": "path",
3102
3291
  "required": true,
3292
+ "description": "The tune's id.",
3103
3293
  "schema": {
3104
3294
  "type": "string"
3105
3295
  }
@@ -3108,6 +3298,7 @@
3108
3298
  "name": "file",
3109
3299
  "in": "path",
3110
3300
  "required": true,
3301
+ "description": "The file's id.",
3111
3302
  "schema": {
3112
3303
  "type": "string"
3113
3304
  }
@@ -3145,6 +3336,7 @@
3145
3336
  "name": "community",
3146
3337
  "in": "path",
3147
3338
  "required": true,
3339
+ "description": "The community's slug, as in the address of any of its pages.",
3148
3340
  "schema": {
3149
3341
  "type": "string"
3150
3342
  }
@@ -3153,6 +3345,7 @@
3153
3345
  "name": "tune",
3154
3346
  "in": "path",
3155
3347
  "required": true,
3348
+ "description": "The tune's id.",
3156
3349
  "schema": {
3157
3350
  "type": "string"
3158
3351
  }
@@ -3161,6 +3354,7 @@
3161
3354
  "name": "file",
3162
3355
  "in": "path",
3163
3356
  "required": true,
3357
+ "description": "The file's id.",
3164
3358
  "schema": {
3165
3359
  "type": "string"
3166
3360
  }
@@ -3200,6 +3394,7 @@
3200
3394
  "name": "community",
3201
3395
  "in": "path",
3202
3396
  "required": true,
3397
+ "description": "The community's slug, as in the address of any of its pages.",
3203
3398
  "schema": {
3204
3399
  "type": "string"
3205
3400
  }
@@ -3208,6 +3403,7 @@
3208
3403
  "name": "tune",
3209
3404
  "in": "path",
3210
3405
  "required": true,
3406
+ "description": "The tune's id.",
3211
3407
  "schema": {
3212
3408
  "type": "string"
3213
3409
  }
@@ -3216,9 +3412,21 @@
3216
3412
  "name": "file",
3217
3413
  "in": "path",
3218
3414
  "required": true,
3415
+ "description": "The file's id.",
3219
3416
  "schema": {
3220
3417
  "type": "string"
3221
3418
  }
3419
+ },
3420
+ {
3421
+ "name": "inline",
3422
+ "in": "query",
3423
+ "required": false,
3424
+ "schema": {
3425
+ "type": [
3426
+ "string",
3427
+ "null"
3428
+ ]
3429
+ }
3222
3430
  }
3223
3431
  ],
3224
3432
  "responses": {
@@ -3255,6 +3463,7 @@
3255
3463
  "name": "community",
3256
3464
  "in": "path",
3257
3465
  "required": true,
3466
+ "description": "The community's slug, as in the address of any of its pages.",
3258
3467
  "schema": {
3259
3468
  "type": "string"
3260
3469
  }
@@ -3263,6 +3472,7 @@
3263
3472
  "name": "tune",
3264
3473
  "in": "path",
3265
3474
  "required": true,
3475
+ "description": "The tune's id.",
3266
3476
  "schema": {
3267
3477
  "type": "string"
3268
3478
  }
@@ -3294,7 +3504,7 @@
3294
3504
  "tags": [
3295
3505
  "music"
3296
3506
  ],
3297
- "summary": "Music Tunes Link",
3507
+ "summary": "Links the tune to one of its candidates, read at this address. Where the community already holds that catalog tune, this one is folded into it: the answer's `id` is the tune that stays, and `merged` is true.",
3298
3508
  "requestBody": {
3299
3509
  "required": true,
3300
3510
  "content": {
@@ -3319,6 +3529,7 @@
3319
3529
  "name": "community",
3320
3530
  "in": "path",
3321
3531
  "required": true,
3532
+ "description": "The community's slug, as in the address of any of its pages.",
3322
3533
  "schema": {
3323
3534
  "type": "string"
3324
3535
  }
@@ -3327,6 +3538,7 @@
3327
3538
  "name": "tune",
3328
3539
  "in": "path",
3329
3540
  "required": true,
3541
+ "description": "The tune's id.",
3330
3542
  "schema": {
3331
3543
  "type": "string"
3332
3544
  }
@@ -3366,6 +3578,7 @@
3366
3578
  "name": "community",
3367
3579
  "in": "path",
3368
3580
  "required": true,
3581
+ "description": "The community's slug, as in the address of any of its pages.",
3369
3582
  "schema": {
3370
3583
  "type": "string"
3371
3584
  }
@@ -3374,6 +3587,7 @@
3374
3587
  "name": "piece",
3375
3588
  "in": "path",
3376
3589
  "required": true,
3590
+ "description": "The piece's id.",
3377
3591
  "schema": {
3378
3592
  "type": "string"
3379
3593
  }
@@ -3405,9 +3619,9 @@
3405
3619
  "tags": [
3406
3620
  "music"
3407
3621
  ],
3408
- "summary": "Leaving out `groups` leaves them alone; an empty list empties them.",
3622
+ "summary": "Only the fields sent change, and an empty `groups` empties them. `catalog_tune_id` links a catalog tune; `tune_name: null` takes the tune away.",
3409
3623
  "requestBody": {
3410
- "required": true,
3624
+ "required": false,
3411
3625
  "content": {
3412
3626
  "application/json": {
3413
3627
  "schema": {
@@ -3459,10 +3673,7 @@
3459
3673
  ],
3460
3674
  "maxLength": 255
3461
3675
  }
3462
- },
3463
- "required": [
3464
- "title"
3465
- ]
3676
+ }
3466
3677
  }
3467
3678
  }
3468
3679
  }
@@ -3472,6 +3683,7 @@
3472
3683
  "name": "community",
3473
3684
  "in": "path",
3474
3685
  "required": true,
3686
+ "description": "The community's slug, as in the address of any of its pages.",
3475
3687
  "schema": {
3476
3688
  "type": "string"
3477
3689
  }
@@ -3480,6 +3692,7 @@
3480
3692
  "name": "piece",
3481
3693
  "in": "path",
3482
3694
  "required": true,
3695
+ "description": "The piece's id.",
3483
3696
  "schema": {
3484
3697
  "type": "string"
3485
3698
  }
@@ -3537,6 +3750,7 @@
3537
3750
  "name": "community",
3538
3751
  "in": "path",
3539
3752
  "required": true,
3753
+ "description": "The community's slug, as in the address of any of its pages.",
3540
3754
  "schema": {
3541
3755
  "type": "string"
3542
3756
  }
@@ -3545,6 +3759,7 @@
3545
3759
  "name": "piece",
3546
3760
  "in": "path",
3547
3761
  "required": true,
3762
+ "description": "The piece's id.",
3548
3763
  "schema": {
3549
3764
  "type": "string"
3550
3765
  }
@@ -3580,7 +3795,7 @@
3580
3795
  ],
3581
3796
  "summary": "An empty list takes the book's own list away, so it reads the piece's.",
3582
3797
  "requestBody": {
3583
- "required": false,
3798
+ "required": true,
3584
3799
  "content": {
3585
3800
  "application/json": {
3586
3801
  "schema": {
@@ -3591,9 +3806,13 @@
3591
3806
  "items": {
3592
3807
  "type": "string",
3593
3808
  "format": "uuid"
3594
- }
3809
+ },
3810
+ "uniqueItems": true
3595
3811
  }
3596
- }
3812
+ },
3813
+ "required": [
3814
+ "part_ids"
3815
+ ]
3597
3816
  }
3598
3817
  }
3599
3818
  }
@@ -3603,6 +3822,7 @@
3603
3822
  "name": "community",
3604
3823
  "in": "path",
3605
3824
  "required": true,
3825
+ "description": "The community's slug, as in the address of any of its pages.",
3606
3826
  "schema": {
3607
3827
  "type": "string"
3608
3828
  }
@@ -3611,6 +3831,7 @@
3611
3831
  "name": "piece",
3612
3832
  "in": "path",
3613
3833
  "required": true,
3834
+ "description": "The piece's id.",
3614
3835
  "schema": {
3615
3836
  "type": "string"
3616
3837
  }
@@ -3619,6 +3840,7 @@
3619
3840
  "name": "hymnal",
3620
3841
  "in": "path",
3621
3842
  "required": true,
3843
+ "description": "The community edition's id.",
3622
3844
  "schema": {
3623
3845
  "type": "string"
3624
3846
  }
@@ -3665,14 +3887,16 @@
3665
3887
  "string",
3666
3888
  "null"
3667
3889
  ],
3668
- "format": "uuid"
3890
+ "format": "uuid",
3891
+ "description": "Required when name is not sent."
3669
3892
  },
3670
3893
  "name": {
3671
3894
  "type": [
3672
3895
  "string",
3673
3896
  "null"
3674
3897
  ],
3675
- "maxLength": 255
3898
+ "maxLength": 255,
3899
+ "description": "Required when contributor_id is not sent."
3676
3900
  },
3677
3901
  "role": {
3678
3902
  "enum": [
@@ -3697,6 +3921,7 @@
3697
3921
  "name": "community",
3698
3922
  "in": "path",
3699
3923
  "required": true,
3924
+ "description": "The community's slug, as in the address of any of its pages.",
3700
3925
  "schema": {
3701
3926
  "type": "string"
3702
3927
  }
@@ -3705,6 +3930,7 @@
3705
3930
  "name": "piece",
3706
3931
  "in": "path",
3707
3932
  "required": true,
3933
+ "description": "The piece's id.",
3708
3934
  "schema": {
3709
3935
  "type": "string"
3710
3936
  }
@@ -3747,6 +3973,7 @@
3747
3973
  "name": "community",
3748
3974
  "in": "path",
3749
3975
  "required": true,
3976
+ "description": "The community's slug, as in the address of any of its pages.",
3750
3977
  "schema": {
3751
3978
  "type": "string"
3752
3979
  }
@@ -3755,6 +3982,7 @@
3755
3982
  "name": "piece",
3756
3983
  "in": "path",
3757
3984
  "required": true,
3985
+ "description": "The piece's id.",
3758
3986
  "schema": {
3759
3987
  "type": "string"
3760
3988
  }
@@ -3763,6 +3991,7 @@
3763
3991
  "name": "pieceContributor",
3764
3992
  "in": "path",
3765
3993
  "required": true,
3994
+ "description": "The piece contributor's id.",
3766
3995
  "schema": {
3767
3996
  "type": "string"
3768
3997
  }
@@ -3802,6 +4031,7 @@
3802
4031
  "name": "community",
3803
4032
  "in": "path",
3804
4033
  "required": true,
4034
+ "description": "The community's slug, as in the address of any of its pages.",
3805
4035
  "schema": {
3806
4036
  "type": "string"
3807
4037
  }
@@ -3810,6 +4040,7 @@
3810
4040
  "name": "piece",
3811
4041
  "in": "path",
3812
4042
  "required": true,
4043
+ "description": "The piece's id.",
3813
4044
  "schema": {
3814
4045
  "type": "string"
3815
4046
  }
@@ -3841,11 +4072,11 @@
3841
4072
  "tags": [
3842
4073
  "music"
3843
4074
  ],
3844
- "summary": "Music Files Store",
4075
+ "summary": "Uploads a PDF or MP3 as a form, field `file`; `belongs_to`, one of the piece's `belongs_to_options`, says where on the piece it goes. The answer's `file_id` names it.",
3845
4076
  "requestBody": {
3846
4077
  "required": true,
3847
4078
  "content": {
3848
- "application/json": {
4079
+ "multipart/form-data": {
3849
4080
  "schema": {
3850
4081
  "type": "object",
3851
4082
  "properties": {
@@ -3856,7 +4087,7 @@
3856
4087
  "file": {
3857
4088
  "type": "string",
3858
4089
  "format": "binary",
3859
- "maxLength": 65536
4090
+ "description": "A file (mp3, pdf), up to 64 MB."
3860
4091
  }
3861
4092
  },
3862
4093
  "required": [
@@ -3871,6 +4102,7 @@
3871
4102
  "name": "community",
3872
4103
  "in": "path",
3873
4104
  "required": true,
4105
+ "description": "The community's slug, as in the address of any of its pages.",
3874
4106
  "schema": {
3875
4107
  "type": "string"
3876
4108
  }
@@ -3879,6 +4111,7 @@
3879
4111
  "name": "piece",
3880
4112
  "in": "path",
3881
4113
  "required": true,
4114
+ "description": "The piece's id.",
3882
4115
  "schema": {
3883
4116
  "type": "string"
3884
4117
  }
@@ -3912,7 +4145,7 @@
3912
4145
  "tags": [
3913
4146
  "music"
3914
4147
  ],
3915
- "summary": "`part_ids` (the whole list), `tonal_center`, `mode`, `notes`, and `belongs_to`: a step of the piece's chain (`piece`, `tune`, `tune:{node}`, `text:{node}`, `printing:{entry}`), or a printing's bare id.",
4148
+ "summary": "`part_ids` (the whole list), `tonal_center`, `mode`, `notes`, and `belongs_to`: one of the piece's `belongs_to_options` (`piece`, `tune`, `tune:{node}`, `text:{node}`, `printing:{entry}` for a catalog printing).",
3916
4149
  "requestBody": {
3917
4150
  "required": false,
3918
4151
  "content": {
@@ -3932,7 +4165,8 @@
3932
4165
  "phrygian",
3933
4166
  "lydian",
3934
4167
  "mixolydian",
3935
- "locrian"
4168
+ "locrian",
4169
+ null
3936
4170
  ]
3937
4171
  },
3938
4172
  "notes": {
@@ -3950,7 +4184,8 @@
3950
4184
  "items": {
3951
4185
  "type": "string",
3952
4186
  "format": "uuid"
3953
- }
4187
+ },
4188
+ "uniqueItems": true
3954
4189
  },
3955
4190
  "tonal_center": {
3956
4191
  "enum": [
@@ -3974,7 +4209,8 @@
3974
4209
  "b_flat",
3975
4210
  "b",
3976
4211
  "b_sharp",
3977
- "c_flat"
4212
+ "c_flat",
4213
+ null
3978
4214
  ]
3979
4215
  }
3980
4216
  }
@@ -3987,6 +4223,7 @@
3987
4223
  "name": "community",
3988
4224
  "in": "path",
3989
4225
  "required": true,
4226
+ "description": "The community's slug, as in the address of any of its pages.",
3990
4227
  "schema": {
3991
4228
  "type": "string"
3992
4229
  }
@@ -3995,6 +4232,7 @@
3995
4232
  "name": "piece",
3996
4233
  "in": "path",
3997
4234
  "required": true,
4235
+ "description": "The piece's id.",
3998
4236
  "schema": {
3999
4237
  "type": "string"
4000
4238
  }
@@ -4003,6 +4241,7 @@
4003
4241
  "name": "file",
4004
4242
  "in": "path",
4005
4243
  "required": true,
4244
+ "description": "The file's id.",
4006
4245
  "schema": {
4007
4246
  "type": "string"
4008
4247
  }
@@ -4040,6 +4279,7 @@
4040
4279
  "name": "community",
4041
4280
  "in": "path",
4042
4281
  "required": true,
4282
+ "description": "The community's slug, as in the address of any of its pages.",
4043
4283
  "schema": {
4044
4284
  "type": "string"
4045
4285
  }
@@ -4048,6 +4288,7 @@
4048
4288
  "name": "piece",
4049
4289
  "in": "path",
4050
4290
  "required": true,
4291
+ "description": "The piece's id.",
4051
4292
  "schema": {
4052
4293
  "type": "string"
4053
4294
  }
@@ -4056,6 +4297,7 @@
4056
4297
  "name": "file",
4057
4298
  "in": "path",
4058
4299
  "required": true,
4300
+ "description": "The file's id.",
4059
4301
  "schema": {
4060
4302
  "type": "string"
4061
4303
  }
@@ -4095,6 +4337,7 @@
4095
4337
  "name": "community",
4096
4338
  "in": "path",
4097
4339
  "required": true,
4340
+ "description": "The community's slug, as in the address of any of its pages.",
4098
4341
  "schema": {
4099
4342
  "type": "string"
4100
4343
  }
@@ -4103,6 +4346,7 @@
4103
4346
  "name": "piece",
4104
4347
  "in": "path",
4105
4348
  "required": true,
4349
+ "description": "The piece's id.",
4106
4350
  "schema": {
4107
4351
  "type": "string"
4108
4352
  }
@@ -4111,9 +4355,21 @@
4111
4355
  "name": "file",
4112
4356
  "in": "path",
4113
4357
  "required": true,
4358
+ "description": "The file's id.",
4114
4359
  "schema": {
4115
4360
  "type": "string"
4116
4361
  }
4362
+ },
4363
+ {
4364
+ "name": "inline",
4365
+ "in": "query",
4366
+ "required": false,
4367
+ "schema": {
4368
+ "type": [
4369
+ "string",
4370
+ "null"
4371
+ ]
4372
+ }
4117
4373
  }
4118
4374
  ],
4119
4375
  "responses": {
@@ -4176,6 +4432,7 @@
4176
4432
  "name": "community",
4177
4433
  "in": "path",
4178
4434
  "required": true,
4435
+ "description": "The community's slug, as in the address of any of its pages.",
4179
4436
  "schema": {
4180
4437
  "type": "string"
4181
4438
  }
@@ -4184,6 +4441,7 @@
4184
4441
  "name": "piece",
4185
4442
  "in": "path",
4186
4443
  "required": true,
4444
+ "description": "The piece's id.",
4187
4445
  "schema": {
4188
4446
  "type": "string"
4189
4447
  }
@@ -4249,6 +4507,7 @@
4249
4507
  "name": "community",
4250
4508
  "in": "path",
4251
4509
  "required": true,
4510
+ "description": "The community's slug, as in the address of any of its pages.",
4252
4511
  "schema": {
4253
4512
  "type": "string"
4254
4513
  }
@@ -4257,6 +4516,7 @@
4257
4516
  "name": "piece",
4258
4517
  "in": "path",
4259
4518
  "required": true,
4519
+ "description": "The piece's id.",
4260
4520
  "schema": {
4261
4521
  "type": "string"
4262
4522
  }
@@ -4265,6 +4525,7 @@
4265
4525
  "name": "pieceFlag",
4266
4526
  "in": "path",
4267
4527
  "required": true,
4528
+ "description": "The piece flag's id.",
4268
4529
  "schema": {
4269
4530
  "type": "string"
4270
4531
  }
@@ -4310,7 +4571,8 @@
4310
4571
  "enum": [
4311
4572
  "new",
4312
4573
  "learning",
4313
- "known_well"
4574
+ "known_well",
4575
+ null
4314
4576
  ]
4315
4577
  },
4316
4578
  "mode": {
@@ -4321,7 +4583,8 @@
4321
4583
  "phrygian",
4322
4584
  "lydian",
4323
4585
  "mixolydian",
4324
- "locrian"
4586
+ "locrian",
4587
+ null
4325
4588
  ]
4326
4589
  },
4327
4590
  "notes": {
@@ -4353,7 +4616,8 @@
4353
4616
  "b_flat",
4354
4617
  "b",
4355
4618
  "b_sharp",
4356
- "c_flat"
4619
+ "c_flat",
4620
+ null
4357
4621
  ]
4358
4622
  },
4359
4623
  "usual_verses": {
@@ -4373,6 +4637,7 @@
4373
4637
  "name": "community",
4374
4638
  "in": "path",
4375
4639
  "required": true,
4640
+ "description": "The community's slug, as in the address of any of its pages.",
4376
4641
  "schema": {
4377
4642
  "type": "string"
4378
4643
  }
@@ -4381,6 +4646,7 @@
4381
4646
  "name": "piece",
4382
4647
  "in": "path",
4383
4648
  "required": true,
4649
+ "description": "The piece's id.",
4384
4650
  "schema": {
4385
4651
  "type": "string"
4386
4652
  }
@@ -4414,7 +4680,7 @@
4414
4680
  "tags": [
4415
4681
  "music"
4416
4682
  ],
4417
- "summary": "Answers with the piece that stays.",
4683
+ "summary": "Folds `with` into this piece and answers with the one that stays. `keep` and `name` are each one of the two pieces' ids: whose details stay, and whose title.",
4418
4684
  "requestBody": {
4419
4685
  "required": true,
4420
4686
  "content": {
@@ -4423,16 +4689,10 @@
4423
4689
  "type": "object",
4424
4690
  "properties": {
4425
4691
  "keep": {
4426
- "enum": [
4427
- "",
4428
- ""
4429
- ]
4692
+ "type": "string"
4430
4693
  },
4431
4694
  "name": {
4432
- "enum": [
4433
- "",
4434
- ""
4435
- ]
4695
+ "type": "string"
4436
4696
  },
4437
4697
  "with": {
4438
4698
  "type": "string",
@@ -4453,6 +4713,7 @@
4453
4713
  "name": "community",
4454
4714
  "in": "path",
4455
4715
  "required": true,
4716
+ "description": "The community's slug, as in the address of any of its pages.",
4456
4717
  "schema": {
4457
4718
  "type": "string"
4458
4719
  }
@@ -4461,6 +4722,7 @@
4461
4722
  "name": "piece",
4462
4723
  "in": "path",
4463
4724
  "required": true,
4725
+ "description": "The piece's id.",
4464
4726
  "schema": {
4465
4727
  "type": "string"
4466
4728
  }
@@ -4500,6 +4762,7 @@
4500
4762
  "name": "community",
4501
4763
  "in": "path",
4502
4764
  "required": true,
4765
+ "description": "The community's slug, as in the address of any of its pages.",
4503
4766
  "schema": {
4504
4767
  "type": "string"
4505
4768
  }
@@ -4508,6 +4771,7 @@
4508
4771
  "name": "piece",
4509
4772
  "in": "path",
4510
4773
  "required": true,
4774
+ "description": "The piece's id.",
4511
4775
  "schema": {
4512
4776
  "type": "string"
4513
4777
  }
@@ -4552,7 +4816,7 @@
4552
4816
  ],
4553
4817
  "summary": "The whole list each time; an empty one lists nothing.",
4554
4818
  "requestBody": {
4555
- "required": false,
4819
+ "required": true,
4556
4820
  "content": {
4557
4821
  "application/json": {
4558
4822
  "schema": {
@@ -4563,9 +4827,13 @@
4563
4827
  "items": {
4564
4828
  "type": "string",
4565
4829
  "format": "uuid"
4566
- }
4830
+ },
4831
+ "uniqueItems": true
4567
4832
  }
4568
- }
4833
+ },
4834
+ "required": [
4835
+ "part_ids"
4836
+ ]
4569
4837
  }
4570
4838
  }
4571
4839
  }
@@ -4575,6 +4843,7 @@
4575
4843
  "name": "community",
4576
4844
  "in": "path",
4577
4845
  "required": true,
4846
+ "description": "The community's slug, as in the address of any of its pages.",
4578
4847
  "schema": {
4579
4848
  "type": "string"
4580
4849
  }
@@ -4583,6 +4852,7 @@
4583
4852
  "name": "piece",
4584
4853
  "in": "path",
4585
4854
  "required": true,
4855
+ "description": "The piece's id.",
4586
4856
  "schema": {
4587
4857
  "type": "string"
4588
4858
  }
@@ -4653,6 +4923,7 @@
4653
4923
  "name": "community",
4654
4924
  "in": "path",
4655
4925
  "required": true,
4926
+ "description": "The community's slug, as in the address of any of its pages.",
4656
4927
  "schema": {
4657
4928
  "type": "string"
4658
4929
  }
@@ -4661,6 +4932,7 @@
4661
4932
  "name": "piece",
4662
4933
  "in": "path",
4663
4934
  "required": true,
4935
+ "description": "The piece's id.",
4664
4936
  "schema": {
4665
4937
  "type": "string"
4666
4938
  }
@@ -4731,6 +5003,7 @@
4731
5003
  "name": "community",
4732
5004
  "in": "path",
4733
5005
  "required": true,
5006
+ "description": "The community's slug, as in the address of any of its pages.",
4734
5007
  "schema": {
4735
5008
  "type": "string"
4736
5009
  }
@@ -4739,6 +5012,7 @@
4739
5012
  "name": "piece",
4740
5013
  "in": "path",
4741
5014
  "required": true,
5015
+ "description": "The piece's id.",
4742
5016
  "schema": {
4743
5017
  "type": "string"
4744
5018
  }
@@ -4747,6 +5021,7 @@
4747
5021
  "name": "piecePrinting",
4748
5022
  "in": "path",
4749
5023
  "required": true,
5024
+ "description": "The piece printing's id.",
4750
5025
  "schema": {
4751
5026
  "type": "string"
4752
5027
  }
@@ -4784,6 +5059,7 @@
4784
5059
  "name": "community",
4785
5060
  "in": "path",
4786
5061
  "required": true,
5062
+ "description": "The community's slug, as in the address of any of its pages.",
4787
5063
  "schema": {
4788
5064
  "type": "string"
4789
5065
  }
@@ -4792,6 +5068,7 @@
4792
5068
  "name": "piece",
4793
5069
  "in": "path",
4794
5070
  "required": true,
5071
+ "description": "The piece's id.",
4795
5072
  "schema": {
4796
5073
  "type": "string"
4797
5074
  }
@@ -4800,6 +5077,7 @@
4800
5077
  "name": "piecePrinting",
4801
5078
  "in": "path",
4802
5079
  "required": true,
5080
+ "description": "The piece printing's id.",
4803
5081
  "schema": {
4804
5082
  "type": "string"
4805
5083
  }
@@ -4858,6 +5136,7 @@
4858
5136
  "name": "community",
4859
5137
  "in": "path",
4860
5138
  "required": true,
5139
+ "description": "The community's slug, as in the address of any of its pages.",
4861
5140
  "schema": {
4862
5141
  "type": "string"
4863
5142
  }
@@ -4866,6 +5145,7 @@
4866
5145
  "name": "piece",
4867
5146
  "in": "path",
4868
5147
  "required": true,
5148
+ "description": "The piece's id.",
4869
5149
  "schema": {
4870
5150
  "type": "string"
4871
5151
  }
@@ -4908,6 +5188,7 @@
4908
5188
  "name": "community",
4909
5189
  "in": "path",
4910
5190
  "required": true,
5191
+ "description": "The community's slug, as in the address of any of its pages.",
4911
5192
  "schema": {
4912
5193
  "type": "string"
4913
5194
  }
@@ -4916,6 +5197,7 @@
4916
5197
  "name": "piece",
4917
5198
  "in": "path",
4918
5199
  "required": true,
5200
+ "description": "The piece's id.",
4919
5201
  "schema": {
4920
5202
  "type": "string"
4921
5203
  }
@@ -4924,6 +5206,7 @@
4924
5206
  "name": "piecePlacement",
4925
5207
  "in": "path",
4926
5208
  "required": true,
5209
+ "description": "The piece placement's id.",
4927
5210
  "schema": {
4928
5211
  "type": "string"
4929
5212
  }
@@ -4963,6 +5246,7 @@
4963
5246
  "name": "community",
4964
5247
  "in": "path",
4965
5248
  "required": true,
5249
+ "description": "The community's slug, as in the address of any of its pages.",
4966
5250
  "schema": {
4967
5251
  "type": "string"
4968
5252
  }
@@ -4971,9 +5255,21 @@
4971
5255
  "name": "piece",
4972
5256
  "in": "path",
4973
5257
  "required": true,
5258
+ "description": "The piece's id.",
4974
5259
  "schema": {
4975
5260
  "type": "string"
4976
5261
  }
5262
+ },
5263
+ {
5264
+ "name": "offset",
5265
+ "in": "query",
5266
+ "required": false,
5267
+ "schema": {
5268
+ "type": [
5269
+ "string",
5270
+ "null"
5271
+ ]
5272
+ }
4977
5273
  }
4978
5274
  ],
4979
5275
  "responses": {
@@ -5010,6 +5306,7 @@
5010
5306
  "name": "community",
5011
5307
  "in": "path",
5012
5308
  "required": true,
5309
+ "description": "The community's slug, as in the address of any of its pages.",
5013
5310
  "schema": {
5014
5311
  "type": "string"
5015
5312
  }
@@ -5029,7 +5326,8 @@
5029
5326
  "required": true,
5030
5327
  "schema": {
5031
5328
  "type": "string",
5032
- "format": "date"
5329
+ "format": "date",
5330
+ "description": "On or after from."
5033
5331
  }
5034
5332
  }
5035
5333
  ],
@@ -5072,7 +5370,8 @@
5072
5370
  "additionalProperties": {
5073
5371
  "type": "string",
5074
5372
  "maxLength": 255
5075
- }
5373
+ },
5374
+ "description": "Keyed by each question's `key`, from the preview."
5076
5375
  },
5077
5376
  "is_public": {
5078
5377
  "type": "boolean"
@@ -5100,7 +5399,8 @@
5100
5399
  "enum": [
5101
5400
  "A",
5102
5401
  "B",
5103
- "C"
5402
+ "C",
5403
+ null
5104
5404
  ]
5105
5405
  },
5106
5406
  "name": {
@@ -5124,7 +5424,8 @@
5124
5424
  "ordinary",
5125
5425
  "lent",
5126
5426
  "triduum",
5127
- "easter"
5427
+ "easter",
5428
+ null
5128
5429
  ]
5129
5430
  },
5130
5431
  "services": {
@@ -5149,7 +5450,8 @@
5149
5450
  "string",
5150
5451
  "null"
5151
5452
  ],
5152
- "format": "uuid"
5453
+ "format": "uuid",
5454
+ "description": "Required when services.*.assignments.*.party_type is membership. Not taken when services.*.assignments.*.party_type is ensemble."
5153
5455
  },
5154
5456
  "membership_id": {
5155
5457
  "type": [
@@ -5178,6 +5480,9 @@
5178
5480
  },
5179
5481
  "maxItems": 20
5180
5482
  },
5483
+ "is_public": {
5484
+ "type": "boolean"
5485
+ },
5181
5486
  "label": {
5182
5487
  "type": [
5183
5488
  "string",
@@ -5185,6 +5490,12 @@
5185
5490
  ],
5186
5491
  "maxLength": 255
5187
5492
  },
5493
+ "notes": {
5494
+ "type": [
5495
+ "string",
5496
+ "null"
5497
+ ]
5498
+ },
5188
5499
  "slots": {
5189
5500
  "type": "array",
5190
5501
  "items": {
@@ -5217,7 +5528,7 @@
5217
5528
  },
5218
5529
  "starts_at": {
5219
5530
  "type": "string",
5220
- "format": "date"
5531
+ "format": "date-time"
5221
5532
  },
5222
5533
  "venue_id": {
5223
5534
  "type": "string",
@@ -5263,6 +5574,7 @@
5263
5574
  "name": "community",
5264
5575
  "in": "path",
5265
5576
  "required": true,
5577
+ "description": "The community's slug, as in the address of any of its pages.",
5266
5578
  "schema": {
5267
5579
  "type": "string"
5268
5580
  }
@@ -5272,6 +5584,9 @@
5272
5584
  "201": {
5273
5585
  "description": "What was read or written, as JSON."
5274
5586
  },
5587
+ "409": {
5588
+ "description": "Templates disagree about the day: `questions` lists each, to answer and send again."
5589
+ },
5275
5590
  "401": {
5276
5591
  "$ref": "#/components/responses/Unknown"
5277
5592
  },
@@ -5302,6 +5617,7 @@
5302
5617
  "name": "community",
5303
5618
  "in": "path",
5304
5619
  "required": true,
5620
+ "description": "The community's slug, as in the address of any of its pages.",
5305
5621
  "schema": {
5306
5622
  "type": "string"
5307
5623
  }
@@ -5310,12 +5626,15 @@
5310
5626
  "name": "answers",
5311
5627
  "in": "query",
5312
5628
  "required": false,
5629
+ "style": "deepObject",
5630
+ "explode": true,
5313
5631
  "schema": {
5314
5632
  "type": "object",
5315
5633
  "additionalProperties": {
5316
5634
  "type": "string",
5317
5635
  "maxLength": 255
5318
- }
5636
+ },
5637
+ "description": "Keyed by each question's `key`, from the preview."
5319
5638
  }
5320
5639
  },
5321
5640
  {
@@ -5392,6 +5711,7 @@
5392
5711
  "name": "community",
5393
5712
  "in": "path",
5394
5713
  "required": true,
5714
+ "description": "The community's slug, as in the address of any of its pages.",
5395
5715
  "schema": {
5396
5716
  "type": "string"
5397
5717
  }
@@ -5400,6 +5720,7 @@
5400
5720
  "name": "occasion",
5401
5721
  "in": "path",
5402
5722
  "required": true,
5723
+ "description": "The occasion's id.",
5403
5724
  "schema": {
5404
5725
  "type": "string"
5405
5726
  }
@@ -5431,7 +5752,7 @@
5431
5752
  "tags": [
5432
5753
  "occasions"
5433
5754
  ],
5434
- "summary": "The occasion's own fields, sent whole as the screen sends them. Its services are their own calls.",
5755
+ "summary": "Sent whole: name, observance_date, kind and is_public; a new date moves every service with it. Its services are their own calls.",
5435
5756
  "requestBody": {
5436
5757
  "required": true,
5437
5758
  "content": {
@@ -5439,7 +5760,6 @@
5439
5760
  "schema": {
5440
5761
  "type": "object",
5441
5762
  "properties": {
5442
- "answers": [],
5443
5763
  "is_public": {
5444
5764
  "type": "boolean"
5445
5765
  },
@@ -5466,7 +5786,8 @@
5466
5786
  "enum": [
5467
5787
  "A",
5468
5788
  "B",
5469
- "C"
5789
+ "C",
5790
+ null
5470
5791
  ]
5471
5792
  },
5472
5793
  "name": {
@@ -5490,12 +5811,10 @@
5490
5811
  "ordinary",
5491
5812
  "lent",
5492
5813
  "triduum",
5493
- "easter"
5814
+ "easter",
5815
+ null
5494
5816
  ]
5495
- },
5496
- "services": [],
5497
- "skip_services": [],
5498
- "templates": []
5817
+ }
5499
5818
  },
5500
5819
  "required": [
5501
5820
  "is_public",
@@ -5512,6 +5831,7 @@
5512
5831
  "name": "community",
5513
5832
  "in": "path",
5514
5833
  "required": true,
5834
+ "description": "The community's slug, as in the address of any of its pages.",
5515
5835
  "schema": {
5516
5836
  "type": "string"
5517
5837
  }
@@ -5520,6 +5840,7 @@
5520
5840
  "name": "occasion",
5521
5841
  "in": "path",
5522
5842
  "required": true,
5843
+ "description": "The occasion's id.",
5523
5844
  "schema": {
5524
5845
  "type": "string"
5525
5846
  }
@@ -5551,12 +5872,13 @@
5551
5872
  "tags": [
5552
5873
  "occasions"
5553
5874
  ],
5554
- "summary": "Occasions Destroy",
5875
+ "summary": "Deletes the occasion and its services.",
5555
5876
  "parameters": [
5556
5877
  {
5557
5878
  "name": "community",
5558
5879
  "in": "path",
5559
5880
  "required": true,
5881
+ "description": "The community's slug, as in the address of any of its pages.",
5560
5882
  "schema": {
5561
5883
  "type": "string"
5562
5884
  }
@@ -5565,14 +5887,15 @@
5565
5887
  "name": "occasion",
5566
5888
  "in": "path",
5567
5889
  "required": true,
5890
+ "description": "The occasion's id.",
5568
5891
  "schema": {
5569
5892
  "type": "string"
5570
5893
  }
5571
5894
  }
5572
5895
  ],
5573
5896
  "responses": {
5574
- "200": {
5575
- "description": "What was read or written, as JSON."
5897
+ "204": {
5898
+ "description": "Done; nothing comes back."
5576
5899
  },
5577
5900
  "401": {
5578
5901
  "$ref": "#/components/responses/Unknown"
@@ -5612,6 +5935,7 @@
5612
5935
  "type": "string",
5613
5936
  "format": "uuid"
5614
5937
  },
5938
+ "uniqueItems": true,
5615
5939
  "minItems": 1
5616
5940
  },
5617
5941
  "slot_id": {
@@ -5632,6 +5956,7 @@
5632
5956
  "name": "community",
5633
5957
  "in": "path",
5634
5958
  "required": true,
5959
+ "description": "The community's slug, as in the address of any of its pages.",
5635
5960
  "schema": {
5636
5961
  "type": "string"
5637
5962
  }
@@ -5640,6 +5965,7 @@
5640
5965
  "name": "occasion",
5641
5966
  "in": "path",
5642
5967
  "required": true,
5968
+ "description": "The occasion's id.",
5643
5969
  "schema": {
5644
5970
  "type": "string"
5645
5971
  }
@@ -5687,6 +6013,7 @@
5687
6013
  "type": "string",
5688
6014
  "format": "uuid"
5689
6015
  },
6016
+ "uniqueItems": true,
5690
6017
  "minItems": 1
5691
6018
  }
5692
6019
  },
@@ -5702,6 +6029,7 @@
5702
6029
  "name": "community",
5703
6030
  "in": "path",
5704
6031
  "required": true,
6032
+ "description": "The community's slug, as in the address of any of its pages.",
5705
6033
  "schema": {
5706
6034
  "type": "string"
5707
6035
  }
@@ -5710,6 +6038,7 @@
5710
6038
  "name": "occasion",
5711
6039
  "in": "path",
5712
6040
  "required": true,
6041
+ "description": "The occasion's id.",
5713
6042
  "schema": {
5714
6043
  "type": "string"
5715
6044
  }
@@ -5759,8 +6088,10 @@
5759
6088
  "type": "string",
5760
6089
  "format": "uuid"
5761
6090
  },
6091
+ "uniqueItems": true,
5762
6092
  "minItems": 1
5763
- }
6093
+ },
6094
+ "description": "Keyed by service id."
5764
6095
  }
5765
6096
  },
5766
6097
  "required": [
@@ -5775,6 +6106,7 @@
5775
6106
  "name": "community",
5776
6107
  "in": "path",
5777
6108
  "required": true,
6109
+ "description": "The community's slug, as in the address of any of its pages.",
5778
6110
  "schema": {
5779
6111
  "type": "string"
5780
6112
  }
@@ -5783,6 +6115,7 @@
5783
6115
  "name": "occasion",
5784
6116
  "in": "path",
5785
6117
  "required": true,
6118
+ "description": "The occasion's id.",
5786
6119
  "schema": {
5787
6120
  "type": "string"
5788
6121
  }
@@ -5816,7 +6149,7 @@
5816
6149
  "tags": [
5817
6150
  "occasions"
5818
6151
  ],
5819
- "summary": "An open question refuses the whole pull, and nothing is written.",
6152
+ "summary": "Brings templates' services, music and people onto the day; `services` (refs from the preview) count only with `scoped`, and an open question refuses the whole pull.",
5820
6153
  "requestBody": {
5821
6154
  "required": false,
5822
6155
  "content": {
@@ -5829,7 +6162,8 @@
5829
6162
  "additionalProperties": {
5830
6163
  "type": "string",
5831
6164
  "maxLength": 1000
5832
- }
6165
+ },
6166
+ "description": "Keyed by each question's `key`, from the preview."
5833
6167
  },
5834
6168
  "scoped": {
5835
6169
  "type": [
@@ -5880,6 +6214,7 @@
5880
6214
  "name": "community",
5881
6215
  "in": "path",
5882
6216
  "required": true,
6217
+ "description": "The community's slug, as in the address of any of its pages.",
5883
6218
  "schema": {
5884
6219
  "type": "string"
5885
6220
  }
@@ -5888,6 +6223,7 @@
5888
6223
  "name": "occasion",
5889
6224
  "in": "path",
5890
6225
  "required": true,
6226
+ "description": "The occasion's id.",
5891
6227
  "schema": {
5892
6228
  "type": "string"
5893
6229
  }
@@ -5897,6 +6233,9 @@
5897
6233
  "200": {
5898
6234
  "description": "What was read or written, as JSON."
5899
6235
  },
6236
+ "409": {
6237
+ "description": "Templates disagree about the day: `questions` lists each, to answer and send again."
6238
+ },
5900
6239
  "401": {
5901
6240
  "$ref": "#/components/responses/Unknown"
5902
6241
  },
@@ -5927,6 +6266,7 @@
5927
6266
  "name": "community",
5928
6267
  "in": "path",
5929
6268
  "required": true,
6269
+ "description": "The community's slug, as in the address of any of its pages.",
5930
6270
  "schema": {
5931
6271
  "type": "string"
5932
6272
  }
@@ -5935,6 +6275,7 @@
5935
6275
  "name": "occasion",
5936
6276
  "in": "path",
5937
6277
  "required": true,
6278
+ "description": "The occasion's id.",
5938
6279
  "schema": {
5939
6280
  "type": "string"
5940
6281
  }
@@ -5943,12 +6284,15 @@
5943
6284
  "name": "answers",
5944
6285
  "in": "query",
5945
6286
  "required": false,
6287
+ "style": "deepObject",
6288
+ "explode": true,
5946
6289
  "schema": {
5947
6290
  "type": "object",
5948
6291
  "additionalProperties": {
5949
6292
  "type": "string",
5950
6293
  "maxLength": 1000
5951
- }
6294
+ },
6295
+ "description": "Keyed by each question's `key`, from the preview."
5952
6296
  }
5953
6297
  },
5954
6298
  {
@@ -5956,14 +6300,16 @@
5956
6300
  "in": "query",
5957
6301
  "required": false,
5958
6302
  "schema": {
5959
- "type": [
5960
- "boolean",
5961
- "null"
5962
- ]
6303
+ "type": "integer",
6304
+ "enum": [
6305
+ 1,
6306
+ 0
6307
+ ],
6308
+ "description": "1 for yes, 0 for no."
5963
6309
  }
5964
6310
  },
5965
6311
  {
5966
- "name": "services",
6312
+ "name": "services[]",
5967
6313
  "in": "query",
5968
6314
  "required": false,
5969
6315
  "schema": {
@@ -5979,7 +6325,7 @@
5979
6325
  }
5980
6326
  },
5981
6327
  {
5982
- "name": "skip",
6328
+ "name": "skip[]",
5983
6329
  "in": "query",
5984
6330
  "required": false,
5985
6331
  "schema": {
@@ -5995,7 +6341,7 @@
5995
6341
  }
5996
6342
  },
5997
6343
  {
5998
- "name": "templates",
6344
+ "name": "templates[]",
5999
6345
  "in": "query",
6000
6346
  "required": false,
6001
6347
  "schema": {
@@ -6039,7 +6385,7 @@
6039
6385
  "tags": [
6040
6386
  "occasions"
6041
6387
  ],
6042
- "summary": "\"Save this day\": one template with no rules, so it is only ever applied by hand, and listed on a shelf of its own.",
6388
+ "summary": "\"Save this day\" as one template on a shelf of its own. `rules` names which of the day's suggested rules it carries (day, day_year, season, season_year, nth, annual); with none it is applied by hand.",
6043
6389
  "requestBody": {
6044
6390
  "required": true,
6045
6391
  "content": {
@@ -6079,6 +6425,7 @@
6079
6425
  "name": "community",
6080
6426
  "in": "path",
6081
6427
  "required": true,
6428
+ "description": "The community's slug, as in the address of any of its pages.",
6082
6429
  "schema": {
6083
6430
  "type": "string"
6084
6431
  }
@@ -6087,6 +6434,7 @@
6087
6434
  "name": "occasion",
6088
6435
  "in": "path",
6089
6436
  "required": true,
6437
+ "description": "The occasion's id.",
6090
6438
  "schema": {
6091
6439
  "type": "string"
6092
6440
  }
@@ -6145,7 +6493,8 @@
6145
6493
  "boolean",
6146
6494
  "null"
6147
6495
  ]
6148
- }
6496
+ },
6497
+ "description": "Keyed by job category id."
6149
6498
  },
6150
6499
  "notes": {
6151
6500
  "type": [
@@ -6155,7 +6504,7 @@
6155
6504
  },
6156
6505
  "starts_at": {
6157
6506
  "type": "string",
6158
- "format": "date"
6507
+ "format": "date-time"
6159
6508
  },
6160
6509
  "venue_id": {
6161
6510
  "type": "string",
@@ -6176,6 +6525,7 @@
6176
6525
  "name": "community",
6177
6526
  "in": "path",
6178
6527
  "required": true,
6528
+ "description": "The community's slug, as in the address of any of its pages.",
6179
6529
  "schema": {
6180
6530
  "type": "string"
6181
6531
  }
@@ -6184,6 +6534,7 @@
6184
6534
  "name": "occasion",
6185
6535
  "in": "path",
6186
6536
  "required": true,
6537
+ "description": "The occasion's id.",
6187
6538
  "schema": {
6188
6539
  "type": "string"
6189
6540
  }
@@ -6242,7 +6593,8 @@
6242
6593
  "boolean",
6243
6594
  "null"
6244
6595
  ]
6245
- }
6596
+ },
6597
+ "description": "Keyed by job category id."
6246
6598
  },
6247
6599
  "notes": {
6248
6600
  "type": [
@@ -6252,7 +6604,7 @@
6252
6604
  },
6253
6605
  "starts_at": {
6254
6606
  "type": "string",
6255
- "format": "date"
6607
+ "format": "date-time"
6256
6608
  },
6257
6609
  "venue_id": {
6258
6610
  "type": "string",
@@ -6273,6 +6625,7 @@
6273
6625
  "name": "community",
6274
6626
  "in": "path",
6275
6627
  "required": true,
6628
+ "description": "The community's slug, as in the address of any of its pages.",
6276
6629
  "schema": {
6277
6630
  "type": "string"
6278
6631
  }
@@ -6281,6 +6634,7 @@
6281
6634
  "name": "occasion",
6282
6635
  "in": "path",
6283
6636
  "required": true,
6637
+ "description": "The occasion's id.",
6284
6638
  "schema": {
6285
6639
  "type": "string"
6286
6640
  }
@@ -6289,6 +6643,7 @@
6289
6643
  "name": "service",
6290
6644
  "in": "path",
6291
6645
  "required": true,
6646
+ "description": "The service's id.",
6292
6647
  "schema": {
6293
6648
  "type": "string"
6294
6649
  }
@@ -6326,6 +6681,7 @@
6326
6681
  "name": "community",
6327
6682
  "in": "path",
6328
6683
  "required": true,
6684
+ "description": "The community's slug, as in the address of any of its pages.",
6329
6685
  "schema": {
6330
6686
  "type": "string"
6331
6687
  }
@@ -6334,6 +6690,7 @@
6334
6690
  "name": "occasion",
6335
6691
  "in": "path",
6336
6692
  "required": true,
6693
+ "description": "The occasion's id.",
6337
6694
  "schema": {
6338
6695
  "type": "string"
6339
6696
  }
@@ -6342,6 +6699,7 @@
6342
6699
  "name": "service",
6343
6700
  "in": "path",
6344
6701
  "required": true,
6702
+ "description": "The service's id.",
6345
6703
  "schema": {
6346
6704
  "type": "string"
6347
6705
  }
@@ -6375,7 +6733,7 @@
6375
6733
  "tags": [
6376
6734
  "occasions"
6377
6735
  ],
6378
- "summary": "Where `spread` names another service where somebody else does the job, the answer has to be given too; without it nothing is written.",
6736
+ "summary": "Books a member (membership_id and job_id), a guest (guest_name and job_id) or an ensemble (ensemble_id, no job), on the services `spread` names too. `slot_id` here is a place on the service (music[].id), not a slot name. Where `spread` names another service where somebody else does the job, the answer has to be given too; without it nothing is written.",
6379
6737
  "requestBody": {
6380
6738
  "required": true,
6381
6739
  "content": {
@@ -6441,9 +6799,11 @@
6441
6799
  ],
6442
6800
  "enum": [
6443
6801
  "replace",
6444
- "both"
6802
+ "both",
6803
+ null
6445
6804
  ]
6446
- }
6805
+ },
6806
+ "description": "Keyed by service id."
6447
6807
  }
6448
6808
  },
6449
6809
  "required": [
@@ -6459,6 +6819,7 @@
6459
6819
  "name": "community",
6460
6820
  "in": "path",
6461
6821
  "required": true,
6822
+ "description": "The community's slug, as in the address of any of its pages.",
6462
6823
  "schema": {
6463
6824
  "type": "string"
6464
6825
  }
@@ -6467,6 +6828,7 @@
6467
6828
  "name": "occasion",
6468
6829
  "in": "path",
6469
6830
  "required": true,
6831
+ "description": "The occasion's id.",
6470
6832
  "schema": {
6471
6833
  "type": "string"
6472
6834
  }
@@ -6475,6 +6837,7 @@
6475
6837
  "name": "service",
6476
6838
  "in": "path",
6477
6839
  "required": true,
6840
+ "description": "The service's id.",
6478
6841
  "schema": {
6479
6842
  "type": "string"
6480
6843
  }
@@ -6522,6 +6885,7 @@
6522
6885
  "type": "string",
6523
6886
  "format": "uuid"
6524
6887
  },
6888
+ "uniqueItems": true,
6525
6889
  "minItems": 1
6526
6890
  }
6527
6891
  },
@@ -6537,6 +6901,7 @@
6537
6901
  "name": "community",
6538
6902
  "in": "path",
6539
6903
  "required": true,
6904
+ "description": "The community's slug, as in the address of any of its pages.",
6540
6905
  "schema": {
6541
6906
  "type": "string"
6542
6907
  }
@@ -6545,6 +6910,7 @@
6545
6910
  "name": "occasion",
6546
6911
  "in": "path",
6547
6912
  "required": true,
6913
+ "description": "The occasion's id.",
6548
6914
  "schema": {
6549
6915
  "type": "string"
6550
6916
  }
@@ -6553,6 +6919,7 @@
6553
6919
  "name": "service",
6554
6920
  "in": "path",
6555
6921
  "required": true,
6922
+ "description": "The service's id.",
6556
6923
  "schema": {
6557
6924
  "type": "string"
6558
6925
  }
@@ -6592,6 +6959,7 @@
6592
6959
  "name": "community",
6593
6960
  "in": "path",
6594
6961
  "required": true,
6962
+ "description": "The community's slug, as in the address of any of its pages.",
6595
6963
  "schema": {
6596
6964
  "type": "string"
6597
6965
  }
@@ -6600,6 +6968,7 @@
6600
6968
  "name": "occasion",
6601
6969
  "in": "path",
6602
6970
  "required": true,
6971
+ "description": "The occasion's id.",
6603
6972
  "schema": {
6604
6973
  "type": "string"
6605
6974
  }
@@ -6608,6 +6977,7 @@
6608
6977
  "name": "service",
6609
6978
  "in": "path",
6610
6979
  "required": true,
6980
+ "description": "The service's id.",
6611
6981
  "schema": {
6612
6982
  "type": "string"
6613
6983
  }
@@ -6733,19 +7103,6 @@
6733
7103
  "null"
6734
7104
  ],
6735
7105
  "format": "uuid"
6736
- },
6737
- "spread": {
6738
- "type": "object",
6739
- "additionalProperties": {
6740
- "type": [
6741
- "string",
6742
- "null"
6743
- ],
6744
- "enum": [
6745
- "replace",
6746
- "both"
6747
- ]
6748
- }
6749
7106
  }
6750
7107
  },
6751
7108
  "required": [
@@ -6761,6 +7118,7 @@
6761
7118
  "name": "community",
6762
7119
  "in": "path",
6763
7120
  "required": true,
7121
+ "description": "The community's slug, as in the address of any of its pages.",
6764
7122
  "schema": {
6765
7123
  "type": "string"
6766
7124
  }
@@ -6769,6 +7127,7 @@
6769
7127
  "name": "occasion",
6770
7128
  "in": "path",
6771
7129
  "required": true,
7130
+ "description": "The occasion's id.",
6772
7131
  "schema": {
6773
7132
  "type": "string"
6774
7133
  }
@@ -6777,6 +7136,7 @@
6777
7136
  "name": "service",
6778
7137
  "in": "path",
6779
7138
  "required": true,
7139
+ "description": "The service's id.",
6780
7140
  "schema": {
6781
7141
  "type": "string"
6782
7142
  }
@@ -6785,6 +7145,7 @@
6785
7145
  "name": "assignment",
6786
7146
  "in": "path",
6787
7147
  "required": true,
7148
+ "description": "The assignment's id.",
6788
7149
  "schema": {
6789
7150
  "type": "string"
6790
7151
  }
@@ -6822,6 +7183,7 @@
6822
7183
  "name": "community",
6823
7184
  "in": "path",
6824
7185
  "required": true,
7186
+ "description": "The community's slug, as in the address of any of its pages.",
6825
7187
  "schema": {
6826
7188
  "type": "string"
6827
7189
  }
@@ -6830,6 +7192,7 @@
6830
7192
  "name": "occasion",
6831
7193
  "in": "path",
6832
7194
  "required": true,
7195
+ "description": "The occasion's id.",
6833
7196
  "schema": {
6834
7197
  "type": "string"
6835
7198
  }
@@ -6838,6 +7201,7 @@
6838
7201
  "name": "service",
6839
7202
  "in": "path",
6840
7203
  "required": true,
7204
+ "description": "The service's id.",
6841
7205
  "schema": {
6842
7206
  "type": "string"
6843
7207
  }
@@ -6846,6 +7210,7 @@
6846
7210
  "name": "assignment",
6847
7211
  "in": "path",
6848
7212
  "required": true,
7213
+ "description": "The assignment's id.",
6849
7214
  "schema": {
6850
7215
  "type": "string"
6851
7216
  }
@@ -6908,6 +7273,7 @@
6908
7273
  "name": "community",
6909
7274
  "in": "path",
6910
7275
  "required": true,
7276
+ "description": "The community's slug, as in the address of any of its pages.",
6911
7277
  "schema": {
6912
7278
  "type": "string"
6913
7279
  }
@@ -6916,6 +7282,7 @@
6916
7282
  "name": "occasion",
6917
7283
  "in": "path",
6918
7284
  "required": true,
7285
+ "description": "The occasion's id.",
6919
7286
  "schema": {
6920
7287
  "type": "string"
6921
7288
  }
@@ -6924,6 +7291,7 @@
6924
7291
  "name": "service",
6925
7292
  "in": "path",
6926
7293
  "required": true,
7294
+ "description": "The service's id.",
6927
7295
  "schema": {
6928
7296
  "type": "string"
6929
7297
  }
@@ -6957,7 +7325,7 @@
6957
7325
  "tags": [
6958
7326
  "occasions"
6959
7327
  ],
6960
- "summary": "Services Slots Store",
7328
+ "summary": "Adds a place for a slot name (`slot_id`, from slots), with its piece if one is sent and on the services `spread` names. The answer's `slot_id` is the new place's id, which the place's own calls take.",
6961
7329
  "requestBody": {
6962
7330
  "required": true,
6963
7331
  "content": {
@@ -7007,9 +7375,11 @@
7007
7375
  "enum": [
7008
7376
  "replace",
7009
7377
  "both",
7010
- "add"
7378
+ "add",
7379
+ null
7011
7380
  ]
7012
- }
7381
+ },
7382
+ "description": "Keyed by service id."
7013
7383
  },
7014
7384
  "work_id": {
7015
7385
  "type": [
@@ -7031,6 +7401,7 @@
7031
7401
  "name": "community",
7032
7402
  "in": "path",
7033
7403
  "required": true,
7404
+ "description": "The community's slug, as in the address of any of its pages.",
7034
7405
  "schema": {
7035
7406
  "type": "string"
7036
7407
  }
@@ -7039,6 +7410,7 @@
7039
7410
  "name": "occasion",
7040
7411
  "in": "path",
7041
7412
  "required": true,
7413
+ "description": "The occasion's id.",
7042
7414
  "schema": {
7043
7415
  "type": "string"
7044
7416
  }
@@ -7047,6 +7419,7 @@
7047
7419
  "name": "service",
7048
7420
  "in": "path",
7049
7421
  "required": true,
7422
+ "description": "The service's id.",
7050
7423
  "schema": {
7051
7424
  "type": "string"
7052
7425
  }
@@ -7094,6 +7467,7 @@
7094
7467
  "type": "string",
7095
7468
  "format": "uuid"
7096
7469
  },
7470
+ "uniqueItems": true,
7097
7471
  "minItems": 1
7098
7472
  }
7099
7473
  },
@@ -7109,6 +7483,7 @@
7109
7483
  "name": "community",
7110
7484
  "in": "path",
7111
7485
  "required": true,
7486
+ "description": "The community's slug, as in the address of any of its pages.",
7112
7487
  "schema": {
7113
7488
  "type": "string"
7114
7489
  }
@@ -7117,6 +7492,7 @@
7117
7492
  "name": "occasion",
7118
7493
  "in": "path",
7119
7494
  "required": true,
7495
+ "description": "The occasion's id.",
7120
7496
  "schema": {
7121
7497
  "type": "string"
7122
7498
  }
@@ -7125,6 +7501,7 @@
7125
7501
  "name": "service",
7126
7502
  "in": "path",
7127
7503
  "required": true,
7504
+ "description": "The service's id.",
7128
7505
  "schema": {
7129
7506
  "type": "string"
7130
7507
  }
@@ -7204,9 +7581,11 @@
7204
7581
  "enum": [
7205
7582
  "replace",
7206
7583
  "both",
7207
- "add"
7584
+ "add",
7585
+ null
7208
7586
  ]
7209
- }
7587
+ },
7588
+ "description": "Keyed by service id."
7210
7589
  },
7211
7590
  "work_id": {
7212
7591
  "type": [
@@ -7225,6 +7604,7 @@
7225
7604
  "name": "community",
7226
7605
  "in": "path",
7227
7606
  "required": true,
7607
+ "description": "The community's slug, as in the address of any of its pages.",
7228
7608
  "schema": {
7229
7609
  "type": "string"
7230
7610
  }
@@ -7233,6 +7613,7 @@
7233
7613
  "name": "occasion",
7234
7614
  "in": "path",
7235
7615
  "required": true,
7616
+ "description": "The occasion's id.",
7236
7617
  "schema": {
7237
7618
  "type": "string"
7238
7619
  }
@@ -7241,6 +7622,7 @@
7241
7622
  "name": "service",
7242
7623
  "in": "path",
7243
7624
  "required": true,
7625
+ "description": "The service's id.",
7244
7626
  "schema": {
7245
7627
  "type": "string"
7246
7628
  }
@@ -7249,6 +7631,7 @@
7249
7631
  "name": "slot",
7250
7632
  "in": "path",
7251
7633
  "required": true,
7634
+ "description": "The service slot's id.",
7252
7635
  "schema": {
7253
7636
  "type": "string"
7254
7637
  }
@@ -7286,6 +7669,7 @@
7286
7669
  "name": "community",
7287
7670
  "in": "path",
7288
7671
  "required": true,
7672
+ "description": "The community's slug, as in the address of any of its pages.",
7289
7673
  "schema": {
7290
7674
  "type": "string"
7291
7675
  }
@@ -7294,6 +7678,7 @@
7294
7678
  "name": "occasion",
7295
7679
  "in": "path",
7296
7680
  "required": true,
7681
+ "description": "The occasion's id.",
7297
7682
  "schema": {
7298
7683
  "type": "string"
7299
7684
  }
@@ -7302,6 +7687,7 @@
7302
7687
  "name": "service",
7303
7688
  "in": "path",
7304
7689
  "required": true,
7690
+ "description": "The service's id.",
7305
7691
  "schema": {
7306
7692
  "type": "string"
7307
7693
  }
@@ -7310,6 +7696,7 @@
7310
7696
  "name": "slot",
7311
7697
  "in": "path",
7312
7698
  "required": true,
7699
+ "description": "The service slot's id.",
7313
7700
  "schema": {
7314
7701
  "type": "string"
7315
7702
  }
@@ -7349,6 +7736,7 @@
7349
7736
  "name": "community",
7350
7737
  "in": "path",
7351
7738
  "required": true,
7739
+ "description": "The community's slug, as in the address of any of its pages.",
7352
7740
  "schema": {
7353
7741
  "type": "string"
7354
7742
  }
@@ -7357,6 +7745,7 @@
7357
7745
  "name": "occasion",
7358
7746
  "in": "path",
7359
7747
  "required": true,
7748
+ "description": "The occasion's id.",
7360
7749
  "schema": {
7361
7750
  "type": "string"
7362
7751
  }
@@ -7365,6 +7754,7 @@
7365
7754
  "name": "service",
7366
7755
  "in": "path",
7367
7756
  "required": true,
7757
+ "description": "The service's id.",
7368
7758
  "schema": {
7369
7759
  "type": "string"
7370
7760
  }
@@ -7373,6 +7763,7 @@
7373
7763
  "name": "slot",
7374
7764
  "in": "path",
7375
7765
  "required": true,
7766
+ "description": "The service slot's id.",
7376
7767
  "schema": {
7377
7768
  "type": "string"
7378
7769
  }
@@ -7424,6 +7815,7 @@
7424
7815
  "name": "community",
7425
7816
  "in": "path",
7426
7817
  "required": true,
7818
+ "description": "The community's slug, as in the address of any of its pages.",
7427
7819
  "schema": {
7428
7820
  "type": "string"
7429
7821
  }
@@ -7463,6 +7855,7 @@
7463
7855
  "name": "community",
7464
7856
  "in": "path",
7465
7857
  "required": true,
7858
+ "description": "The community's slug, as in the address of any of its pages.",
7466
7859
  "schema": {
7467
7860
  "type": "string"
7468
7861
  }
@@ -7527,6 +7920,7 @@
7527
7920
  "name": "community",
7528
7921
  "in": "path",
7529
7922
  "required": true,
7923
+ "description": "The community's slug, as in the address of any of its pages.",
7530
7924
  "schema": {
7531
7925
  "type": "string"
7532
7926
  }
@@ -7583,7 +7977,8 @@
7583
7977
  }
7584
7978
  },
7585
7979
  "required": [
7586
- "kind"
7980
+ "kind",
7981
+ "part_id"
7587
7982
  ]
7588
7983
  }
7589
7984
  }
@@ -7594,6 +7989,7 @@
7594
7989
  "name": "community",
7595
7990
  "in": "path",
7596
7991
  "required": true,
7992
+ "description": "The community's slug, as in the address of any of its pages.",
7597
7993
  "schema": {
7598
7994
  "type": "string"
7599
7995
  }
@@ -7641,6 +8037,7 @@
7641
8037
  "type": "string",
7642
8038
  "format": "uuid"
7643
8039
  },
8040
+ "uniqueItems": true,
7644
8041
  "minItems": 1
7645
8042
  }
7646
8043
  },
@@ -7656,6 +8053,7 @@
7656
8053
  "name": "community",
7657
8054
  "in": "path",
7658
8055
  "required": true,
8056
+ "description": "The community's slug, as in the address of any of its pages.",
7659
8057
  "schema": {
7660
8058
  "type": "string"
7661
8059
  }
@@ -7722,6 +8120,7 @@
7722
8120
  "name": "community",
7723
8121
  "in": "path",
7724
8122
  "required": true,
8123
+ "description": "The community's slug, as in the address of any of its pages.",
7725
8124
  "schema": {
7726
8125
  "type": "string"
7727
8126
  }
@@ -7730,6 +8129,7 @@
7730
8129
  "name": "part",
7731
8130
  "in": "path",
7732
8131
  "required": true,
8132
+ "description": "The part's id.",
7733
8133
  "schema": {
7734
8134
  "type": "string"
7735
8135
  }
@@ -7787,6 +8187,7 @@
7787
8187
  "name": "community",
7788
8188
  "in": "path",
7789
8189
  "required": true,
8190
+ "description": "The community's slug, as in the address of any of its pages.",
7790
8191
  "schema": {
7791
8192
  "type": "string"
7792
8193
  }
@@ -7795,6 +8196,7 @@
7795
8196
  "name": "part",
7796
8197
  "in": "path",
7797
8198
  "required": true,
8199
+ "description": "The part's id.",
7798
8200
  "schema": {
7799
8201
  "type": "string"
7800
8202
  }
@@ -7834,6 +8236,7 @@
7834
8236
  "name": "community",
7835
8237
  "in": "path",
7836
8238
  "required": true,
8239
+ "description": "The community's slug, as in the address of any of its pages.",
7837
8240
  "schema": {
7838
8241
  "type": "string"
7839
8242
  }
@@ -7865,7 +8268,7 @@
7865
8268
  "tags": [
7866
8269
  "people"
7867
8270
  ],
7868
- "summary": "A name and a role, and an address if there is one. Nothing is sent.",
8271
+ "summary": "A name and a role, and an address if there is one; nothing is sent to them. An owner key may grant owner; a director's may not.",
7869
8272
  "requestBody": {
7870
8273
  "required": true,
7871
8274
  "content": {
@@ -7887,6 +8290,7 @@
7887
8290
  },
7888
8291
  "role": {
7889
8292
  "enum": [
8293
+ "owner",
7890
8294
  "director",
7891
8295
  "editor",
7892
8296
  "musician",
@@ -7914,6 +8318,7 @@
7914
8318
  "name": "community",
7915
8319
  "in": "path",
7916
8320
  "required": true,
8321
+ "description": "The community's slug, as in the address of any of its pages.",
7917
8322
  "schema": {
7918
8323
  "type": "string"
7919
8324
  }
@@ -7953,6 +8358,7 @@
7953
8358
  "name": "community",
7954
8359
  "in": "path",
7955
8360
  "required": true,
8361
+ "description": "The community's slug, as in the address of any of its pages.",
7956
8362
  "schema": {
7957
8363
  "type": "string"
7958
8364
  }
@@ -7961,6 +8367,7 @@
7961
8367
  "name": "membership",
7962
8368
  "in": "path",
7963
8369
  "required": true,
8370
+ "description": "The membership's id.",
7964
8371
  "schema": {
7965
8372
  "type": "string"
7966
8373
  }
@@ -7992,7 +8399,7 @@
7992
8399
  "tags": [
7993
8400
  "people"
7994
8401
  ],
7995
- "summary": "Role, display name, phone and notes, sent whole as the screen sends them.",
8402
+ "summary": "`role` is always sent; display_name, phone, notes and job_ids change only when sent, and job_ids replaces the list. An owner key may grant owner.",
7996
8403
  "requestBody": {
7997
8404
  "required": true,
7998
8405
  "content": {
@@ -8012,7 +8419,8 @@
8012
8419
  "items": {
8013
8420
  "type": "string",
8014
8421
  "format": "uuid"
8015
- }
8422
+ },
8423
+ "uniqueItems": true
8016
8424
  },
8017
8425
  "notes": {
8018
8426
  "type": [
@@ -8030,7 +8438,11 @@
8030
8438
  },
8031
8439
  "role": {
8032
8440
  "enum": [
8033
- ""
8441
+ "owner",
8442
+ "director",
8443
+ "editor",
8444
+ "musician",
8445
+ "viewer"
8034
8446
  ]
8035
8447
  }
8036
8448
  },
@@ -8046,6 +8458,7 @@
8046
8458
  "name": "community",
8047
8459
  "in": "path",
8048
8460
  "required": true,
8461
+ "description": "The community's slug, as in the address of any of its pages.",
8049
8462
  "schema": {
8050
8463
  "type": "string"
8051
8464
  }
@@ -8054,6 +8467,7 @@
8054
8467
  "name": "membership",
8055
8468
  "in": "path",
8056
8469
  "required": true,
8470
+ "description": "The membership's id.",
8057
8471
  "schema": {
8058
8472
  "type": "string"
8059
8473
  }
@@ -8085,12 +8499,13 @@
8085
8499
  "tags": [
8086
8500
  "people"
8087
8501
  ],
8088
- "summary": "People End",
8502
+ "summary": "Ends their membership rather than deleting it; `people.restore` brings it back. Ending your own is refused.",
8089
8503
  "parameters": [
8090
8504
  {
8091
8505
  "name": "community",
8092
8506
  "in": "path",
8093
8507
  "required": true,
8508
+ "description": "The community's slug, as in the address of any of its pages.",
8094
8509
  "schema": {
8095
8510
  "type": "string"
8096
8511
  }
@@ -8099,6 +8514,7 @@
8099
8514
  "name": "membership",
8100
8515
  "in": "path",
8101
8516
  "required": true,
8517
+ "description": "The membership's id.",
8102
8518
  "schema": {
8103
8519
  "type": "string"
8104
8520
  }
@@ -8134,7 +8550,7 @@
8134
8550
  ],
8135
8551
  "summary": "Null takes the address away. Refused once the person has signed in.",
8136
8552
  "requestBody": {
8137
- "required": false,
8553
+ "required": true,
8138
8554
  "content": {
8139
8555
  "application/json": {
8140
8556
  "schema": {
@@ -8148,7 +8564,10 @@
8148
8564
  "format": "email",
8149
8565
  "maxLength": 255
8150
8566
  }
8151
- }
8567
+ },
8568
+ "required": [
8569
+ "email"
8570
+ ]
8152
8571
  }
8153
8572
  }
8154
8573
  }
@@ -8158,6 +8577,7 @@
8158
8577
  "name": "community",
8159
8578
  "in": "path",
8160
8579
  "required": true,
8580
+ "description": "The community's slug, as in the address of any of its pages.",
8161
8581
  "schema": {
8162
8582
  "type": "string"
8163
8583
  }
@@ -8166,6 +8586,7 @@
8166
8586
  "name": "membership",
8167
8587
  "in": "path",
8168
8588
  "required": true,
8589
+ "description": "The membership's id.",
8169
8590
  "schema": {
8170
8591
  "type": "string"
8171
8592
  }
@@ -8205,6 +8626,7 @@
8205
8626
  "name": "community",
8206
8627
  "in": "path",
8207
8628
  "required": true,
8629
+ "description": "The community's slug, as in the address of any of its pages.",
8208
8630
  "schema": {
8209
8631
  "type": "string"
8210
8632
  }
@@ -8213,6 +8635,7 @@
8213
8635
  "name": "membership",
8214
8636
  "in": "path",
8215
8637
  "required": true,
8638
+ "description": "The membership's id.",
8216
8639
  "schema": {
8217
8640
  "type": "string"
8218
8641
  }
@@ -8252,6 +8675,7 @@
8252
8675
  "name": "community",
8253
8676
  "in": "path",
8254
8677
  "required": true,
8678
+ "description": "The community's slug, as in the address of any of its pages.",
8255
8679
  "schema": {
8256
8680
  "type": "string"
8257
8681
  }
@@ -8260,6 +8684,7 @@
8260
8684
  "name": "membership",
8261
8685
  "in": "path",
8262
8686
  "required": true,
8687
+ "description": "The membership's id.",
8263
8688
  "schema": {
8264
8689
  "type": "string"
8265
8690
  }
@@ -8299,6 +8724,7 @@
8299
8724
  "name": "community",
8300
8725
  "in": "path",
8301
8726
  "required": true,
8727
+ "description": "The community's slug, as in the address of any of its pages.",
8302
8728
  "schema": {
8303
8729
  "type": "string"
8304
8730
  }
@@ -8307,6 +8733,7 @@
8307
8733
  "name": "membership",
8308
8734
  "in": "path",
8309
8735
  "required": true,
8736
+ "description": "The membership's id.",
8310
8737
  "schema": {
8311
8738
  "type": "string"
8312
8739
  }
@@ -8340,9 +8767,9 @@
8340
8767
  "tags": [
8341
8768
  "people"
8342
8769
  ],
8343
- "summary": "Whose address signs them in too; null for nobody's.",
8770
+ "summary": "Whose address signs them in too: the membership id, from the people list, of someone active with an address. Null for nobody's.",
8344
8771
  "requestBody": {
8345
- "required": false,
8772
+ "required": true,
8346
8773
  "content": {
8347
8774
  "application/json": {
8348
8775
  "schema": {
@@ -8355,7 +8782,10 @@
8355
8782
  ],
8356
8783
  "format": "uuid"
8357
8784
  }
8358
- }
8785
+ },
8786
+ "required": [
8787
+ "signs_in_through"
8788
+ ]
8359
8789
  }
8360
8790
  }
8361
8791
  }
@@ -8365,6 +8795,7 @@
8365
8795
  "name": "community",
8366
8796
  "in": "path",
8367
8797
  "required": true,
8798
+ "description": "The community's slug, as in the address of any of its pages.",
8368
8799
  "schema": {
8369
8800
  "type": "string"
8370
8801
  }
@@ -8373,6 +8804,7 @@
8373
8804
  "name": "membership",
8374
8805
  "in": "path",
8375
8806
  "required": true,
8807
+ "description": "The membership's id.",
8376
8808
  "schema": {
8377
8809
  "type": "string"
8378
8810
  }
@@ -8412,6 +8844,7 @@
8412
8844
  "name": "community",
8413
8845
  "in": "path",
8414
8846
  "required": true,
8847
+ "description": "The community's slug, as in the address of any of its pages.",
8415
8848
  "schema": {
8416
8849
  "type": "string"
8417
8850
  }
@@ -8445,12 +8878,13 @@
8445
8878
  "tags": [
8446
8879
  "set-aside"
8447
8880
  ],
8448
- "summary": "Set Aside Music Destroy",
8881
+ "summary": "Takes the pair off the set-aside list so it can be suggested again; the id is the dismissal's, from set-aside.",
8449
8882
  "parameters": [
8450
8883
  {
8451
8884
  "name": "community",
8452
8885
  "in": "path",
8453
8886
  "required": true,
8887
+ "description": "The community's slug, as in the address of any of its pages.",
8454
8888
  "schema": {
8455
8889
  "type": "string"
8456
8890
  }
@@ -8459,14 +8893,15 @@
8459
8893
  "name": "dismissal",
8460
8894
  "in": "path",
8461
8895
  "required": true,
8896
+ "description": "The piece work dismissal's id.",
8462
8897
  "schema": {
8463
8898
  "type": "string"
8464
8899
  }
8465
8900
  }
8466
8901
  ],
8467
8902
  "responses": {
8468
- "200": {
8469
- "description": "What was read or written, as JSON."
8903
+ "204": {
8904
+ "description": "Done; nothing comes back."
8470
8905
  },
8471
8906
  "401": {
8472
8907
  "$ref": "#/components/responses/Unknown"
@@ -8492,12 +8927,13 @@
8492
8927
  "tags": [
8493
8928
  "set-aside"
8494
8929
  ],
8495
- "summary": "Set Aside People Destroy",
8930
+ "summary": "Takes the pair off the set-aside list so it can be suggested again; the id is the dismissal's, from set-aside.",
8496
8931
  "parameters": [
8497
8932
  {
8498
8933
  "name": "community",
8499
8934
  "in": "path",
8500
8935
  "required": true,
8936
+ "description": "The community's slug, as in the address of any of its pages.",
8501
8937
  "schema": {
8502
8938
  "type": "string"
8503
8939
  }
@@ -8506,14 +8942,15 @@
8506
8942
  "name": "dismissal",
8507
8943
  "in": "path",
8508
8944
  "required": true,
8945
+ "description": "The contributor dismissal's id.",
8509
8946
  "schema": {
8510
8947
  "type": "string"
8511
8948
  }
8512
8949
  }
8513
8950
  ],
8514
8951
  "responses": {
8515
- "200": {
8516
- "description": "What was read or written, as JSON."
8952
+ "204": {
8953
+ "description": "Done; nothing comes back."
8517
8954
  },
8518
8955
  "401": {
8519
8956
  "$ref": "#/components/responses/Unknown"
@@ -8539,12 +8976,13 @@
8539
8976
  "tags": [
8540
8977
  "set-aside"
8541
8978
  ],
8542
- "summary": "Set Aside Tunes Destroy",
8979
+ "summary": "Takes the tune off the set-aside list so it can be suggested again; the id is the dismissal's, from set-aside.",
8543
8980
  "parameters": [
8544
8981
  {
8545
8982
  "name": "community",
8546
8983
  "in": "path",
8547
8984
  "required": true,
8985
+ "description": "The community's slug, as in the address of any of its pages.",
8548
8986
  "schema": {
8549
8987
  "type": "string"
8550
8988
  }
@@ -8553,14 +8991,15 @@
8553
8991
  "name": "dismissal",
8554
8992
  "in": "path",
8555
8993
  "required": true,
8994
+ "description": "The tune dismissal's id.",
8556
8995
  "schema": {
8557
8996
  "type": "string"
8558
8997
  }
8559
8998
  }
8560
8999
  ],
8561
9000
  "responses": {
8562
- "200": {
8563
- "description": "What was read or written, as JSON."
9001
+ "204": {
9002
+ "description": "Done; nothing comes back."
8564
9003
  },
8565
9004
  "401": {
8566
9005
  "$ref": "#/components/responses/Unknown"
@@ -8592,6 +9031,7 @@
8592
9031
  "name": "community",
8593
9032
  "in": "path",
8594
9033
  "required": true,
9034
+ "description": "The community's slug, as in the address of any of its pages.",
8595
9035
  "schema": {
8596
9036
  "type": "string"
8597
9037
  }
@@ -8639,7 +9079,9 @@
8639
9079
  "type": [
8640
9080
  "integer",
8641
9081
  "null"
8642
- ]
9082
+ ],
9083
+ "maximum": 104,
9084
+ "minimum": 0
8643
9085
  },
8644
9086
  "warn_on_repeat": {
8645
9087
  "type": "boolean"
@@ -8657,6 +9099,7 @@
8657
9099
  "name": "community",
8658
9100
  "in": "path",
8659
9101
  "required": true,
9102
+ "description": "The community's slug, as in the address of any of its pages.",
8660
9103
  "schema": {
8661
9104
  "type": "string"
8662
9105
  }
@@ -8706,7 +9149,9 @@
8706
9149
  "type": [
8707
9150
  "integer",
8708
9151
  "null"
8709
- ]
9152
+ ],
9153
+ "maximum": 104,
9154
+ "minimum": 0
8710
9155
  },
8711
9156
  "warn_on_repeat": {
8712
9157
  "type": "boolean"
@@ -8724,6 +9169,7 @@
8724
9169
  "name": "community",
8725
9170
  "in": "path",
8726
9171
  "required": true,
9172
+ "description": "The community's slug, as in the address of any of its pages.",
8727
9173
  "schema": {
8728
9174
  "type": "string"
8729
9175
  }
@@ -8732,6 +9178,7 @@
8732
9178
  "name": "slot",
8733
9179
  "in": "path",
8734
9180
  "required": true,
9181
+ "description": "The slot's id.",
8735
9182
  "schema": {
8736
9183
  "type": "string"
8737
9184
  }
@@ -8769,6 +9216,7 @@
8769
9216
  "name": "community",
8770
9217
  "in": "path",
8771
9218
  "required": true,
9219
+ "description": "The community's slug, as in the address of any of its pages.",
8772
9220
  "schema": {
8773
9221
  "type": "string"
8774
9222
  }
@@ -8777,6 +9225,7 @@
8777
9225
  "name": "slot",
8778
9226
  "in": "path",
8779
9227
  "required": true,
9228
+ "description": "The slot's id.",
8780
9229
  "schema": {
8781
9230
  "type": "string"
8782
9231
  }
@@ -8816,6 +9265,7 @@
8816
9265
  "name": "community",
8817
9266
  "in": "path",
8818
9267
  "required": true,
9268
+ "description": "The community's slug, as in the address of any of its pages.",
8819
9269
  "schema": {
8820
9270
  "type": "string"
8821
9271
  }
@@ -8824,6 +9274,7 @@
8824
9274
  "name": "slot",
8825
9275
  "in": "path",
8826
9276
  "required": true,
9277
+ "description": "The slot's id.",
8827
9278
  "schema": {
8828
9279
  "type": "string"
8829
9280
  }
@@ -8882,6 +9333,7 @@
8882
9333
  "name": "community",
8883
9334
  "in": "path",
8884
9335
  "required": true,
9336
+ "description": "The community's slug, as in the address of any of its pages.",
8885
9337
  "schema": {
8886
9338
  "type": "string"
8887
9339
  }
@@ -8890,6 +9342,7 @@
8890
9342
  "name": "slot",
8891
9343
  "in": "path",
8892
9344
  "required": true,
9345
+ "description": "The slot's id.",
8893
9346
  "schema": {
8894
9347
  "type": "string"
8895
9348
  }
@@ -8929,6 +9382,7 @@
8929
9382
  "name": "community",
8930
9383
  "in": "path",
8931
9384
  "required": true,
9385
+ "description": "The community's slug, as in the address of any of its pages.",
8932
9386
  "schema": {
8933
9387
  "type": "string"
8934
9388
  }
@@ -8937,6 +9391,7 @@
8937
9391
  "name": "slot",
8938
9392
  "in": "path",
8939
9393
  "required": true,
9394
+ "description": "The slot's id.",
8940
9395
  "schema": {
8941
9396
  "type": "string"
8942
9397
  }
@@ -8976,6 +9431,7 @@
8976
9431
  "name": "community",
8977
9432
  "in": "path",
8978
9433
  "required": true,
9434
+ "description": "The community's slug, as in the address of any of its pages.",
8979
9435
  "schema": {
8980
9436
  "type": "string"
8981
9437
  }
@@ -9032,6 +9488,7 @@
9032
9488
  "name": "community",
9033
9489
  "in": "path",
9034
9490
  "required": true,
9491
+ "description": "The community's slug, as in the address of any of its pages.",
9035
9492
  "schema": {
9036
9493
  "type": "string"
9037
9494
  }
@@ -9071,6 +9528,7 @@
9071
9528
  "name": "community",
9072
9529
  "in": "path",
9073
9530
  "required": true,
9531
+ "description": "The community's slug, as in the address of any of its pages.",
9074
9532
  "schema": {
9075
9533
  "type": "string"
9076
9534
  }
@@ -9136,6 +9594,7 @@
9136
9594
  "name": "community",
9137
9595
  "in": "path",
9138
9596
  "required": true,
9597
+ "description": "The community's slug, as in the address of any of its pages.",
9139
9598
  "schema": {
9140
9599
  "type": "string"
9141
9600
  }
@@ -9203,6 +9662,7 @@
9203
9662
  "name": "community",
9204
9663
  "in": "path",
9205
9664
  "required": true,
9665
+ "description": "The community's slug, as in the address of any of its pages.",
9206
9666
  "schema": {
9207
9667
  "type": "string"
9208
9668
  }
@@ -9211,6 +9671,7 @@
9211
9671
  "name": "group",
9212
9672
  "in": "path",
9213
9673
  "required": true,
9674
+ "description": "The template group's id.",
9214
9675
  "schema": {
9215
9676
  "type": "string"
9216
9677
  }
@@ -9248,6 +9709,7 @@
9248
9709
  "name": "community",
9249
9710
  "in": "path",
9250
9711
  "required": true,
9712
+ "description": "The community's slug, as in the address of any of its pages.",
9251
9713
  "schema": {
9252
9714
  "type": "string"
9253
9715
  }
@@ -9256,6 +9718,7 @@
9256
9718
  "name": "group",
9257
9719
  "in": "path",
9258
9720
  "required": true,
9721
+ "description": "The template group's id.",
9259
9722
  "schema": {
9260
9723
  "type": "string"
9261
9724
  }
@@ -9295,6 +9758,7 @@
9295
9758
  "name": "community",
9296
9759
  "in": "path",
9297
9760
  "required": true,
9761
+ "description": "The community's slug, as in the address of any of its pages.",
9298
9762
  "schema": {
9299
9763
  "type": "string"
9300
9764
  }
@@ -9303,6 +9767,7 @@
9303
9767
  "name": "group",
9304
9768
  "in": "path",
9305
9769
  "required": true,
9770
+ "description": "The template group's id.",
9306
9771
  "schema": {
9307
9772
  "type": "string"
9308
9773
  }
@@ -9311,6 +9776,7 @@
9311
9776
  "name": "template",
9312
9777
  "in": "path",
9313
9778
  "required": true,
9779
+ "description": "The template's id.",
9314
9780
  "schema": {
9315
9781
  "type": "string"
9316
9782
  }
@@ -9348,6 +9814,7 @@
9348
9814
  "name": "community",
9349
9815
  "in": "path",
9350
9816
  "required": true,
9817
+ "description": "The community's slug, as in the address of any of its pages.",
9351
9818
  "schema": {
9352
9819
  "type": "string"
9353
9820
  }
@@ -9356,6 +9823,7 @@
9356
9823
  "name": "group",
9357
9824
  "in": "path",
9358
9825
  "required": true,
9826
+ "description": "The template group's id.",
9359
9827
  "schema": {
9360
9828
  "type": "string"
9361
9829
  }
@@ -9364,6 +9832,7 @@
9364
9832
  "name": "template",
9365
9833
  "in": "path",
9366
9834
  "required": true,
9835
+ "description": "The template's id.",
9367
9836
  "schema": {
9368
9837
  "type": "string"
9369
9838
  }
@@ -9403,6 +9872,7 @@
9403
9872
  "name": "community",
9404
9873
  "in": "path",
9405
9874
  "required": true,
9875
+ "description": "The community's slug, as in the address of any of its pages.",
9406
9876
  "schema": {
9407
9877
  "type": "string"
9408
9878
  }
@@ -9411,6 +9881,7 @@
9411
9881
  "name": "template",
9412
9882
  "in": "path",
9413
9883
  "required": true,
9884
+ "description": "The template's id.",
9414
9885
  "schema": {
9415
9886
  "type": "string"
9416
9887
  }
@@ -9444,7 +9915,7 @@
9444
9915
  ],
9445
9916
  "summary": "Name, description, active and hidden; only the fields sent are written.",
9446
9917
  "requestBody": {
9447
- "required": true,
9918
+ "required": false,
9448
9919
  "content": {
9449
9920
  "application/json": {
9450
9921
  "schema": {
@@ -9466,10 +9937,7 @@
9466
9937
  "type": "string",
9467
9938
  "maxLength": 255
9468
9939
  }
9469
- },
9470
- "required": [
9471
- "name"
9472
- ]
9940
+ }
9473
9941
  }
9474
9942
  }
9475
9943
  }
@@ -9479,6 +9947,7 @@
9479
9947
  "name": "community",
9480
9948
  "in": "path",
9481
9949
  "required": true,
9950
+ "description": "The community's slug, as in the address of any of its pages.",
9482
9951
  "schema": {
9483
9952
  "type": "string"
9484
9953
  }
@@ -9487,6 +9956,7 @@
9487
9956
  "name": "template",
9488
9957
  "in": "path",
9489
9958
  "required": true,
9959
+ "description": "The template's id.",
9490
9960
  "schema": {
9491
9961
  "type": "string"
9492
9962
  }
@@ -9524,6 +9994,7 @@
9524
9994
  "name": "community",
9525
9995
  "in": "path",
9526
9996
  "required": true,
9997
+ "description": "The community's slug, as in the address of any of its pages.",
9527
9998
  "schema": {
9528
9999
  "type": "string"
9529
10000
  }
@@ -9532,14 +10003,15 @@
9532
10003
  "name": "template",
9533
10004
  "in": "path",
9534
10005
  "required": true,
10006
+ "description": "The template's id.",
9535
10007
  "schema": {
9536
10008
  "type": "string"
9537
10009
  }
9538
10010
  }
9539
10011
  ],
9540
10012
  "responses": {
9541
- "200": {
9542
- "description": "What was read or written, as JSON."
10013
+ "204": {
10014
+ "description": "Done; nothing comes back."
9543
10015
  },
9544
10016
  "401": {
9545
10017
  "$ref": "#/components/responses/Unknown"
@@ -9565,7 +10037,7 @@
9565
10037
  "tags": [
9566
10038
  "templates"
9567
10039
  ],
9568
- "summary": "No `template_service_id` means every service this template brings, ones added later included.",
10040
+ "summary": "Expects a member (membership_id and job_id) or an ensemble (ensemble_id, no job) at one service, or, with no template_service_id, at every service it brings, ones added later included.",
9569
10041
  "requestBody": {
9570
10042
  "required": true,
9571
10043
  "content": {
@@ -9621,6 +10093,7 @@
9621
10093
  "name": "community",
9622
10094
  "in": "path",
9623
10095
  "required": true,
10096
+ "description": "The community's slug, as in the address of any of its pages.",
9624
10097
  "schema": {
9625
10098
  "type": "string"
9626
10099
  }
@@ -9629,6 +10102,7 @@
9629
10102
  "name": "template",
9630
10103
  "in": "path",
9631
10104
  "required": true,
10105
+ "description": "The template's id.",
9632
10106
  "schema": {
9633
10107
  "type": "string"
9634
10108
  }
@@ -9668,6 +10142,7 @@
9668
10142
  "name": "community",
9669
10143
  "in": "path",
9670
10144
  "required": true,
10145
+ "description": "The community's slug, as in the address of any of its pages.",
9671
10146
  "schema": {
9672
10147
  "type": "string"
9673
10148
  }
@@ -9676,6 +10151,7 @@
9676
10151
  "name": "template",
9677
10152
  "in": "path",
9678
10153
  "required": true,
10154
+ "description": "The template's id.",
9679
10155
  "schema": {
9680
10156
  "type": "string"
9681
10157
  }
@@ -9684,6 +10160,7 @@
9684
10160
  "name": "party",
9685
10161
  "in": "path",
9686
10162
  "required": true,
10163
+ "description": "The template party's id.",
9687
10164
  "schema": {
9688
10165
  "type": "string"
9689
10166
  }
@@ -9717,7 +10194,7 @@
9717
10194
  "tags": [
9718
10195
  "templates"
9719
10196
  ],
9720
- "summary": "Templates Pull In",
10197
+ "summary": "Brings other templates into this one, their rules too, so this template applies wherever they did; an open question refuses the whole pull.",
9721
10198
  "requestBody": {
9722
10199
  "required": false,
9723
10200
  "content": {
@@ -9730,7 +10207,8 @@
9730
10207
  "additionalProperties": {
9731
10208
  "type": "string",
9732
10209
  "maxLength": 1000
9733
- }
10210
+ },
10211
+ "description": "Keyed by each question's `key`, from the preview."
9734
10212
  },
9735
10213
  "scoped": {
9736
10214
  "type": [
@@ -9781,6 +10259,7 @@
9781
10259
  "name": "community",
9782
10260
  "in": "path",
9783
10261
  "required": true,
10262
+ "description": "The community's slug, as in the address of any of its pages.",
9784
10263
  "schema": {
9785
10264
  "type": "string"
9786
10265
  }
@@ -9789,6 +10268,7 @@
9789
10268
  "name": "template",
9790
10269
  "in": "path",
9791
10270
  "required": true,
10271
+ "description": "The template's id.",
9792
10272
  "schema": {
9793
10273
  "type": "string"
9794
10274
  }
@@ -9798,6 +10278,9 @@
9798
10278
  "200": {
9799
10279
  "description": "What was read or written, as JSON."
9800
10280
  },
10281
+ "409": {
10282
+ "description": "Templates disagree about the day: `questions` lists each, to answer and send again."
10283
+ },
9801
10284
  "401": {
9802
10285
  "$ref": "#/components/responses/Unknown"
9803
10286
  },
@@ -9828,6 +10311,7 @@
9828
10311
  "name": "community",
9829
10312
  "in": "path",
9830
10313
  "required": true,
10314
+ "description": "The community's slug, as in the address of any of its pages.",
9831
10315
  "schema": {
9832
10316
  "type": "string"
9833
10317
  }
@@ -9836,6 +10320,7 @@
9836
10320
  "name": "template",
9837
10321
  "in": "path",
9838
10322
  "required": true,
10323
+ "description": "The template's id.",
9839
10324
  "schema": {
9840
10325
  "type": "string"
9841
10326
  }
@@ -9844,12 +10329,15 @@
9844
10329
  "name": "answers",
9845
10330
  "in": "query",
9846
10331
  "required": false,
10332
+ "style": "deepObject",
10333
+ "explode": true,
9847
10334
  "schema": {
9848
10335
  "type": "object",
9849
10336
  "additionalProperties": {
9850
10337
  "type": "string",
9851
10338
  "maxLength": 1000
9852
- }
10339
+ },
10340
+ "description": "Keyed by each question's `key`, from the preview."
9853
10341
  }
9854
10342
  },
9855
10343
  {
@@ -9857,14 +10345,16 @@
9857
10345
  "in": "query",
9858
10346
  "required": false,
9859
10347
  "schema": {
9860
- "type": [
9861
- "boolean",
9862
- "null"
9863
- ]
10348
+ "type": "integer",
10349
+ "enum": [
10350
+ 1,
10351
+ 0
10352
+ ],
10353
+ "description": "1 for yes, 0 for no."
9864
10354
  }
9865
10355
  },
9866
10356
  {
9867
- "name": "services",
10357
+ "name": "services[]",
9868
10358
  "in": "query",
9869
10359
  "required": false,
9870
10360
  "schema": {
@@ -9880,7 +10370,7 @@
9880
10370
  }
9881
10371
  },
9882
10372
  {
9883
- "name": "skip",
10373
+ "name": "skip[]",
9884
10374
  "in": "query",
9885
10375
  "required": false,
9886
10376
  "schema": {
@@ -9896,7 +10386,7 @@
9896
10386
  }
9897
10387
  },
9898
10388
  {
9899
- "name": "templates",
10389
+ "name": "templates[]",
9900
10390
  "in": "query",
9901
10391
  "required": false,
9902
10392
  "schema": {
@@ -9952,13 +10442,19 @@
9952
10442
  "type": [
9953
10443
  "integer",
9954
10444
  "null"
9955
- ]
10445
+ ],
10446
+ "maximum": 31,
10447
+ "minimum": 1,
10448
+ "description": "Required with annual_month."
9956
10449
  },
9957
10450
  "annual_month": {
9958
10451
  "type": [
9959
10452
  "integer",
9960
10453
  "null"
9961
- ]
10454
+ ],
10455
+ "maximum": 12,
10456
+ "minimum": 1,
10457
+ "description": "Required with annual_day."
9962
10458
  },
9963
10459
  "day_key": {
9964
10460
  "type": [
@@ -9971,20 +10467,25 @@
9971
10467
  "type": [
9972
10468
  "integer",
9973
10469
  "null"
9974
- ]
10470
+ ],
10471
+ "maximum": 6,
10472
+ "minimum": 0
9975
10473
  },
9976
10474
  "lectionary_year": {
9977
10475
  "enum": [
9978
10476
  "A",
9979
10477
  "B",
9980
- "C"
10478
+ "C",
10479
+ null
9981
10480
  ]
9982
10481
  },
9983
10482
  "nth_of_month": {
9984
10483
  "type": [
9985
10484
  "integer",
9986
10485
  "null"
9987
- ]
10486
+ ],
10487
+ "maximum": 5,
10488
+ "minimum": 1
9988
10489
  },
9989
10490
  "occasion_kind": {
9990
10491
  "enum": [
@@ -9995,7 +10496,8 @@
9995
10496
  "wedding",
9996
10497
  "funeral",
9997
10498
  "concert",
9998
- "other"
10499
+ "other",
10500
+ null
9999
10501
  ]
10000
10502
  },
10001
10503
  "season": {
@@ -10005,7 +10507,8 @@
10005
10507
  "ordinary",
10006
10508
  "lent",
10007
10509
  "triduum",
10008
- "easter"
10510
+ "easter",
10511
+ null
10009
10512
  ]
10010
10513
  },
10011
10514
  "week_of_season": {
@@ -10046,6 +10549,7 @@
10046
10549
  "name": "community",
10047
10550
  "in": "path",
10048
10551
  "required": true,
10552
+ "description": "The community's slug, as in the address of any of its pages.",
10049
10553
  "schema": {
10050
10554
  "type": "string"
10051
10555
  }
@@ -10054,6 +10558,7 @@
10054
10558
  "name": "template",
10055
10559
  "in": "path",
10056
10560
  "required": true,
10561
+ "description": "The template's id.",
10057
10562
  "schema": {
10058
10563
  "type": "string"
10059
10564
  }
@@ -10099,13 +10604,19 @@
10099
10604
  "type": [
10100
10605
  "integer",
10101
10606
  "null"
10102
- ]
10607
+ ],
10608
+ "maximum": 31,
10609
+ "minimum": 1,
10610
+ "description": "Required with annual_month."
10103
10611
  },
10104
10612
  "annual_month": {
10105
10613
  "type": [
10106
10614
  "integer",
10107
10615
  "null"
10108
- ]
10616
+ ],
10617
+ "maximum": 12,
10618
+ "minimum": 1,
10619
+ "description": "Required with annual_day."
10109
10620
  },
10110
10621
  "day_key": {
10111
10622
  "type": [
@@ -10118,20 +10629,25 @@
10118
10629
  "type": [
10119
10630
  "integer",
10120
10631
  "null"
10121
- ]
10632
+ ],
10633
+ "maximum": 6,
10634
+ "minimum": 0
10122
10635
  },
10123
10636
  "lectionary_year": {
10124
10637
  "enum": [
10125
10638
  "A",
10126
10639
  "B",
10127
- "C"
10640
+ "C",
10641
+ null
10128
10642
  ]
10129
10643
  },
10130
10644
  "nth_of_month": {
10131
10645
  "type": [
10132
10646
  "integer",
10133
10647
  "null"
10134
- ]
10648
+ ],
10649
+ "maximum": 5,
10650
+ "minimum": 1
10135
10651
  },
10136
10652
  "occasion_kind": {
10137
10653
  "enum": [
@@ -10142,7 +10658,8 @@
10142
10658
  "wedding",
10143
10659
  "funeral",
10144
10660
  "concert",
10145
- "other"
10661
+ "other",
10662
+ null
10146
10663
  ]
10147
10664
  },
10148
10665
  "season": {
@@ -10152,7 +10669,8 @@
10152
10669
  "ordinary",
10153
10670
  "lent",
10154
10671
  "triduum",
10155
- "easter"
10672
+ "easter",
10673
+ null
10156
10674
  ]
10157
10675
  },
10158
10676
  "week_of_season": {
@@ -10193,6 +10711,7 @@
10193
10711
  "name": "community",
10194
10712
  "in": "path",
10195
10713
  "required": true,
10714
+ "description": "The community's slug, as in the address of any of its pages.",
10196
10715
  "schema": {
10197
10716
  "type": "string"
10198
10717
  }
@@ -10201,6 +10720,7 @@
10201
10720
  "name": "template",
10202
10721
  "in": "path",
10203
10722
  "required": true,
10723
+ "description": "The template's id.",
10204
10724
  "schema": {
10205
10725
  "type": "string"
10206
10726
  }
@@ -10209,6 +10729,7 @@
10209
10729
  "name": "rule",
10210
10730
  "in": "path",
10211
10731
  "required": true,
10732
+ "description": "The template rule's id.",
10212
10733
  "schema": {
10213
10734
  "type": "string"
10214
10735
  }
@@ -10246,6 +10767,7 @@
10246
10767
  "name": "community",
10247
10768
  "in": "path",
10248
10769
  "required": true,
10770
+ "description": "The community's slug, as in the address of any of its pages.",
10249
10771
  "schema": {
10250
10772
  "type": "string"
10251
10773
  }
@@ -10254,6 +10776,7 @@
10254
10776
  "name": "template",
10255
10777
  "in": "path",
10256
10778
  "required": true,
10779
+ "description": "The template's id.",
10257
10780
  "schema": {
10258
10781
  "type": "string"
10259
10782
  }
@@ -10262,6 +10785,7 @@
10262
10785
  "name": "rule",
10263
10786
  "in": "path",
10264
10787
  "required": true,
10788
+ "description": "The template rule's id.",
10265
10789
  "schema": {
10266
10790
  "type": "string"
10267
10791
  }
@@ -10304,7 +10828,9 @@
10304
10828
  "type": "object",
10305
10829
  "properties": {
10306
10830
  "day_offset": {
10307
- "type": "integer"
10831
+ "type": "integer",
10832
+ "maximum": 7,
10833
+ "minimum": -7
10308
10834
  },
10309
10835
  "label": {
10310
10836
  "type": [
@@ -10320,14 +10846,15 @@
10320
10846
  "boolean",
10321
10847
  "null"
10322
10848
  ]
10323
- }
10849
+ },
10850
+ "description": "Keyed by job category id."
10324
10851
  },
10325
10852
  "start_time": {
10326
10853
  "type": [
10327
10854
  "string",
10328
10855
  "null"
10329
10856
  ],
10330
- "description": "As H:i,H:i:s"
10857
+ "description": "As H:i,H:i:s."
10331
10858
  },
10332
10859
  "venue_id": {
10333
10860
  "type": [
@@ -10349,6 +10876,7 @@
10349
10876
  "name": "community",
10350
10877
  "in": "path",
10351
10878
  "required": true,
10879
+ "description": "The community's slug, as in the address of any of its pages.",
10352
10880
  "schema": {
10353
10881
  "type": "string"
10354
10882
  }
@@ -10357,6 +10885,7 @@
10357
10885
  "name": "template",
10358
10886
  "in": "path",
10359
10887
  "required": true,
10888
+ "description": "The template's id.",
10360
10889
  "schema": {
10361
10890
  "type": "string"
10362
10891
  }
@@ -10392,14 +10921,16 @@
10392
10921
  ],
10393
10922
  "summary": "Templates Services Update",
10394
10923
  "requestBody": {
10395
- "required": true,
10924
+ "required": false,
10396
10925
  "content": {
10397
10926
  "application/json": {
10398
10927
  "schema": {
10399
10928
  "type": "object",
10400
10929
  "properties": {
10401
10930
  "day_offset": {
10402
- "type": "integer"
10931
+ "type": "integer",
10932
+ "maximum": 7,
10933
+ "minimum": -7
10403
10934
  },
10404
10935
  "label": {
10405
10936
  "type": [
@@ -10415,14 +10946,15 @@
10415
10946
  "boolean",
10416
10947
  "null"
10417
10948
  ]
10418
- }
10949
+ },
10950
+ "description": "Keyed by job category id."
10419
10951
  },
10420
10952
  "start_time": {
10421
10953
  "type": [
10422
10954
  "string",
10423
10955
  "null"
10424
10956
  ],
10425
- "description": "As H:i,H:i:s"
10957
+ "description": "As H:i,H:i:s."
10426
10958
  },
10427
10959
  "venue_id": {
10428
10960
  "type": [
@@ -10431,10 +10963,7 @@
10431
10963
  ],
10432
10964
  "format": "uuid"
10433
10965
  }
10434
- },
10435
- "required": [
10436
- "day_offset"
10437
- ]
10966
+ }
10438
10967
  }
10439
10968
  }
10440
10969
  }
@@ -10444,6 +10973,7 @@
10444
10973
  "name": "community",
10445
10974
  "in": "path",
10446
10975
  "required": true,
10976
+ "description": "The community's slug, as in the address of any of its pages.",
10447
10977
  "schema": {
10448
10978
  "type": "string"
10449
10979
  }
@@ -10452,6 +10982,7 @@
10452
10982
  "name": "template",
10453
10983
  "in": "path",
10454
10984
  "required": true,
10985
+ "description": "The template's id.",
10455
10986
  "schema": {
10456
10987
  "type": "string"
10457
10988
  }
@@ -10460,6 +10991,7 @@
10460
10991
  "name": "service",
10461
10992
  "in": "path",
10462
10993
  "required": true,
10994
+ "description": "The template service's id.",
10463
10995
  "schema": {
10464
10996
  "type": "string"
10465
10997
  }
@@ -10497,6 +11029,7 @@
10497
11029
  "name": "community",
10498
11030
  "in": "path",
10499
11031
  "required": true,
11032
+ "description": "The community's slug, as in the address of any of its pages.",
10500
11033
  "schema": {
10501
11034
  "type": "string"
10502
11035
  }
@@ -10505,6 +11038,7 @@
10505
11038
  "name": "template",
10506
11039
  "in": "path",
10507
11040
  "required": true,
11041
+ "description": "The template's id.",
10508
11042
  "schema": {
10509
11043
  "type": "string"
10510
11044
  }
@@ -10513,6 +11047,7 @@
10513
11047
  "name": "service",
10514
11048
  "in": "path",
10515
11049
  "required": true,
11050
+ "description": "The template service's id.",
10516
11051
  "schema": {
10517
11052
  "type": "string"
10518
11053
  }
@@ -10546,7 +11081,7 @@
10546
11081
  "tags": [
10547
11082
  "templates"
10548
11083
  ],
10549
- "summary": "A place at the end of the service's list. `work_id` picks a hymn from an adopted hymnal.",
11084
+ "summary": "Adds a place at the end of the service's list, for a slot name (`slot_id`, from slots); `work_id` picks a hymn from an adopted hymnal. The answer's `slot_id` is the new place's id, which the place's own calls take.",
10550
11085
  "requestBody": {
10551
11086
  "required": true,
10552
11087
  "content": {
@@ -10592,6 +11127,7 @@
10592
11127
  "name": "community",
10593
11128
  "in": "path",
10594
11129
  "required": true,
11130
+ "description": "The community's slug, as in the address of any of its pages.",
10595
11131
  "schema": {
10596
11132
  "type": "string"
10597
11133
  }
@@ -10600,6 +11136,7 @@
10600
11136
  "name": "template",
10601
11137
  "in": "path",
10602
11138
  "required": true,
11139
+ "description": "The template's id.",
10603
11140
  "schema": {
10604
11141
  "type": "string"
10605
11142
  }
@@ -10608,6 +11145,7 @@
10608
11145
  "name": "service",
10609
11146
  "in": "path",
10610
11147
  "required": true,
11148
+ "description": "The template service's id.",
10611
11149
  "schema": {
10612
11150
  "type": "string"
10613
11151
  }
@@ -10655,6 +11193,7 @@
10655
11193
  "type": "string",
10656
11194
  "format": "uuid"
10657
11195
  },
11196
+ "uniqueItems": true,
10658
11197
  "minItems": 1
10659
11198
  }
10660
11199
  },
@@ -10670,6 +11209,7 @@
10670
11209
  "name": "community",
10671
11210
  "in": "path",
10672
11211
  "required": true,
11212
+ "description": "The community's slug, as in the address of any of its pages.",
10673
11213
  "schema": {
10674
11214
  "type": "string"
10675
11215
  }
@@ -10678,6 +11218,7 @@
10678
11218
  "name": "template",
10679
11219
  "in": "path",
10680
11220
  "required": true,
11221
+ "description": "The template's id.",
10681
11222
  "schema": {
10682
11223
  "type": "string"
10683
11224
  }
@@ -10686,6 +11227,7 @@
10686
11227
  "name": "service",
10687
11228
  "in": "path",
10688
11229
  "required": true,
11230
+ "description": "The template service's id.",
10689
11231
  "schema": {
10690
11232
  "type": "string"
10691
11233
  }
@@ -10758,6 +11300,7 @@
10758
11300
  "name": "community",
10759
11301
  "in": "path",
10760
11302
  "required": true,
11303
+ "description": "The community's slug, as in the address of any of its pages.",
10761
11304
  "schema": {
10762
11305
  "type": "string"
10763
11306
  }
@@ -10766,6 +11309,7 @@
10766
11309
  "name": "template",
10767
11310
  "in": "path",
10768
11311
  "required": true,
11312
+ "description": "The template's id.",
10769
11313
  "schema": {
10770
11314
  "type": "string"
10771
11315
  }
@@ -10774,6 +11318,7 @@
10774
11318
  "name": "service",
10775
11319
  "in": "path",
10776
11320
  "required": true,
11321
+ "description": "The template service's id.",
10777
11322
  "schema": {
10778
11323
  "type": "string"
10779
11324
  }
@@ -10782,6 +11327,7 @@
10782
11327
  "name": "slot",
10783
11328
  "in": "path",
10784
11329
  "required": true,
11330
+ "description": "The template slot's id.",
10785
11331
  "schema": {
10786
11332
  "type": "string"
10787
11333
  }
@@ -10819,6 +11365,7 @@
10819
11365
  "name": "community",
10820
11366
  "in": "path",
10821
11367
  "required": true,
11368
+ "description": "The community's slug, as in the address of any of its pages.",
10822
11369
  "schema": {
10823
11370
  "type": "string"
10824
11371
  }
@@ -10827,6 +11374,7 @@
10827
11374
  "name": "template",
10828
11375
  "in": "path",
10829
11376
  "required": true,
11377
+ "description": "The template's id.",
10830
11378
  "schema": {
10831
11379
  "type": "string"
10832
11380
  }
@@ -10835,6 +11383,7 @@
10835
11383
  "name": "service",
10836
11384
  "in": "path",
10837
11385
  "required": true,
11386
+ "description": "The template service's id.",
10838
11387
  "schema": {
10839
11388
  "type": "string"
10840
11389
  }
@@ -10843,6 +11392,7 @@
10843
11392
  "name": "slot",
10844
11393
  "in": "path",
10845
11394
  "required": true,
11395
+ "description": "The template slot's id.",
10846
11396
  "schema": {
10847
11397
  "type": "string"
10848
11398
  }
@@ -10876,7 +11426,7 @@
10876
11426
  "tags": [
10877
11427
  "templates"
10878
11428
  ],
10879
- "summary": "The template's own list: its places at every service it brings.",
11429
+ "summary": "Adds a place to the template's own list, its places at every service it brings, for a slot name (`slot_id`, from slots). The answer's `slot_id` is the new place's id.",
10880
11430
  "requestBody": {
10881
11431
  "required": true,
10882
11432
  "content": {
@@ -10922,6 +11472,7 @@
10922
11472
  "name": "community",
10923
11473
  "in": "path",
10924
11474
  "required": true,
11475
+ "description": "The community's slug, as in the address of any of its pages.",
10925
11476
  "schema": {
10926
11477
  "type": "string"
10927
11478
  }
@@ -10930,6 +11481,7 @@
10930
11481
  "name": "template",
10931
11482
  "in": "path",
10932
11483
  "required": true,
11484
+ "description": "The template's id.",
10933
11485
  "schema": {
10934
11486
  "type": "string"
10935
11487
  }
@@ -10977,6 +11529,7 @@
10977
11529
  "type": "string",
10978
11530
  "format": "uuid"
10979
11531
  },
11532
+ "uniqueItems": true,
10980
11533
  "minItems": 1
10981
11534
  }
10982
11535
  },
@@ -10992,6 +11545,7 @@
10992
11545
  "name": "community",
10993
11546
  "in": "path",
10994
11547
  "required": true,
11548
+ "description": "The community's slug, as in the address of any of its pages.",
10995
11549
  "schema": {
10996
11550
  "type": "string"
10997
11551
  }
@@ -11000,6 +11554,7 @@
11000
11554
  "name": "template",
11001
11555
  "in": "path",
11002
11556
  "required": true,
11557
+ "description": "The template's id.",
11003
11558
  "schema": {
11004
11559
  "type": "string"
11005
11560
  }
@@ -11072,6 +11627,7 @@
11072
11627
  "name": "community",
11073
11628
  "in": "path",
11074
11629
  "required": true,
11630
+ "description": "The community's slug, as in the address of any of its pages.",
11075
11631
  "schema": {
11076
11632
  "type": "string"
11077
11633
  }
@@ -11080,6 +11636,7 @@
11080
11636
  "name": "template",
11081
11637
  "in": "path",
11082
11638
  "required": true,
11639
+ "description": "The template's id.",
11083
11640
  "schema": {
11084
11641
  "type": "string"
11085
11642
  }
@@ -11088,6 +11645,7 @@
11088
11645
  "name": "placement",
11089
11646
  "in": "path",
11090
11647
  "required": true,
11648
+ "description": "The template slot's id.",
11091
11649
  "schema": {
11092
11650
  "type": "string"
11093
11651
  }
@@ -11125,6 +11683,7 @@
11125
11683
  "name": "community",
11126
11684
  "in": "path",
11127
11685
  "required": true,
11686
+ "description": "The community's slug, as in the address of any of its pages.",
11128
11687
  "schema": {
11129
11688
  "type": "string"
11130
11689
  }
@@ -11133,6 +11692,7 @@
11133
11692
  "name": "template",
11134
11693
  "in": "path",
11135
11694
  "required": true,
11695
+ "description": "The template's id.",
11136
11696
  "schema": {
11137
11697
  "type": "string"
11138
11698
  }
@@ -11141,6 +11701,7 @@
11141
11701
  "name": "placement",
11142
11702
  "in": "path",
11143
11703
  "required": true,
11704
+ "description": "The template slot's id.",
11144
11705
  "schema": {
11145
11706
  "type": "string"
11146
11707
  }
@@ -11180,6 +11741,7 @@
11180
11741
  "name": "community",
11181
11742
  "in": "path",
11182
11743
  "required": true,
11744
+ "description": "The community's slug, as in the address of any of its pages.",
11183
11745
  "schema": {
11184
11746
  "type": "string"
11185
11747
  }