@serviceai/api-spec 1.2.432 → 1.2.434
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 +537 -127
- package/openapi.yaml +517 -120
- package/package.json +1 -1
- package/types.d.ts +281 -11
package/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "ServiceAi API",
|
|
5
|
-
"version": "1.2.
|
|
5
|
+
"version": "1.2.434",
|
|
6
6
|
"description": "Source-of-truth API contract for ServiceAi. Generated from `shared/schema.ts` Zod schemas by `scripts/build-api-spec.ts`. Versioning policy: see `docs/api-versioning.md`. The hand-written docs/ios-contract.md and docs/lidar-mobile-upload-contract.md are human-readable design notes only — this spec is the canonical wire contract.",
|
|
7
7
|
"license": {
|
|
8
8
|
"name": "Proprietary",
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
"properties": {
|
|
127
127
|
"apiVersion": {
|
|
128
128
|
"type": "string",
|
|
129
|
-
"example": "1.2.
|
|
129
|
+
"example": "1.2.434"
|
|
130
130
|
},
|
|
131
131
|
"minClientVersion": {
|
|
132
132
|
"type": "string",
|
|
@@ -240,9 +240,6 @@
|
|
|
240
240
|
{
|
|
241
241
|
"type": "array",
|
|
242
242
|
"items": {}
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"type": "null"
|
|
246
243
|
}
|
|
247
244
|
]
|
|
248
245
|
},
|
|
@@ -250,7 +247,8 @@
|
|
|
250
247
|
"type": [
|
|
251
248
|
"string",
|
|
252
249
|
"null"
|
|
253
|
-
]
|
|
250
|
+
],
|
|
251
|
+
"format": "date-time"
|
|
254
252
|
},
|
|
255
253
|
"parentContactId": {
|
|
256
254
|
"type": [
|
|
@@ -412,7 +410,8 @@
|
|
|
412
410
|
"type": [
|
|
413
411
|
"string",
|
|
414
412
|
"null"
|
|
415
|
-
]
|
|
413
|
+
],
|
|
414
|
+
"format": "date-time"
|
|
416
415
|
},
|
|
417
416
|
"qboLastPushedHash": {
|
|
418
417
|
"type": [
|
|
@@ -430,7 +429,8 @@
|
|
|
430
429
|
"type": [
|
|
431
430
|
"string",
|
|
432
431
|
"null"
|
|
433
|
-
]
|
|
432
|
+
],
|
|
433
|
+
"format": "date-time"
|
|
434
434
|
},
|
|
435
435
|
"deletedBy": {
|
|
436
436
|
"type": [
|
|
@@ -639,9 +639,6 @@
|
|
|
639
639
|
{
|
|
640
640
|
"type": "array",
|
|
641
641
|
"items": {}
|
|
642
|
-
},
|
|
643
|
-
{
|
|
644
|
-
"type": "null"
|
|
645
642
|
}
|
|
646
643
|
]
|
|
647
644
|
},
|
|
@@ -672,9 +669,6 @@
|
|
|
672
669
|
{
|
|
673
670
|
"type": "array",
|
|
674
671
|
"items": {}
|
|
675
|
-
},
|
|
676
|
-
{
|
|
677
|
-
"type": "null"
|
|
678
672
|
}
|
|
679
673
|
]
|
|
680
674
|
},
|
|
@@ -707,9 +701,6 @@
|
|
|
707
701
|
{
|
|
708
702
|
"type": "array",
|
|
709
703
|
"items": {}
|
|
710
|
-
},
|
|
711
|
-
{
|
|
712
|
-
"type": "null"
|
|
713
704
|
}
|
|
714
705
|
]
|
|
715
706
|
},
|
|
@@ -734,9 +725,6 @@
|
|
|
734
725
|
{
|
|
735
726
|
"type": "array",
|
|
736
727
|
"items": {}
|
|
737
|
-
},
|
|
738
|
-
{
|
|
739
|
-
"type": "null"
|
|
740
728
|
}
|
|
741
729
|
],
|
|
742
730
|
"description": "Persisted append-room doorway links on a composite scan. Each link carries both a `sourceOpeningKind` (the appended child scan's entry side — always `door` in practice, since iOS does not capture openings on a single-room append payload) and a `targetOpeningKind` (`door` or `opening`) that controls kind-specific resolution against the parent scan: a link with `targetOpeningKind: \"door\"` indexes into the target room's `doors[]`, a link with `targetOpeningKind: \"opening\"` indexes into the target room's `openings[]`. The two arrays are never folded together. Windows are not traversable and never appear here."
|
|
@@ -762,9 +750,6 @@
|
|
|
762
750
|
{
|
|
763
751
|
"type": "array",
|
|
764
752
|
"items": {}
|
|
765
|
-
},
|
|
766
|
-
{
|
|
767
|
-
"type": "null"
|
|
768
753
|
}
|
|
769
754
|
]
|
|
770
755
|
},
|
|
@@ -807,9 +792,6 @@
|
|
|
807
792
|
{
|
|
808
793
|
"type": "array",
|
|
809
794
|
"items": {}
|
|
810
|
-
},
|
|
811
|
-
{
|
|
812
|
-
"type": "null"
|
|
813
795
|
}
|
|
814
796
|
]
|
|
815
797
|
},
|
|
@@ -834,9 +816,6 @@
|
|
|
834
816
|
{
|
|
835
817
|
"type": "array",
|
|
836
818
|
"items": {}
|
|
837
|
-
},
|
|
838
|
-
{
|
|
839
|
-
"type": "null"
|
|
840
819
|
}
|
|
841
820
|
]
|
|
842
821
|
},
|
|
@@ -846,10 +825,7 @@
|
|
|
846
825
|
"null"
|
|
847
826
|
],
|
|
848
827
|
"items": {
|
|
849
|
-
"type":
|
|
850
|
-
"string",
|
|
851
|
-
"null"
|
|
852
|
-
]
|
|
828
|
+
"type": "string"
|
|
853
829
|
}
|
|
854
830
|
},
|
|
855
831
|
"metricCorrection": {
|
|
@@ -892,7 +868,8 @@
|
|
|
892
868
|
"type": [
|
|
893
869
|
"string",
|
|
894
870
|
"null"
|
|
895
|
-
]
|
|
871
|
+
],
|
|
872
|
+
"format": "date-time"
|
|
896
873
|
},
|
|
897
874
|
"captureMode": {
|
|
898
875
|
"type": [
|
|
@@ -912,7 +889,15 @@
|
|
|
912
889
|
"type": [
|
|
913
890
|
"string",
|
|
914
891
|
"null"
|
|
915
|
-
]
|
|
892
|
+
],
|
|
893
|
+
"format": "date-time"
|
|
894
|
+
},
|
|
895
|
+
"clientScanId": {
|
|
896
|
+
"type": [
|
|
897
|
+
"string",
|
|
898
|
+
"null"
|
|
899
|
+
],
|
|
900
|
+
"maxLength": 64
|
|
916
901
|
},
|
|
917
902
|
"floorPlanAssetId": {
|
|
918
903
|
"type": [
|
|
@@ -960,6 +945,54 @@
|
|
|
960
945
|
"minimum": -2147483648,
|
|
961
946
|
"maximum": 2147483647
|
|
962
947
|
},
|
|
948
|
+
"sourceSketchId": {
|
|
949
|
+
"type": [
|
|
950
|
+
"integer",
|
|
951
|
+
"null"
|
|
952
|
+
],
|
|
953
|
+
"minimum": -2147483648,
|
|
954
|
+
"maximum": 2147483647
|
|
955
|
+
},
|
|
956
|
+
"takeoffPagePixelsPerMeter": {
|
|
957
|
+
"type": [
|
|
958
|
+
"number",
|
|
959
|
+
"null"
|
|
960
|
+
],
|
|
961
|
+
"minimum": -140737488355328,
|
|
962
|
+
"maximum": 140737488355327
|
|
963
|
+
},
|
|
964
|
+
"takeoffPageOffsetX": {
|
|
965
|
+
"type": [
|
|
966
|
+
"number",
|
|
967
|
+
"null"
|
|
968
|
+
],
|
|
969
|
+
"minimum": -140737488355328,
|
|
970
|
+
"maximum": 140737488355327
|
|
971
|
+
},
|
|
972
|
+
"takeoffPageOffsetY": {
|
|
973
|
+
"type": [
|
|
974
|
+
"number",
|
|
975
|
+
"null"
|
|
976
|
+
],
|
|
977
|
+
"minimum": -140737488355328,
|
|
978
|
+
"maximum": 140737488355327
|
|
979
|
+
},
|
|
980
|
+
"takeoffPageWidthPx": {
|
|
981
|
+
"type": [
|
|
982
|
+
"integer",
|
|
983
|
+
"null"
|
|
984
|
+
],
|
|
985
|
+
"minimum": -2147483648,
|
|
986
|
+
"maximum": 2147483647
|
|
987
|
+
},
|
|
988
|
+
"takeoffPageHeightPx": {
|
|
989
|
+
"type": [
|
|
990
|
+
"integer",
|
|
991
|
+
"null"
|
|
992
|
+
],
|
|
993
|
+
"minimum": -2147483648,
|
|
994
|
+
"maximum": 2147483647
|
|
995
|
+
},
|
|
963
996
|
"floorId": {
|
|
964
997
|
"type": [
|
|
965
998
|
"integer",
|
|
@@ -984,7 +1017,8 @@
|
|
|
984
1017
|
"type": [
|
|
985
1018
|
"string",
|
|
986
1019
|
"null"
|
|
987
|
-
]
|
|
1020
|
+
],
|
|
1021
|
+
"format": "date-time"
|
|
988
1022
|
},
|
|
989
1023
|
"deletedBy": {
|
|
990
1024
|
"type": [
|
|
@@ -1063,13 +1097,15 @@
|
|
|
1063
1097
|
"type": [
|
|
1064
1098
|
"string",
|
|
1065
1099
|
"null"
|
|
1066
|
-
]
|
|
1100
|
+
],
|
|
1101
|
+
"format": "date-time"
|
|
1067
1102
|
},
|
|
1068
1103
|
"dueDate": {
|
|
1069
1104
|
"type": [
|
|
1070
1105
|
"string",
|
|
1071
1106
|
"null"
|
|
1072
|
-
]
|
|
1107
|
+
],
|
|
1108
|
+
"format": "date-time"
|
|
1073
1109
|
},
|
|
1074
1110
|
"allDay": {
|
|
1075
1111
|
"type": [
|
|
@@ -1110,9 +1146,6 @@
|
|
|
1110
1146
|
{
|
|
1111
1147
|
"type": "array",
|
|
1112
1148
|
"items": {}
|
|
1113
|
-
},
|
|
1114
|
-
{
|
|
1115
|
-
"type": "null"
|
|
1116
1149
|
}
|
|
1117
1150
|
]
|
|
1118
1151
|
},
|
|
@@ -1137,9 +1170,6 @@
|
|
|
1137
1170
|
{
|
|
1138
1171
|
"type": "array",
|
|
1139
1172
|
"items": {}
|
|
1140
|
-
},
|
|
1141
|
-
{
|
|
1142
|
-
"type": "null"
|
|
1143
1173
|
}
|
|
1144
1174
|
]
|
|
1145
1175
|
},
|
|
@@ -1178,9 +1208,6 @@
|
|
|
1178
1208
|
{
|
|
1179
1209
|
"type": "array",
|
|
1180
1210
|
"items": {}
|
|
1181
|
-
},
|
|
1182
|
-
{
|
|
1183
|
-
"type": "null"
|
|
1184
1211
|
}
|
|
1185
1212
|
]
|
|
1186
1213
|
},
|
|
@@ -1205,9 +1232,6 @@
|
|
|
1205
1232
|
{
|
|
1206
1233
|
"type": "array",
|
|
1207
1234
|
"items": {}
|
|
1208
|
-
},
|
|
1209
|
-
{
|
|
1210
|
-
"type": "null"
|
|
1211
1235
|
}
|
|
1212
1236
|
]
|
|
1213
1237
|
},
|
|
@@ -1223,7 +1247,8 @@
|
|
|
1223
1247
|
"30_min",
|
|
1224
1248
|
"1_hour",
|
|
1225
1249
|
"1_day",
|
|
1226
|
-
"1_week"
|
|
1250
|
+
"1_week",
|
|
1251
|
+
null
|
|
1227
1252
|
]
|
|
1228
1253
|
},
|
|
1229
1254
|
"reminderNotificationId": {
|
|
@@ -1258,7 +1283,8 @@
|
|
|
1258
1283
|
"type": [
|
|
1259
1284
|
"string",
|
|
1260
1285
|
"null"
|
|
1261
|
-
]
|
|
1286
|
+
],
|
|
1287
|
+
"format": "date-time"
|
|
1262
1288
|
},
|
|
1263
1289
|
"parentTaskId": {
|
|
1264
1290
|
"type": [
|
|
@@ -1272,7 +1298,8 @@
|
|
|
1272
1298
|
"type": [
|
|
1273
1299
|
"string",
|
|
1274
1300
|
"null"
|
|
1275
|
-
]
|
|
1301
|
+
],
|
|
1302
|
+
"format": "date-time"
|
|
1276
1303
|
},
|
|
1277
1304
|
"isRecurrenceException": {
|
|
1278
1305
|
"type": [
|
|
@@ -1301,9 +1328,6 @@
|
|
|
1301
1328
|
{
|
|
1302
1329
|
"type": "array",
|
|
1303
1330
|
"items": {}
|
|
1304
|
-
},
|
|
1305
|
-
{
|
|
1306
|
-
"type": "null"
|
|
1307
1331
|
}
|
|
1308
1332
|
]
|
|
1309
1333
|
},
|
|
@@ -1319,7 +1343,8 @@
|
|
|
1319
1343
|
"type": [
|
|
1320
1344
|
"string",
|
|
1321
1345
|
"null"
|
|
1322
|
-
]
|
|
1346
|
+
],
|
|
1347
|
+
"format": "date-time"
|
|
1323
1348
|
},
|
|
1324
1349
|
"deletedBy": {
|
|
1325
1350
|
"type": [
|
|
@@ -1374,7 +1399,8 @@
|
|
|
1374
1399
|
"type": [
|
|
1375
1400
|
"string",
|
|
1376
1401
|
"null"
|
|
1377
|
-
]
|
|
1402
|
+
],
|
|
1403
|
+
"format": "date-time"
|
|
1378
1404
|
},
|
|
1379
1405
|
"deletedBy": {
|
|
1380
1406
|
"type": [
|
|
@@ -1457,9 +1483,6 @@
|
|
|
1457
1483
|
{
|
|
1458
1484
|
"type": "array",
|
|
1459
1485
|
"items": {}
|
|
1460
|
-
},
|
|
1461
|
-
{
|
|
1462
|
-
"type": "null"
|
|
1463
1486
|
}
|
|
1464
1487
|
]
|
|
1465
1488
|
},
|
|
@@ -1469,10 +1492,7 @@
|
|
|
1469
1492
|
"null"
|
|
1470
1493
|
],
|
|
1471
1494
|
"items": {
|
|
1472
|
-
"type":
|
|
1473
|
-
"string",
|
|
1474
|
-
"null"
|
|
1475
|
-
]
|
|
1495
|
+
"type": "string"
|
|
1476
1496
|
}
|
|
1477
1497
|
},
|
|
1478
1498
|
"uploadedBy": {
|
|
@@ -1485,7 +1505,8 @@
|
|
|
1485
1505
|
"type": [
|
|
1486
1506
|
"string",
|
|
1487
1507
|
"null"
|
|
1488
|
-
]
|
|
1508
|
+
],
|
|
1509
|
+
"format": "date-time"
|
|
1489
1510
|
},
|
|
1490
1511
|
"deletedBy": {
|
|
1491
1512
|
"type": [
|
|
@@ -1540,7 +1561,8 @@
|
|
|
1540
1561
|
"type": [
|
|
1541
1562
|
"string",
|
|
1542
1563
|
"null"
|
|
1543
|
-
]
|
|
1564
|
+
],
|
|
1565
|
+
"format": "date-time"
|
|
1544
1566
|
},
|
|
1545
1567
|
"deletedBy": {
|
|
1546
1568
|
"type": [
|
|
@@ -1682,9 +1704,6 @@
|
|
|
1682
1704
|
{
|
|
1683
1705
|
"type": "array",
|
|
1684
1706
|
"items": {}
|
|
1685
|
-
},
|
|
1686
|
-
{
|
|
1687
|
-
"type": "null"
|
|
1688
1707
|
}
|
|
1689
1708
|
]
|
|
1690
1709
|
},
|
|
@@ -1710,19 +1729,22 @@
|
|
|
1710
1729
|
"type": [
|
|
1711
1730
|
"string",
|
|
1712
1731
|
"null"
|
|
1713
|
-
]
|
|
1732
|
+
],
|
|
1733
|
+
"format": "date-time"
|
|
1714
1734
|
},
|
|
1715
1735
|
"sentAt": {
|
|
1716
1736
|
"type": [
|
|
1717
1737
|
"string",
|
|
1718
1738
|
"null"
|
|
1719
|
-
]
|
|
1739
|
+
],
|
|
1740
|
+
"format": "date-time"
|
|
1720
1741
|
},
|
|
1721
1742
|
"approvedAt": {
|
|
1722
1743
|
"type": [
|
|
1723
1744
|
"string",
|
|
1724
1745
|
"null"
|
|
1725
|
-
]
|
|
1746
|
+
],
|
|
1747
|
+
"format": "date-time"
|
|
1726
1748
|
},
|
|
1727
1749
|
"approvedBy": {
|
|
1728
1750
|
"type": [
|
|
@@ -1734,7 +1756,8 @@
|
|
|
1734
1756
|
"type": [
|
|
1735
1757
|
"string",
|
|
1736
1758
|
"null"
|
|
1737
|
-
]
|
|
1759
|
+
],
|
|
1760
|
+
"format": "date-time"
|
|
1738
1761
|
},
|
|
1739
1762
|
"rejectionReason": {
|
|
1740
1763
|
"type": [
|
|
@@ -1746,7 +1769,8 @@
|
|
|
1746
1769
|
"type": [
|
|
1747
1770
|
"string",
|
|
1748
1771
|
"null"
|
|
1749
|
-
]
|
|
1772
|
+
],
|
|
1773
|
+
"format": "date-time"
|
|
1750
1774
|
},
|
|
1751
1775
|
"signatureMeta": {
|
|
1752
1776
|
"anyOf": [
|
|
@@ -1769,9 +1793,6 @@
|
|
|
1769
1793
|
{
|
|
1770
1794
|
"type": "array",
|
|
1771
1795
|
"items": {}
|
|
1772
|
-
},
|
|
1773
|
-
{
|
|
1774
|
-
"type": "null"
|
|
1775
1796
|
}
|
|
1776
1797
|
]
|
|
1777
1798
|
},
|
|
@@ -1809,7 +1830,8 @@
|
|
|
1809
1830
|
"type": [
|
|
1810
1831
|
"string",
|
|
1811
1832
|
"null"
|
|
1812
|
-
]
|
|
1833
|
+
],
|
|
1834
|
+
"format": "date-time"
|
|
1813
1835
|
},
|
|
1814
1836
|
"revisionNotes": {
|
|
1815
1837
|
"type": [
|
|
@@ -1821,7 +1843,8 @@
|
|
|
1821
1843
|
"type": [
|
|
1822
1844
|
"string",
|
|
1823
1845
|
"null"
|
|
1824
|
-
]
|
|
1846
|
+
],
|
|
1847
|
+
"format": "date-time"
|
|
1825
1848
|
},
|
|
1826
1849
|
"convertedToInvoiceId": {
|
|
1827
1850
|
"type": [
|
|
@@ -1835,7 +1858,8 @@
|
|
|
1835
1858
|
"type": [
|
|
1836
1859
|
"string",
|
|
1837
1860
|
"null"
|
|
1838
|
-
]
|
|
1861
|
+
],
|
|
1862
|
+
"format": "date-time"
|
|
1839
1863
|
},
|
|
1840
1864
|
"voidedBy": {
|
|
1841
1865
|
"type": [
|
|
@@ -1883,7 +1907,8 @@
|
|
|
1883
1907
|
"type": [
|
|
1884
1908
|
"string",
|
|
1885
1909
|
"null"
|
|
1886
|
-
]
|
|
1910
|
+
],
|
|
1911
|
+
"format": "date-time"
|
|
1887
1912
|
},
|
|
1888
1913
|
"qboId": {
|
|
1889
1914
|
"type": [
|
|
@@ -1901,7 +1926,8 @@
|
|
|
1901
1926
|
"type": [
|
|
1902
1927
|
"string",
|
|
1903
1928
|
"null"
|
|
1904
|
-
]
|
|
1929
|
+
],
|
|
1930
|
+
"format": "date-time"
|
|
1905
1931
|
},
|
|
1906
1932
|
"qboLastPushedHash": {
|
|
1907
1933
|
"type": [
|
|
@@ -1928,11 +1954,26 @@
|
|
|
1928
1954
|
]
|
|
1929
1955
|
},
|
|
1930
1956
|
"qboTotalsAt": {
|
|
1957
|
+
"type": [
|
|
1958
|
+
"string",
|
|
1959
|
+
"null"
|
|
1960
|
+
],
|
|
1961
|
+
"format": "date-time"
|
|
1962
|
+
},
|
|
1963
|
+
"sourceKind": {
|
|
1931
1964
|
"type": [
|
|
1932
1965
|
"string",
|
|
1933
1966
|
"null"
|
|
1934
1967
|
]
|
|
1935
1968
|
},
|
|
1969
|
+
"takeoffScanId": {
|
|
1970
|
+
"type": [
|
|
1971
|
+
"integer",
|
|
1972
|
+
"null"
|
|
1973
|
+
],
|
|
1974
|
+
"minimum": -2147483648,
|
|
1975
|
+
"maximum": 2147483647
|
|
1976
|
+
},
|
|
1936
1977
|
"createdBy": {
|
|
1937
1978
|
"type": [
|
|
1938
1979
|
"string",
|
|
@@ -1943,7 +1984,8 @@
|
|
|
1943
1984
|
"type": [
|
|
1944
1985
|
"string",
|
|
1945
1986
|
"null"
|
|
1946
|
-
]
|
|
1987
|
+
],
|
|
1988
|
+
"format": "date-time"
|
|
1947
1989
|
},
|
|
1948
1990
|
"deletedBy": {
|
|
1949
1991
|
"type": [
|
|
@@ -2103,12 +2145,14 @@
|
|
|
2103
2145
|
"isOpening": {
|
|
2104
2146
|
"type": "boolean"
|
|
2105
2147
|
}
|
|
2106
|
-
}
|
|
2148
|
+
},
|
|
2149
|
+
"additionalProperties": {}
|
|
2107
2150
|
},
|
|
2108
2151
|
"captureMethod": {
|
|
2109
2152
|
"type": "string"
|
|
2110
2153
|
}
|
|
2111
|
-
}
|
|
2154
|
+
},
|
|
2155
|
+
"additionalProperties": {}
|
|
2112
2156
|
}
|
|
2113
2157
|
},
|
|
2114
2158
|
"doors": {
|
|
@@ -2139,6 +2183,11 @@
|
|
|
2139
2183
|
"type": "number",
|
|
2140
2184
|
"exclusiveMinimum": 0
|
|
2141
2185
|
},
|
|
2186
|
+
"sillHeightM": {
|
|
2187
|
+
"type": "number",
|
|
2188
|
+
"minimum": 0,
|
|
2189
|
+
"maximum": 50
|
|
2190
|
+
},
|
|
2142
2191
|
"hostWallIndex": {
|
|
2143
2192
|
"type": [
|
|
2144
2193
|
"integer",
|
|
@@ -2201,6 +2250,11 @@
|
|
|
2201
2250
|
"type": "number",
|
|
2202
2251
|
"exclusiveMinimum": 0
|
|
2203
2252
|
},
|
|
2253
|
+
"sillHeightM": {
|
|
2254
|
+
"type": "number",
|
|
2255
|
+
"minimum": 0,
|
|
2256
|
+
"maximum": 50
|
|
2257
|
+
},
|
|
2204
2258
|
"hostWallIndex": {
|
|
2205
2259
|
"type": [
|
|
2206
2260
|
"integer",
|
|
@@ -2263,6 +2317,11 @@
|
|
|
2263
2317
|
"type": "number",
|
|
2264
2318
|
"exclusiveMinimum": 0
|
|
2265
2319
|
},
|
|
2320
|
+
"sillHeightM": {
|
|
2321
|
+
"type": "number",
|
|
2322
|
+
"minimum": 0,
|
|
2323
|
+
"maximum": 50
|
|
2324
|
+
},
|
|
2266
2325
|
"hostWallIndex": {
|
|
2267
2326
|
"type": [
|
|
2268
2327
|
"integer",
|
|
@@ -2342,7 +2401,8 @@
|
|
|
2342
2401
|
"required": [
|
|
2343
2402
|
"id",
|
|
2344
2403
|
"position"
|
|
2345
|
-
]
|
|
2404
|
+
],
|
|
2405
|
+
"additionalProperties": {}
|
|
2346
2406
|
}
|
|
2347
2407
|
},
|
|
2348
2408
|
"objects": {
|
|
@@ -2385,7 +2445,8 @@
|
|
|
2385
2445
|
"rotation": {
|
|
2386
2446
|
"type": "number"
|
|
2387
2447
|
}
|
|
2388
|
-
}
|
|
2448
|
+
},
|
|
2449
|
+
"additionalProperties": {}
|
|
2389
2450
|
}
|
|
2390
2451
|
},
|
|
2391
2452
|
"boundaryPolygon": {
|
|
@@ -2414,6 +2475,7 @@
|
|
|
2414
2475
|
"type": "string"
|
|
2415
2476
|
}
|
|
2416
2477
|
},
|
|
2478
|
+
"additionalProperties": {},
|
|
2417
2479
|
"description": "Mobile-upload scan room. `doors`, `windows`, and `openings` are three distinct non-overlapping arrays — array membership IS the discriminator (there is no `kind` / `type` field on the item itself). Append-room `entryDoorwayId` of the form `scan-<scanId>-room-<roomLocalId>-(door|opening)-<idx>` resolves kind-specifically against the parent scan's matching array only: a `door` segment indexes `doors[]`, an `opening` segment indexes `openings[]`. Windows are not traversable and never appear as an `entryDoorwayId` target."
|
|
2418
2480
|
}
|
|
2419
2481
|
}
|
|
@@ -2421,6 +2483,7 @@
|
|
|
2421
2483
|
"required": [
|
|
2422
2484
|
"rooms"
|
|
2423
2485
|
],
|
|
2486
|
+
"additionalProperties": {},
|
|
2424
2487
|
"description": "RoomPlan JSON envelope. `rooms[]` carries the per-room geometry (walls/doors/windows/openings/pins/objects/boundaryPolygon). iOS continues to upload positions in the RoomPlan-native frame; the server applies the view-alignment intake transform once at `/scans/mobile-upload` (see docs/lidar-contract-v4.md)."
|
|
2425
2488
|
},
|
|
2426
2489
|
"name": {
|
|
@@ -2617,6 +2680,7 @@
|
|
|
2617
2680
|
"roomPlanJSON",
|
|
2618
2681
|
"name"
|
|
2619
2682
|
],
|
|
2683
|
+
"additionalProperties": {},
|
|
2620
2684
|
"description": "POST /api/jobs/:jobId/scans/mobile-upload body. v5 of the LiDAR contract (Task #879) — additive over v3/v4. Required: `roomPlanJSON` (object with nested `rooms` array) + `name`. All v3 and v4 payloads remain accepted byte-for-byte. New first-class fields: per-room `roomLocalId`, `pins[]`, `objects[]`, `boundaryPolygon[]`, per-wall `captureMetadata`; append-room `parentScanId`, `entryDoorwayId`, `entryDoorwayWallIndex`, `entryDoorwayPosition`; opening `position` is 2D `{x, y}` (an additional `z` is tolerated for backwards compatibility but ignored by the server). `wallConfidences` advertises the canonical nested `(number[] | null)[]` shape; the two legacy shapes (flat `number[]` and `Record<roomLocalIdOrIndex, number[]>`) are still parsed by `normalizeWallConfidences` in `server/routes/lidar.ts`."
|
|
2621
2685
|
},
|
|
2622
2686
|
"MobileUploadResponse": {
|
|
@@ -3337,8 +3401,8 @@
|
|
|
3337
3401
|
},
|
|
3338
3402
|
"source": {
|
|
3339
3403
|
"type": "string",
|
|
3340
|
-
"
|
|
3341
|
-
"
|
|
3404
|
+
"example": "auto",
|
|
3405
|
+
"description": "'manual' (a button press) or 'auto' (the resolver)."
|
|
3342
3406
|
},
|
|
3343
3407
|
"excludedFromBudget": {
|
|
3344
3408
|
"type": "boolean",
|
|
@@ -3402,7 +3466,8 @@
|
|
|
3402
3466
|
],
|
|
3403
3467
|
"enum": [
|
|
3404
3468
|
"away",
|
|
3405
|
-
"no_location"
|
|
3469
|
+
"no_location",
|
|
3470
|
+
null
|
|
3406
3471
|
],
|
|
3407
3472
|
"description": "Job time started by hand away from the job ('away') or with no usable location ('no_location'); null for a normal start. The office decides it."
|
|
3408
3473
|
},
|
|
@@ -3421,7 +3486,8 @@
|
|
|
3421
3486
|
"enum": [
|
|
3422
3487
|
"approved",
|
|
3423
3488
|
"not_approved",
|
|
3424
|
-
"moved"
|
|
3489
|
+
"moved",
|
|
3490
|
+
null
|
|
3425
3491
|
],
|
|
3426
3492
|
"description": "The office's decision on a flagged start; null while it waits. 'not_approved' stays on the timesheet but off the job's costing."
|
|
3427
3493
|
},
|
|
@@ -3555,8 +3621,8 @@
|
|
|
3555
3621
|
},
|
|
3556
3622
|
"openedBy": {
|
|
3557
3623
|
"type": "string",
|
|
3558
|
-
"
|
|
3559
|
-
"
|
|
3624
|
+
"example": "tech",
|
|
3625
|
+
"description": "'tech' (the button), 'admin', or 'job_clock_in'."
|
|
3560
3626
|
},
|
|
3561
3627
|
"closedBy": {
|
|
3562
3628
|
"type": [
|
|
@@ -4121,7 +4187,8 @@
|
|
|
4121
4187
|
"enum": [
|
|
4122
4188
|
"ios",
|
|
4123
4189
|
"web",
|
|
4124
|
-
"android"
|
|
4190
|
+
"android",
|
|
4191
|
+
null
|
|
4125
4192
|
]
|
|
4126
4193
|
},
|
|
4127
4194
|
"autoClockEnabled": {
|
|
@@ -4176,8 +4243,8 @@
|
|
|
4176
4243
|
"string",
|
|
4177
4244
|
"null"
|
|
4178
4245
|
],
|
|
4179
|
-
"
|
|
4180
|
-
"
|
|
4246
|
+
"example": "no_consent",
|
|
4247
|
+
"description": "Why the batch was dropped. On 'no_consent' the client should clear its queue rather than retry."
|
|
4181
4248
|
},
|
|
4182
4249
|
"resolver": {
|
|
4183
4250
|
"type": [
|
|
@@ -4244,13 +4311,13 @@
|
|
|
4244
4311
|
},
|
|
4245
4312
|
"dwellSeconds": {
|
|
4246
4313
|
"type": "integer",
|
|
4247
|
-
"description": "How long a device must stay on one side of a fence before it counts. A choice from a fixed set of steps, not a free number: a tech driving past a job must not be clocked in, and one walking in must not wait. An older org may still have a free value stored; the server snaps it to the nearest step, so read this value rather than assuming what was configured.",
|
|
4248
4314
|
"enum": [
|
|
4249
4315
|
30,
|
|
4250
4316
|
60,
|
|
4251
4317
|
100,
|
|
4252
4318
|
120
|
|
4253
|
-
]
|
|
4319
|
+
],
|
|
4320
|
+
"description": "How long a device must stay on one side of a fence before it counts. A choice from a fixed set of steps, not a free number: a tech driving past a job must not be clocked in, and one walking in must not wait. An older org may still have a free value stored; the server snaps it to the nearest step, so read this value rather than assuming what was configured."
|
|
4254
4321
|
},
|
|
4255
4322
|
"staleShiftHours": {
|
|
4256
4323
|
"type": "integer"
|
|
@@ -4431,16 +4498,16 @@
|
|
|
4431
4498
|
"string",
|
|
4432
4499
|
"null"
|
|
4433
4500
|
],
|
|
4434
|
-
"
|
|
4435
|
-
"
|
|
4501
|
+
"example": "08:00",
|
|
4502
|
+
"description": "'HH:MM' local. Null = all day, and always null for 'off' and 'pto'."
|
|
4436
4503
|
},
|
|
4437
4504
|
"endTime": {
|
|
4438
4505
|
"type": [
|
|
4439
4506
|
"string",
|
|
4440
4507
|
"null"
|
|
4441
4508
|
],
|
|
4442
|
-
"
|
|
4443
|
-
"
|
|
4509
|
+
"example": "17:00",
|
|
4510
|
+
"description": "An end at or before the start means the shift runs overnight into the next day."
|
|
4444
4511
|
},
|
|
4445
4512
|
"kind": {
|
|
4446
4513
|
"type": "string",
|
|
@@ -4794,6 +4861,171 @@
|
|
|
4794
4861
|
"requestedAt"
|
|
4795
4862
|
],
|
|
4796
4863
|
"description": "The signed-in person's request to have their account deleted. pending: waiting for the company; completed: the company marked it done; cancelled: the company cancelled it (asking again starts a new one)."
|
|
4864
|
+
},
|
|
4865
|
+
"DoorwayEditCommand": {
|
|
4866
|
+
"oneOf": [
|
|
4867
|
+
{
|
|
4868
|
+
"type": "object",
|
|
4869
|
+
"properties": {
|
|
4870
|
+
"action": {
|
|
4871
|
+
"type": "string",
|
|
4872
|
+
"enum": [
|
|
4873
|
+
"delete"
|
|
4874
|
+
]
|
|
4875
|
+
},
|
|
4876
|
+
"roomId": {
|
|
4877
|
+
"type": "integer",
|
|
4878
|
+
"exclusiveMinimum": 0
|
|
4879
|
+
},
|
|
4880
|
+
"openingId": {
|
|
4881
|
+
"type": "string",
|
|
4882
|
+
"pattern": "^[A-Za-z0-9:_-]{1,128}$"
|
|
4883
|
+
},
|
|
4884
|
+
"revision": {
|
|
4885
|
+
"type": "string",
|
|
4886
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
4887
|
+
},
|
|
4888
|
+
"confirmed": {
|
|
4889
|
+
"type": "boolean",
|
|
4890
|
+
"enum": [
|
|
4891
|
+
true
|
|
4892
|
+
]
|
|
4893
|
+
}
|
|
4894
|
+
},
|
|
4895
|
+
"required": [
|
|
4896
|
+
"action",
|
|
4897
|
+
"roomId",
|
|
4898
|
+
"openingId",
|
|
4899
|
+
"revision",
|
|
4900
|
+
"confirmed"
|
|
4901
|
+
],
|
|
4902
|
+
"additionalProperties": false
|
|
4903
|
+
},
|
|
4904
|
+
{
|
|
4905
|
+
"type": "object",
|
|
4906
|
+
"properties": {
|
|
4907
|
+
"action": {
|
|
4908
|
+
"type": "string",
|
|
4909
|
+
"enum": [
|
|
4910
|
+
"undo"
|
|
4911
|
+
]
|
|
4912
|
+
},
|
|
4913
|
+
"token": {
|
|
4914
|
+
"type": "string",
|
|
4915
|
+
"minLength": 1,
|
|
4916
|
+
"maxLength": 1500100
|
|
4917
|
+
}
|
|
4918
|
+
},
|
|
4919
|
+
"required": [
|
|
4920
|
+
"action",
|
|
4921
|
+
"token"
|
|
4922
|
+
],
|
|
4923
|
+
"additionalProperties": false
|
|
4924
|
+
},
|
|
4925
|
+
{
|
|
4926
|
+
"type": "object",
|
|
4927
|
+
"properties": {
|
|
4928
|
+
"action": {
|
|
4929
|
+
"type": "string",
|
|
4930
|
+
"enum": [
|
|
4931
|
+
"connect"
|
|
4932
|
+
]
|
|
4933
|
+
},
|
|
4934
|
+
"rooms": {
|
|
4935
|
+
"type": "array",
|
|
4936
|
+
"items": {
|
|
4937
|
+
"type": "object",
|
|
4938
|
+
"properties": {
|
|
4939
|
+
"id": {
|
|
4940
|
+
"type": "integer",
|
|
4941
|
+
"exclusiveMinimum": 0
|
|
4942
|
+
},
|
|
4943
|
+
"revision": {
|
|
4944
|
+
"type": "string",
|
|
4945
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
4946
|
+
},
|
|
4947
|
+
"geometry": {
|
|
4948
|
+
"type": "object",
|
|
4949
|
+
"additionalProperties": {}
|
|
4950
|
+
}
|
|
4951
|
+
},
|
|
4952
|
+
"required": [
|
|
4953
|
+
"id",
|
|
4954
|
+
"revision",
|
|
4955
|
+
"geometry"
|
|
4956
|
+
],
|
|
4957
|
+
"additionalProperties": false
|
|
4958
|
+
}
|
|
4959
|
+
},
|
|
4960
|
+
"links": {
|
|
4961
|
+
"type": "array",
|
|
4962
|
+
"items": {
|
|
4963
|
+
"type": "object",
|
|
4964
|
+
"properties": {
|
|
4965
|
+
"roomAId": {
|
|
4966
|
+
"type": "integer",
|
|
4967
|
+
"exclusiveMinimum": 0
|
|
4968
|
+
},
|
|
4969
|
+
"roomBId": {
|
|
4970
|
+
"type": "integer",
|
|
4971
|
+
"exclusiveMinimum": 0
|
|
4972
|
+
},
|
|
4973
|
+
"doorAIndex": {
|
|
4974
|
+
"type": "integer",
|
|
4975
|
+
"minimum": 0,
|
|
4976
|
+
"maximum": 63
|
|
4977
|
+
},
|
|
4978
|
+
"doorBIndex": {
|
|
4979
|
+
"type": "integer",
|
|
4980
|
+
"minimum": 0,
|
|
4981
|
+
"maximum": 63
|
|
4982
|
+
}
|
|
4983
|
+
},
|
|
4984
|
+
"required": [
|
|
4985
|
+
"roomAId",
|
|
4986
|
+
"roomBId",
|
|
4987
|
+
"doorAIndex",
|
|
4988
|
+
"doorBIndex"
|
|
4989
|
+
],
|
|
4990
|
+
"additionalProperties": false
|
|
4991
|
+
},
|
|
4992
|
+
"minItems": 1,
|
|
4993
|
+
"maxItems": 64
|
|
4994
|
+
}
|
|
4995
|
+
},
|
|
4996
|
+
"required": [
|
|
4997
|
+
"action",
|
|
4998
|
+
"rooms",
|
|
4999
|
+
"links"
|
|
5000
|
+
],
|
|
5001
|
+
"additionalProperties": false
|
|
5002
|
+
}
|
|
5003
|
+
]
|
|
5004
|
+
},
|
|
5005
|
+
"DoorwayEditResult": {
|
|
5006
|
+
"type": "object",
|
|
5007
|
+
"properties": {
|
|
5008
|
+
"ok": {
|
|
5009
|
+
"type": "boolean",
|
|
5010
|
+
"enum": [
|
|
5011
|
+
true
|
|
5012
|
+
]
|
|
5013
|
+
},
|
|
5014
|
+
"token": {
|
|
5015
|
+
"type": "string"
|
|
5016
|
+
},
|
|
5017
|
+
"roomIds": {
|
|
5018
|
+
"type": "array",
|
|
5019
|
+
"items": {
|
|
5020
|
+
"type": "integer"
|
|
5021
|
+
}
|
|
5022
|
+
}
|
|
5023
|
+
},
|
|
5024
|
+
"required": [
|
|
5025
|
+
"ok",
|
|
5026
|
+
"token",
|
|
5027
|
+
"roomIds"
|
|
5028
|
+
]
|
|
4797
5029
|
}
|
|
4798
5030
|
},
|
|
4799
5031
|
"parameters": {}
|
|
@@ -5709,9 +5941,6 @@
|
|
|
5709
5941
|
{
|
|
5710
5942
|
"type": "array",
|
|
5711
5943
|
"items": {}
|
|
5712
|
-
},
|
|
5713
|
-
{
|
|
5714
|
-
"type": "null"
|
|
5715
5944
|
}
|
|
5716
5945
|
]
|
|
5717
5946
|
},
|
|
@@ -5719,7 +5948,8 @@
|
|
|
5719
5948
|
"type": [
|
|
5720
5949
|
"string",
|
|
5721
5950
|
"null"
|
|
5722
|
-
]
|
|
5951
|
+
],
|
|
5952
|
+
"format": "date-time"
|
|
5723
5953
|
},
|
|
5724
5954
|
"parentContactId": {
|
|
5725
5955
|
"type": [
|
|
@@ -5881,7 +6111,8 @@
|
|
|
5881
6111
|
"type": [
|
|
5882
6112
|
"string",
|
|
5883
6113
|
"null"
|
|
5884
|
-
]
|
|
6114
|
+
],
|
|
6115
|
+
"format": "date-time"
|
|
5885
6116
|
},
|
|
5886
6117
|
"qboLastPushedHash": {
|
|
5887
6118
|
"type": [
|
|
@@ -5899,7 +6130,8 @@
|
|
|
5899
6130
|
"type": [
|
|
5900
6131
|
"string",
|
|
5901
6132
|
"null"
|
|
5902
|
-
]
|
|
6133
|
+
],
|
|
6134
|
+
"format": "date-time"
|
|
5903
6135
|
},
|
|
5904
6136
|
"deletedBy": {
|
|
5905
6137
|
"type": [
|
|
@@ -6038,9 +6270,6 @@
|
|
|
6038
6270
|
{
|
|
6039
6271
|
"type": "array",
|
|
6040
6272
|
"items": {}
|
|
6041
|
-
},
|
|
6042
|
-
{
|
|
6043
|
-
"type": "null"
|
|
6044
6273
|
}
|
|
6045
6274
|
]
|
|
6046
6275
|
},
|
|
@@ -6048,7 +6277,8 @@
|
|
|
6048
6277
|
"type": [
|
|
6049
6278
|
"string",
|
|
6050
6279
|
"null"
|
|
6051
|
-
]
|
|
6280
|
+
],
|
|
6281
|
+
"format": "date-time"
|
|
6052
6282
|
},
|
|
6053
6283
|
"parentContactId": {
|
|
6054
6284
|
"type": [
|
|
@@ -6210,7 +6440,8 @@
|
|
|
6210
6440
|
"type": [
|
|
6211
6441
|
"string",
|
|
6212
6442
|
"null"
|
|
6213
|
-
]
|
|
6443
|
+
],
|
|
6444
|
+
"format": "date-time"
|
|
6214
6445
|
},
|
|
6215
6446
|
"qboLastPushedHash": {
|
|
6216
6447
|
"type": [
|
|
@@ -6228,7 +6459,8 @@
|
|
|
6228
6459
|
"type": [
|
|
6229
6460
|
"string",
|
|
6230
6461
|
"null"
|
|
6231
|
-
]
|
|
6462
|
+
],
|
|
6463
|
+
"format": "date-time"
|
|
6232
6464
|
},
|
|
6233
6465
|
"deletedBy": {
|
|
6234
6466
|
"type": [
|
|
@@ -6328,9 +6560,6 @@
|
|
|
6328
6560
|
{
|
|
6329
6561
|
"type": "array",
|
|
6330
6562
|
"items": {}
|
|
6331
|
-
},
|
|
6332
|
-
{
|
|
6333
|
-
"type": "null"
|
|
6334
6563
|
}
|
|
6335
6564
|
]
|
|
6336
6565
|
},
|
|
@@ -6338,7 +6567,8 @@
|
|
|
6338
6567
|
"type": [
|
|
6339
6568
|
"string",
|
|
6340
6569
|
"null"
|
|
6341
|
-
]
|
|
6570
|
+
],
|
|
6571
|
+
"format": "date-time"
|
|
6342
6572
|
},
|
|
6343
6573
|
"parentContactId": {
|
|
6344
6574
|
"type": [
|
|
@@ -6500,7 +6730,8 @@
|
|
|
6500
6730
|
"type": [
|
|
6501
6731
|
"string",
|
|
6502
6732
|
"null"
|
|
6503
|
-
]
|
|
6733
|
+
],
|
|
6734
|
+
"format": "date-time"
|
|
6504
6735
|
},
|
|
6505
6736
|
"qboLastPushedHash": {
|
|
6506
6737
|
"type": [
|
|
@@ -6518,7 +6749,8 @@
|
|
|
6518
6749
|
"type": [
|
|
6519
6750
|
"string",
|
|
6520
6751
|
"null"
|
|
6521
|
-
]
|
|
6752
|
+
],
|
|
6753
|
+
"format": "date-time"
|
|
6522
6754
|
},
|
|
6523
6755
|
"deletedBy": {
|
|
6524
6756
|
"type": [
|
|
@@ -6764,6 +6996,11 @@
|
|
|
6764
6996
|
"type": "number",
|
|
6765
6997
|
"exclusiveMinimum": 0
|
|
6766
6998
|
},
|
|
6999
|
+
"sillHeightM": {
|
|
7000
|
+
"type": "number",
|
|
7001
|
+
"minimum": 0,
|
|
7002
|
+
"maximum": 50
|
|
7003
|
+
},
|
|
6767
7004
|
"hostWallIndex": {
|
|
6768
7005
|
"type": [
|
|
6769
7006
|
"integer",
|
|
@@ -6846,6 +7083,11 @@
|
|
|
6846
7083
|
"type": "number",
|
|
6847
7084
|
"exclusiveMinimum": 0
|
|
6848
7085
|
},
|
|
7086
|
+
"sillHeightM": {
|
|
7087
|
+
"type": "number",
|
|
7088
|
+
"minimum": 0,
|
|
7089
|
+
"maximum": 50
|
|
7090
|
+
},
|
|
6849
7091
|
"hostWallIndex": {
|
|
6850
7092
|
"type": [
|
|
6851
7093
|
"integer",
|
|
@@ -6909,6 +7151,11 @@
|
|
|
6909
7151
|
"type": "number",
|
|
6910
7152
|
"exclusiveMinimum": 0
|
|
6911
7153
|
},
|
|
7154
|
+
"sillHeightM": {
|
|
7155
|
+
"type": "number",
|
|
7156
|
+
"minimum": 0,
|
|
7157
|
+
"maximum": 50
|
|
7158
|
+
},
|
|
6912
7159
|
"hostWallIndex": {
|
|
6913
7160
|
"type": [
|
|
6914
7161
|
"integer",
|
|
@@ -7153,6 +7400,11 @@
|
|
|
7153
7400
|
"type": "number",
|
|
7154
7401
|
"exclusiveMinimum": 0
|
|
7155
7402
|
},
|
|
7403
|
+
"sillHeightM": {
|
|
7404
|
+
"type": "number",
|
|
7405
|
+
"minimum": 0,
|
|
7406
|
+
"maximum": 50
|
|
7407
|
+
},
|
|
7156
7408
|
"hostWallIndex": {
|
|
7157
7409
|
"type": [
|
|
7158
7410
|
"integer",
|
|
@@ -7235,6 +7487,11 @@
|
|
|
7235
7487
|
"type": "number",
|
|
7236
7488
|
"exclusiveMinimum": 0
|
|
7237
7489
|
},
|
|
7490
|
+
"sillHeightM": {
|
|
7491
|
+
"type": "number",
|
|
7492
|
+
"minimum": 0,
|
|
7493
|
+
"maximum": 50
|
|
7494
|
+
},
|
|
7238
7495
|
"hostWallIndex": {
|
|
7239
7496
|
"type": [
|
|
7240
7497
|
"integer",
|
|
@@ -7298,6 +7555,11 @@
|
|
|
7298
7555
|
"type": "number",
|
|
7299
7556
|
"exclusiveMinimum": 0
|
|
7300
7557
|
},
|
|
7558
|
+
"sillHeightM": {
|
|
7559
|
+
"type": "number",
|
|
7560
|
+
"minimum": 0,
|
|
7561
|
+
"maximum": 50
|
|
7562
|
+
},
|
|
7301
7563
|
"hostWallIndex": {
|
|
7302
7564
|
"type": [
|
|
7303
7565
|
"integer",
|
|
@@ -8313,7 +8575,8 @@
|
|
|
8313
8575
|
"enum": [
|
|
8314
8576
|
"ios",
|
|
8315
8577
|
"web",
|
|
8316
|
-
"android"
|
|
8578
|
+
"android",
|
|
8579
|
+
null
|
|
8317
8580
|
]
|
|
8318
8581
|
},
|
|
8319
8582
|
"occurredAt": {
|
|
@@ -8517,7 +8780,8 @@
|
|
|
8517
8780
|
"enum": [
|
|
8518
8781
|
"ios",
|
|
8519
8782
|
"web",
|
|
8520
|
-
"android"
|
|
8783
|
+
"android",
|
|
8784
|
+
null
|
|
8521
8785
|
]
|
|
8522
8786
|
},
|
|
8523
8787
|
"occurredAt": {
|
|
@@ -9276,7 +9540,8 @@
|
|
|
9276
9540
|
"enum": [
|
|
9277
9541
|
"ios",
|
|
9278
9542
|
"web",
|
|
9279
|
-
"android"
|
|
9543
|
+
"android",
|
|
9544
|
+
null
|
|
9280
9545
|
]
|
|
9281
9546
|
},
|
|
9282
9547
|
"canConfirmAway": {
|
|
@@ -9519,7 +9784,8 @@
|
|
|
9519
9784
|
"enum": [
|
|
9520
9785
|
"ios",
|
|
9521
9786
|
"web",
|
|
9522
|
-
"android"
|
|
9787
|
+
"android",
|
|
9788
|
+
null
|
|
9523
9789
|
]
|
|
9524
9790
|
},
|
|
9525
9791
|
"tapElapsedMs": {
|
|
@@ -9991,7 +10257,8 @@
|
|
|
9991
10257
|
"enum": [
|
|
9992
10258
|
"ios",
|
|
9993
10259
|
"web",
|
|
9994
|
-
"android"
|
|
10260
|
+
"android",
|
|
10261
|
+
null
|
|
9995
10262
|
]
|
|
9996
10263
|
}
|
|
9997
10264
|
},
|
|
@@ -10189,7 +10456,8 @@
|
|
|
10189
10456
|
"enum": [
|
|
10190
10457
|
"ios",
|
|
10191
10458
|
"web",
|
|
10192
|
-
"android"
|
|
10459
|
+
"android",
|
|
10460
|
+
null
|
|
10193
10461
|
]
|
|
10194
10462
|
}
|
|
10195
10463
|
},
|
|
@@ -10740,6 +11008,148 @@
|
|
|
10740
11008
|
}
|
|
10741
11009
|
}
|
|
10742
11010
|
}
|
|
11011
|
+
},
|
|
11012
|
+
"/api/sketches/{sketchId}/doorway-edits": {
|
|
11013
|
+
"post": {
|
|
11014
|
+
"tags": [
|
|
11015
|
+
"lidar"
|
|
11016
|
+
],
|
|
11017
|
+
"summary": "Save a confirmed shared-doorway edit atomically, or undo it.",
|
|
11018
|
+
"description": "Requires authenticated organization and job access. Delete removes both linked openings and only their doorway connection. Undo receipts are user/scope-bound, expire after eight hours, and reject intervening geometry or connection changes. Connect is supported for sketches only. Room reads provide openingId and openingRevision; existing records are not backfilled.",
|
|
11019
|
+
"parameters": [
|
|
11020
|
+
{
|
|
11021
|
+
"name": "sketchId",
|
|
11022
|
+
"in": "path",
|
|
11023
|
+
"required": true,
|
|
11024
|
+
"schema": {
|
|
11025
|
+
"type": "integer",
|
|
11026
|
+
"minimum": 1
|
|
11027
|
+
}
|
|
11028
|
+
}
|
|
11029
|
+
],
|
|
11030
|
+
"requestBody": {
|
|
11031
|
+
"required": true,
|
|
11032
|
+
"content": {
|
|
11033
|
+
"application/json": {
|
|
11034
|
+
"schema": {
|
|
11035
|
+
"$ref": "#/components/schemas/DoorwayEditCommand"
|
|
11036
|
+
}
|
|
11037
|
+
}
|
|
11038
|
+
}
|
|
11039
|
+
},
|
|
11040
|
+
"responses": {
|
|
11041
|
+
"200": {
|
|
11042
|
+
"description": "Committed both rooms and their connection changes; token reverses this action.",
|
|
11043
|
+
"content": {
|
|
11044
|
+
"application/json": {
|
|
11045
|
+
"schema": {
|
|
11046
|
+
"$ref": "#/components/schemas/DoorwayEditResult"
|
|
11047
|
+
}
|
|
11048
|
+
}
|
|
11049
|
+
}
|
|
11050
|
+
},
|
|
11051
|
+
"400": {
|
|
11052
|
+
"description": "Invalid command or missing explicit confirmation.",
|
|
11053
|
+
"content": {
|
|
11054
|
+
"application/json": {
|
|
11055
|
+
"schema": {
|
|
11056
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
11057
|
+
}
|
|
11058
|
+
}
|
|
11059
|
+
}
|
|
11060
|
+
},
|
|
11061
|
+
"401": {
|
|
11062
|
+
"description": "Authentication required."
|
|
11063
|
+
},
|
|
11064
|
+
"403": {
|
|
11065
|
+
"description": "Job access denied."
|
|
11066
|
+
},
|
|
11067
|
+
"404": {
|
|
11068
|
+
"description": "Scope not found in the organization."
|
|
11069
|
+
},
|
|
11070
|
+
"409": {
|
|
11071
|
+
"description": "Stale or ambiguous opening identity, or undo would overwrite newer work.",
|
|
11072
|
+
"content": {
|
|
11073
|
+
"application/json": {
|
|
11074
|
+
"schema": {
|
|
11075
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
11076
|
+
}
|
|
11077
|
+
}
|
|
11078
|
+
}
|
|
11079
|
+
}
|
|
11080
|
+
}
|
|
11081
|
+
}
|
|
11082
|
+
},
|
|
11083
|
+
"/api/floors/{floorId}/doorway-edits": {
|
|
11084
|
+
"post": {
|
|
11085
|
+
"tags": [
|
|
11086
|
+
"lidar"
|
|
11087
|
+
],
|
|
11088
|
+
"summary": "Save a confirmed shared-doorway edit atomically, or undo it.",
|
|
11089
|
+
"description": "Requires authenticated organization and job access. Delete removes both linked openings and only their doorway connection. Undo receipts are user/scope-bound, expire after eight hours, and reject intervening geometry or connection changes. Connect is supported for sketches only. Room reads provide openingId and openingRevision; existing records are not backfilled.",
|
|
11090
|
+
"parameters": [
|
|
11091
|
+
{
|
|
11092
|
+
"name": "floorId",
|
|
11093
|
+
"in": "path",
|
|
11094
|
+
"required": true,
|
|
11095
|
+
"schema": {
|
|
11096
|
+
"type": "integer",
|
|
11097
|
+
"minimum": 1
|
|
11098
|
+
}
|
|
11099
|
+
}
|
|
11100
|
+
],
|
|
11101
|
+
"requestBody": {
|
|
11102
|
+
"required": true,
|
|
11103
|
+
"content": {
|
|
11104
|
+
"application/json": {
|
|
11105
|
+
"schema": {
|
|
11106
|
+
"$ref": "#/components/schemas/DoorwayEditCommand"
|
|
11107
|
+
}
|
|
11108
|
+
}
|
|
11109
|
+
}
|
|
11110
|
+
},
|
|
11111
|
+
"responses": {
|
|
11112
|
+
"200": {
|
|
11113
|
+
"description": "Committed both rooms and their connection changes; token reverses this action.",
|
|
11114
|
+
"content": {
|
|
11115
|
+
"application/json": {
|
|
11116
|
+
"schema": {
|
|
11117
|
+
"$ref": "#/components/schemas/DoorwayEditResult"
|
|
11118
|
+
}
|
|
11119
|
+
}
|
|
11120
|
+
}
|
|
11121
|
+
},
|
|
11122
|
+
"400": {
|
|
11123
|
+
"description": "Invalid command or missing explicit confirmation.",
|
|
11124
|
+
"content": {
|
|
11125
|
+
"application/json": {
|
|
11126
|
+
"schema": {
|
|
11127
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
11128
|
+
}
|
|
11129
|
+
}
|
|
11130
|
+
}
|
|
11131
|
+
},
|
|
11132
|
+
"401": {
|
|
11133
|
+
"description": "Authentication required."
|
|
11134
|
+
},
|
|
11135
|
+
"403": {
|
|
11136
|
+
"description": "Job access denied."
|
|
11137
|
+
},
|
|
11138
|
+
"404": {
|
|
11139
|
+
"description": "Scope not found in the organization."
|
|
11140
|
+
},
|
|
11141
|
+
"409": {
|
|
11142
|
+
"description": "Stale or ambiguous opening identity, or undo would overwrite newer work.",
|
|
11143
|
+
"content": {
|
|
11144
|
+
"application/json": {
|
|
11145
|
+
"schema": {
|
|
11146
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
11147
|
+
}
|
|
11148
|
+
}
|
|
11149
|
+
}
|
|
11150
|
+
}
|
|
11151
|
+
}
|
|
11152
|
+
}
|
|
10743
11153
|
}
|
|
10744
11154
|
},
|
|
10745
11155
|
"webhooks": {}
|