@serviceai/api-spec 1.2.433 → 1.6.1
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 +2415 -141
- package/openapi.yaml +1837 -172
- package/package.json +1 -1
- package/types.d.ts +1033 -68
package/types.d.ts
CHANGED
|
@@ -129,6 +129,238 @@ export interface paths {
|
|
|
129
129
|
patch?: never;
|
|
130
130
|
trace?: never;
|
|
131
131
|
};
|
|
132
|
+
"/api/impersonate/native-read-ticket": {
|
|
133
|
+
parameters: {
|
|
134
|
+
query?: never;
|
|
135
|
+
header?: never;
|
|
136
|
+
path?: never;
|
|
137
|
+
cookie?: never;
|
|
138
|
+
};
|
|
139
|
+
get?: never;
|
|
140
|
+
put?: never;
|
|
141
|
+
/**
|
|
142
|
+
* Authorize an exact browser-native download URL for the current support session.
|
|
143
|
+
* @description Requires the current typed support session and X-Support-Impersonation: 1. A narrow fixed GET allowlist only; record permissions still run on every GET. Admission lasts at most 15 minutes and never outlives the original one-hour support grant. The same browser session is required; URL alone is insufficient. GET/Range retries recheck current authority. Response is no-store with no-referrer. No user bearer is issued.
|
|
144
|
+
*/
|
|
145
|
+
post: {
|
|
146
|
+
parameters: {
|
|
147
|
+
query?: never;
|
|
148
|
+
header: {
|
|
149
|
+
"X-Support-Impersonation": "1";
|
|
150
|
+
};
|
|
151
|
+
path?: never;
|
|
152
|
+
cookie?: never;
|
|
153
|
+
};
|
|
154
|
+
requestBody: {
|
|
155
|
+
content: {
|
|
156
|
+
"application/json": {
|
|
157
|
+
url: string;
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
responses: {
|
|
162
|
+
/** @description Exact relative URL and terminal admission deadline. */
|
|
163
|
+
200: {
|
|
164
|
+
headers: {
|
|
165
|
+
[name: string]: unknown;
|
|
166
|
+
};
|
|
167
|
+
content: {
|
|
168
|
+
"application/json": {
|
|
169
|
+
url: string;
|
|
170
|
+
expiresAt: number;
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
/** @description Unsupported destination or malformed request. */
|
|
175
|
+
400: {
|
|
176
|
+
headers: {
|
|
177
|
+
[name: string]: unknown;
|
|
178
|
+
};
|
|
179
|
+
content?: never;
|
|
180
|
+
};
|
|
181
|
+
/** @description No authenticated session. */
|
|
182
|
+
401: {
|
|
183
|
+
headers: {
|
|
184
|
+
[name: string]: unknown;
|
|
185
|
+
};
|
|
186
|
+
content?: never;
|
|
187
|
+
};
|
|
188
|
+
/** @description Support authority unavailable; explicit exit required. */
|
|
189
|
+
403: {
|
|
190
|
+
headers: {
|
|
191
|
+
[name: string]: unknown;
|
|
192
|
+
};
|
|
193
|
+
content: {
|
|
194
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
/** @description Authentication lookup temporarily unavailable. */
|
|
198
|
+
503: {
|
|
199
|
+
headers: {
|
|
200
|
+
[name: string]: unknown;
|
|
201
|
+
};
|
|
202
|
+
content: {
|
|
203
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
delete?: never;
|
|
209
|
+
options?: never;
|
|
210
|
+
head?: never;
|
|
211
|
+
patch?: never;
|
|
212
|
+
trace?: never;
|
|
213
|
+
};
|
|
214
|
+
"/api/events/ticket": {
|
|
215
|
+
parameters: {
|
|
216
|
+
query?: never;
|
|
217
|
+
header?: never;
|
|
218
|
+
path?: never;
|
|
219
|
+
cookie?: never;
|
|
220
|
+
};
|
|
221
|
+
get?: never;
|
|
222
|
+
put?: never;
|
|
223
|
+
/**
|
|
224
|
+
* Create a short-lived stream-only admission ticket from the current authenticated actor.
|
|
225
|
+
* @description Connect within at most 60 seconds using GET /api/events?ticket=.... The ticket preserves the real principal, effective target and original login/impersonation deadlines; it cannot authenticate ordinary API requests. It is never a target-user bearer token. Response Cache-Control is no-store. An invalid temporary context returns 403 and must be explicitly exited, without dropping the real login.
|
|
226
|
+
*/
|
|
227
|
+
post: {
|
|
228
|
+
parameters: {
|
|
229
|
+
query?: never;
|
|
230
|
+
header?: never;
|
|
231
|
+
path?: never;
|
|
232
|
+
cookie?: never;
|
|
233
|
+
};
|
|
234
|
+
requestBody?: {
|
|
235
|
+
content: {
|
|
236
|
+
"application/json": Record<string, never>;
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
responses: {
|
|
240
|
+
/** @description Opaque ticket, usable only for short-lived stream admission. */
|
|
241
|
+
200: {
|
|
242
|
+
headers: {
|
|
243
|
+
[name: string]: unknown;
|
|
244
|
+
};
|
|
245
|
+
content: {
|
|
246
|
+
"application/json": components["schemas"]["EventStreamTicketResponse"];
|
|
247
|
+
};
|
|
248
|
+
};
|
|
249
|
+
/** @description Unexpected request fields. */
|
|
250
|
+
400: {
|
|
251
|
+
headers: {
|
|
252
|
+
[name: string]: unknown;
|
|
253
|
+
};
|
|
254
|
+
content: {
|
|
255
|
+
"application/json": {
|
|
256
|
+
message: string;
|
|
257
|
+
errors: unknown[];
|
|
258
|
+
};
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
/** @description Real principal is missing, deleted, revoked or expired. */
|
|
262
|
+
401: {
|
|
263
|
+
headers: {
|
|
264
|
+
[name: string]: unknown;
|
|
265
|
+
};
|
|
266
|
+
content: {
|
|
267
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
268
|
+
};
|
|
269
|
+
};
|
|
270
|
+
/** @description Impersonation is unavailable; explicitly exit before continuing as the real principal. */
|
|
271
|
+
403: {
|
|
272
|
+
headers: {
|
|
273
|
+
[name: string]: unknown;
|
|
274
|
+
};
|
|
275
|
+
content: {
|
|
276
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
277
|
+
};
|
|
278
|
+
};
|
|
279
|
+
/** @description Authentication lookup unavailable; retry without discarding credentials. */
|
|
280
|
+
503: {
|
|
281
|
+
headers: {
|
|
282
|
+
[name: string]: unknown;
|
|
283
|
+
};
|
|
284
|
+
content: {
|
|
285
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
};
|
|
290
|
+
delete?: never;
|
|
291
|
+
options?: never;
|
|
292
|
+
head?: never;
|
|
293
|
+
patch?: never;
|
|
294
|
+
trace?: never;
|
|
295
|
+
};
|
|
296
|
+
"/api/events": {
|
|
297
|
+
parameters: {
|
|
298
|
+
query?: never;
|
|
299
|
+
header?: never;
|
|
300
|
+
path?: never;
|
|
301
|
+
cookie?: never;
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* Open the authenticated server-sent event stream.
|
|
305
|
+
* @description New clients use a stream-only ticket in the ticket query parameter. Legacy authenticated connections remain supported. A supplied invalid ticket never falls back to another credential. Current user, session and revocation state is rechecked before admission and each delivery batch/heartbeat. Original authority deadlines also close idle or blocked sockets. A stream:resync hint means refresh authorized snapshots; this stream is not a replay log.
|
|
306
|
+
*/
|
|
307
|
+
get: {
|
|
308
|
+
parameters: {
|
|
309
|
+
query?: {
|
|
310
|
+
ticket?: string;
|
|
311
|
+
};
|
|
312
|
+
header?: never;
|
|
313
|
+
path?: never;
|
|
314
|
+
cookie?: never;
|
|
315
|
+
};
|
|
316
|
+
requestBody?: never;
|
|
317
|
+
responses: {
|
|
318
|
+
/** @description Bounded SSE hints and heartbeat comments until disconnect or authority expiry. */
|
|
319
|
+
200: {
|
|
320
|
+
headers: {
|
|
321
|
+
[name: string]: unknown;
|
|
322
|
+
};
|
|
323
|
+
content: {
|
|
324
|
+
"text/event-stream": string;
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
/** @description Ticket/source authentication expired, revoked or invalid. */
|
|
328
|
+
401: {
|
|
329
|
+
headers: {
|
|
330
|
+
[name: string]: unknown;
|
|
331
|
+
};
|
|
332
|
+
content: {
|
|
333
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
334
|
+
};
|
|
335
|
+
};
|
|
336
|
+
/** @description Legacy temporary context is unavailable. */
|
|
337
|
+
403: {
|
|
338
|
+
headers: {
|
|
339
|
+
[name: string]: unknown;
|
|
340
|
+
};
|
|
341
|
+
content: {
|
|
342
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
343
|
+
};
|
|
344
|
+
};
|
|
345
|
+
/** @description Authorization temporarily unavailable; retry with backoff. */
|
|
346
|
+
503: {
|
|
347
|
+
headers: {
|
|
348
|
+
[name: string]: unknown;
|
|
349
|
+
};
|
|
350
|
+
content: {
|
|
351
|
+
"application/json": components["schemas"]["StreamAuthenticationError"];
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
};
|
|
355
|
+
};
|
|
356
|
+
put?: never;
|
|
357
|
+
post?: never;
|
|
358
|
+
delete?: never;
|
|
359
|
+
options?: never;
|
|
360
|
+
head?: never;
|
|
361
|
+
patch?: never;
|
|
362
|
+
trace?: never;
|
|
363
|
+
};
|
|
132
364
|
"/api/jobs/{jobId}/scans/mobile-upload": {
|
|
133
365
|
parameters: {
|
|
134
366
|
query?: never;
|
|
@@ -746,6 +978,7 @@ export interface paths {
|
|
|
746
978
|
customFields?: string | number | boolean | null | {
|
|
747
979
|
[key: string]: unknown;
|
|
748
980
|
} | unknown[];
|
|
981
|
+
/** Format: date-time */
|
|
749
982
|
lastContactDate?: string | null;
|
|
750
983
|
parentContactId?: number | null;
|
|
751
984
|
relationship?: string | null;
|
|
@@ -771,9 +1004,11 @@ export interface paths {
|
|
|
771
1004
|
cachedLng?: number | null;
|
|
772
1005
|
qboId?: string | null;
|
|
773
1006
|
qboSyncToken?: string | null;
|
|
1007
|
+
/** Format: date-time */
|
|
774
1008
|
qboLastPushedAt?: string | null;
|
|
775
1009
|
qboLastPushedHash?: string | null;
|
|
776
1010
|
qboLastError?: string | null;
|
|
1011
|
+
/** Format: date-time */
|
|
777
1012
|
deletedAt?: string | null;
|
|
778
1013
|
deletedBy?: string | null;
|
|
779
1014
|
} & {
|
|
@@ -819,6 +1054,7 @@ export interface paths {
|
|
|
819
1054
|
customFields?: string | number | boolean | null | {
|
|
820
1055
|
[key: string]: unknown;
|
|
821
1056
|
} | unknown[];
|
|
1057
|
+
/** Format: date-time */
|
|
822
1058
|
lastContactDate?: string | null;
|
|
823
1059
|
parentContactId?: number | null;
|
|
824
1060
|
relationship?: string | null;
|
|
@@ -844,9 +1080,11 @@ export interface paths {
|
|
|
844
1080
|
cachedLng?: number | null;
|
|
845
1081
|
qboId?: string | null;
|
|
846
1082
|
qboSyncToken?: string | null;
|
|
1083
|
+
/** Format: date-time */
|
|
847
1084
|
qboLastPushedAt?: string | null;
|
|
848
1085
|
qboLastPushedHash?: string | null;
|
|
849
1086
|
qboLastError?: string | null;
|
|
1087
|
+
/** Format: date-time */
|
|
850
1088
|
deletedAt?: string | null;
|
|
851
1089
|
deletedBy?: string | null;
|
|
852
1090
|
};
|
|
@@ -872,6 +1110,7 @@ export interface paths {
|
|
|
872
1110
|
customFields?: string | number | boolean | null | {
|
|
873
1111
|
[key: string]: unknown;
|
|
874
1112
|
} | unknown[];
|
|
1113
|
+
/** Format: date-time */
|
|
875
1114
|
lastContactDate?: string | null;
|
|
876
1115
|
parentContactId?: number | null;
|
|
877
1116
|
relationship?: string | null;
|
|
@@ -897,9 +1136,11 @@ export interface paths {
|
|
|
897
1136
|
cachedLng?: number | null;
|
|
898
1137
|
qboId?: string | null;
|
|
899
1138
|
qboSyncToken?: string | null;
|
|
1139
|
+
/** Format: date-time */
|
|
900
1140
|
qboLastPushedAt?: string | null;
|
|
901
1141
|
qboLastPushedHash?: string | null;
|
|
902
1142
|
qboLastError?: string | null;
|
|
1143
|
+
/** Format: date-time */
|
|
903
1144
|
deletedAt?: string | null;
|
|
904
1145
|
deletedBy?: string | null;
|
|
905
1146
|
} & {
|
|
@@ -1073,6 +1314,7 @@ export interface paths {
|
|
|
1073
1314
|
};
|
|
1074
1315
|
width: number;
|
|
1075
1316
|
height: number;
|
|
1317
|
+
sillHeightM?: number;
|
|
1076
1318
|
hostWallIndex?: number | null;
|
|
1077
1319
|
wallIndex?: number;
|
|
1078
1320
|
/** @enum {string} */
|
|
@@ -1095,6 +1337,7 @@ export interface paths {
|
|
|
1095
1337
|
};
|
|
1096
1338
|
width: number;
|
|
1097
1339
|
height: number;
|
|
1340
|
+
sillHeightM?: number;
|
|
1098
1341
|
hostWallIndex?: number | null;
|
|
1099
1342
|
wallIndex?: number;
|
|
1100
1343
|
/** @enum {string} */
|
|
@@ -1110,6 +1353,7 @@ export interface paths {
|
|
|
1110
1353
|
};
|
|
1111
1354
|
width: number;
|
|
1112
1355
|
height: number;
|
|
1356
|
+
sillHeightM?: number;
|
|
1113
1357
|
hostWallIndex?: number | null;
|
|
1114
1358
|
wallIndex?: number;
|
|
1115
1359
|
/** @enum {string} */
|
|
@@ -1211,6 +1455,7 @@ export interface paths {
|
|
|
1211
1455
|
};
|
|
1212
1456
|
width: number;
|
|
1213
1457
|
height: number;
|
|
1458
|
+
sillHeightM?: number;
|
|
1214
1459
|
hostWallIndex?: number | null;
|
|
1215
1460
|
wallIndex?: number;
|
|
1216
1461
|
/** @enum {string} */
|
|
@@ -1233,6 +1478,7 @@ export interface paths {
|
|
|
1233
1478
|
};
|
|
1234
1479
|
width: number;
|
|
1235
1480
|
height: number;
|
|
1481
|
+
sillHeightM?: number;
|
|
1236
1482
|
hostWallIndex?: number | null;
|
|
1237
1483
|
wallIndex?: number;
|
|
1238
1484
|
/** @enum {string} */
|
|
@@ -1248,6 +1494,7 @@ export interface paths {
|
|
|
1248
1494
|
};
|
|
1249
1495
|
width: number;
|
|
1250
1496
|
height: number;
|
|
1497
|
+
sillHeightM?: number;
|
|
1251
1498
|
hostWallIndex?: number | null;
|
|
1252
1499
|
wallIndex?: number;
|
|
1253
1500
|
/** @enum {string} */
|
|
@@ -3649,65 +3896,407 @@ export interface paths {
|
|
|
3649
3896
|
patch?: never;
|
|
3650
3897
|
trace?: never;
|
|
3651
3898
|
};
|
|
3652
|
-
}
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
/** @example validation_failed */
|
|
3659
|
-
error: string;
|
|
3660
|
-
/** @example roomPlanJSON is required */
|
|
3661
|
-
message: string;
|
|
3662
|
-
details?: unknown;
|
|
3663
|
-
};
|
|
3664
|
-
/** @description Returned with HTTP 426 when the X-Client-Version major is below minClientVersion. */
|
|
3665
|
-
UpgradeRequiredEnvelope: {
|
|
3666
|
-
/** @enum {string} */
|
|
3667
|
-
error: "upgrade_required";
|
|
3668
|
-
message: string;
|
|
3669
|
-
apiVersion: string;
|
|
3670
|
-
minClientVersion: string;
|
|
3671
|
-
deprecatedBelow: string;
|
|
3672
|
-
clientVersion: string;
|
|
3673
|
-
};
|
|
3674
|
-
/** @description Cross-platform version handshake manifest. See docs/api-versioning.md. */
|
|
3675
|
-
VersionManifest: {
|
|
3676
|
-
/** @example 1.2.433 */
|
|
3677
|
-
apiVersion: string;
|
|
3678
|
-
/** @example 1.0.0 */
|
|
3679
|
-
minClientVersion: string;
|
|
3680
|
-
/** @example 1.0.0 */
|
|
3681
|
-
deprecatedBelow: string;
|
|
3682
|
-
/** @description Legacy alias for apiVersion. */
|
|
3683
|
-
version: string;
|
|
3684
|
-
buildTime: string;
|
|
3685
|
-
env?: string | null;
|
|
3686
|
-
gitCommit: string;
|
|
3899
|
+
"/api/sketches/{sketchId}/doorway-edits": {
|
|
3900
|
+
parameters: {
|
|
3901
|
+
query?: never;
|
|
3902
|
+
header?: never;
|
|
3903
|
+
path?: never;
|
|
3904
|
+
cookie?: never;
|
|
3687
3905
|
};
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3906
|
+
get?: never;
|
|
3907
|
+
put?: never;
|
|
3908
|
+
/**
|
|
3909
|
+
* Save a confirmed shared-doorway edit atomically, or undo it.
|
|
3910
|
+
* @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.
|
|
3911
|
+
*/
|
|
3912
|
+
post: {
|
|
3913
|
+
parameters: {
|
|
3914
|
+
query?: never;
|
|
3915
|
+
header?: never;
|
|
3916
|
+
path: {
|
|
3917
|
+
sketchId: number;
|
|
3918
|
+
};
|
|
3919
|
+
cookie?: never;
|
|
3920
|
+
};
|
|
3921
|
+
requestBody: {
|
|
3922
|
+
content: {
|
|
3923
|
+
"application/json": components["schemas"]["DoorwayEditCommand"];
|
|
3924
|
+
};
|
|
3925
|
+
};
|
|
3926
|
+
responses: {
|
|
3927
|
+
/** @description Committed both rooms and their connection changes; token reverses this action. */
|
|
3928
|
+
200: {
|
|
3929
|
+
headers: {
|
|
3930
|
+
[name: string]: unknown;
|
|
3931
|
+
};
|
|
3932
|
+
content: {
|
|
3933
|
+
"application/json": components["schemas"]["DoorwayEditResult"];
|
|
3934
|
+
};
|
|
3935
|
+
};
|
|
3936
|
+
/** @description Invalid command or missing explicit confirmation. */
|
|
3937
|
+
400: {
|
|
3938
|
+
headers: {
|
|
3939
|
+
[name: string]: unknown;
|
|
3940
|
+
};
|
|
3941
|
+
content: {
|
|
3942
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
3943
|
+
};
|
|
3944
|
+
};
|
|
3945
|
+
/** @description Authentication required. */
|
|
3946
|
+
401: {
|
|
3947
|
+
headers: {
|
|
3948
|
+
[name: string]: unknown;
|
|
3949
|
+
};
|
|
3950
|
+
content?: never;
|
|
3951
|
+
};
|
|
3952
|
+
/** @description Job access denied. */
|
|
3953
|
+
403: {
|
|
3954
|
+
headers: {
|
|
3955
|
+
[name: string]: unknown;
|
|
3956
|
+
};
|
|
3957
|
+
content?: never;
|
|
3958
|
+
};
|
|
3959
|
+
/** @description Scope not found in the organization. */
|
|
3960
|
+
404: {
|
|
3961
|
+
headers: {
|
|
3962
|
+
[name: string]: unknown;
|
|
3963
|
+
};
|
|
3964
|
+
content?: never;
|
|
3965
|
+
};
|
|
3966
|
+
/** @description Stale or ambiguous opening identity, or undo would overwrite newer work. */
|
|
3967
|
+
409: {
|
|
3968
|
+
headers: {
|
|
3969
|
+
[name: string]: unknown;
|
|
3970
|
+
};
|
|
3971
|
+
content: {
|
|
3972
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
3973
|
+
};
|
|
3974
|
+
};
|
|
3975
|
+
};
|
|
3976
|
+
};
|
|
3977
|
+
delete?: never;
|
|
3978
|
+
options?: never;
|
|
3979
|
+
head?: never;
|
|
3980
|
+
patch?: never;
|
|
3981
|
+
trace?: never;
|
|
3982
|
+
};
|
|
3983
|
+
"/api/floors/{floorId}/doorway-edits": {
|
|
3984
|
+
parameters: {
|
|
3985
|
+
query?: never;
|
|
3986
|
+
header?: never;
|
|
3987
|
+
path?: never;
|
|
3988
|
+
cookie?: never;
|
|
3989
|
+
};
|
|
3990
|
+
get?: never;
|
|
3991
|
+
put?: never;
|
|
3992
|
+
/**
|
|
3993
|
+
* Save a confirmed shared-doorway edit atomically, or undo it.
|
|
3994
|
+
* @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.
|
|
3995
|
+
*/
|
|
3996
|
+
post: {
|
|
3997
|
+
parameters: {
|
|
3998
|
+
query?: never;
|
|
3999
|
+
header?: never;
|
|
4000
|
+
path: {
|
|
4001
|
+
floorId: number;
|
|
4002
|
+
};
|
|
4003
|
+
cookie?: never;
|
|
4004
|
+
};
|
|
4005
|
+
requestBody: {
|
|
4006
|
+
content: {
|
|
4007
|
+
"application/json": components["schemas"]["DoorwayEditCommand"];
|
|
4008
|
+
};
|
|
4009
|
+
};
|
|
4010
|
+
responses: {
|
|
4011
|
+
/** @description Committed both rooms and their connection changes; token reverses this action. */
|
|
4012
|
+
200: {
|
|
4013
|
+
headers: {
|
|
4014
|
+
[name: string]: unknown;
|
|
4015
|
+
};
|
|
4016
|
+
content: {
|
|
4017
|
+
"application/json": components["schemas"]["DoorwayEditResult"];
|
|
4018
|
+
};
|
|
4019
|
+
};
|
|
4020
|
+
/** @description Invalid command or missing explicit confirmation. */
|
|
4021
|
+
400: {
|
|
4022
|
+
headers: {
|
|
4023
|
+
[name: string]: unknown;
|
|
4024
|
+
};
|
|
4025
|
+
content: {
|
|
4026
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4027
|
+
};
|
|
4028
|
+
};
|
|
4029
|
+
/** @description Authentication required. */
|
|
4030
|
+
401: {
|
|
4031
|
+
headers: {
|
|
4032
|
+
[name: string]: unknown;
|
|
4033
|
+
};
|
|
4034
|
+
content?: never;
|
|
4035
|
+
};
|
|
4036
|
+
/** @description Job access denied. */
|
|
4037
|
+
403: {
|
|
4038
|
+
headers: {
|
|
4039
|
+
[name: string]: unknown;
|
|
4040
|
+
};
|
|
4041
|
+
content?: never;
|
|
4042
|
+
};
|
|
4043
|
+
/** @description Scope not found in the organization. */
|
|
4044
|
+
404: {
|
|
4045
|
+
headers: {
|
|
4046
|
+
[name: string]: unknown;
|
|
4047
|
+
};
|
|
4048
|
+
content?: never;
|
|
4049
|
+
};
|
|
4050
|
+
/** @description Stale or ambiguous opening identity, or undo would overwrite newer work. */
|
|
4051
|
+
409: {
|
|
4052
|
+
headers: {
|
|
4053
|
+
[name: string]: unknown;
|
|
4054
|
+
};
|
|
4055
|
+
content: {
|
|
4056
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4057
|
+
};
|
|
4058
|
+
};
|
|
4059
|
+
};
|
|
4060
|
+
};
|
|
4061
|
+
delete?: never;
|
|
4062
|
+
options?: never;
|
|
4063
|
+
head?: never;
|
|
4064
|
+
patch?: never;
|
|
4065
|
+
trace?: never;
|
|
4066
|
+
};
|
|
4067
|
+
"/api/projects/{projectId}/documents/draft-from-walkthrough": {
|
|
4068
|
+
parameters: {
|
|
4069
|
+
query?: never;
|
|
4070
|
+
header?: never;
|
|
4071
|
+
path?: never;
|
|
4072
|
+
cookie?: never;
|
|
4073
|
+
};
|
|
4074
|
+
get?: never;
|
|
4075
|
+
put?: never;
|
|
4076
|
+
/**
|
|
4077
|
+
* Turn a voice walk-through (timed transcript + photos) into a checklist draft.
|
|
4078
|
+
* @description Returns a DRAFT only; nothing is saved to the job. The phone's review screen creates the checklist with POST /api/projects/{projectId}/documents (custom `items`, carrying `referenceMedia`). Sections come from, in order: the camera pose of a scan, the room the tech named (the item's words, the photo's room chip, a section opened), the AI Image Sort's room for the item's photo (add-on), then the last room mentioned; items with no signal go to Not sure. GPS is never used. Item types come from spoken hints only (checkbox unless "photo required", "yes or no" or a reading; "required" sets the flag). Reference photos are the shots taken from 10 s before a sentence to 20 s after it. 200 when the draft is ready at once; 202 with `runId` while the photos go through an AI vision sort (poll the runs route). Requires the job (404 otherwise) and the Create Checklists permission (403). Photos that are not the organization's assets are left out.
|
|
4079
|
+
*/
|
|
4080
|
+
post: {
|
|
4081
|
+
parameters: {
|
|
4082
|
+
query?: never;
|
|
4083
|
+
header?: never;
|
|
4084
|
+
path: {
|
|
4085
|
+
projectId: number;
|
|
4086
|
+
};
|
|
4087
|
+
cookie?: never;
|
|
4088
|
+
};
|
|
4089
|
+
requestBody: {
|
|
4090
|
+
content: {
|
|
4091
|
+
"application/json": components["schemas"]["WalkthroughDraftRequest"];
|
|
4092
|
+
};
|
|
4093
|
+
};
|
|
4094
|
+
responses: {
|
|
4095
|
+
/** @description The draft (status completed). */
|
|
4096
|
+
200: {
|
|
4097
|
+
headers: {
|
|
4098
|
+
[name: string]: unknown;
|
|
4099
|
+
};
|
|
4100
|
+
content: {
|
|
4101
|
+
"application/json": components["schemas"]["WalkthroughDraftResponse"];
|
|
4102
|
+
};
|
|
4103
|
+
};
|
|
4104
|
+
/** @description A vision sort runs first (status running); poll GET …/draft-from-walkthrough/runs/{runId}. */
|
|
4105
|
+
202: {
|
|
4106
|
+
headers: {
|
|
4107
|
+
[name: string]: unknown;
|
|
4108
|
+
};
|
|
4109
|
+
content: {
|
|
4110
|
+
"application/json": components["schemas"]["WalkthroughDraftResponse"];
|
|
4111
|
+
};
|
|
4112
|
+
};
|
|
4113
|
+
/** @description No transcript, or a wrong shape. */
|
|
4114
|
+
400: {
|
|
4115
|
+
headers: {
|
|
4116
|
+
[name: string]: unknown;
|
|
4117
|
+
};
|
|
4118
|
+
content: {
|
|
4119
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4120
|
+
};
|
|
4121
|
+
};
|
|
4122
|
+
/** @description Authentication required. */
|
|
4123
|
+
401: {
|
|
4124
|
+
headers: {
|
|
4125
|
+
[name: string]: unknown;
|
|
4126
|
+
};
|
|
4127
|
+
content?: never;
|
|
4128
|
+
};
|
|
4129
|
+
/** @description The role cannot create checklists. */
|
|
4130
|
+
403: {
|
|
4131
|
+
headers: {
|
|
4132
|
+
[name: string]: unknown;
|
|
4133
|
+
};
|
|
4134
|
+
content: {
|
|
4135
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4136
|
+
};
|
|
4137
|
+
};
|
|
4138
|
+
/** @description Job not found. */
|
|
4139
|
+
404: {
|
|
4140
|
+
headers: {
|
|
4141
|
+
[name: string]: unknown;
|
|
4142
|
+
};
|
|
4143
|
+
content: {
|
|
4144
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4145
|
+
};
|
|
4146
|
+
};
|
|
4147
|
+
/** @description The AI's answer could not be used. */
|
|
4148
|
+
502: {
|
|
4149
|
+
headers: {
|
|
4150
|
+
[name: string]: unknown;
|
|
4151
|
+
};
|
|
4152
|
+
content: {
|
|
4153
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4154
|
+
};
|
|
4155
|
+
};
|
|
4156
|
+
/** @description AI is not configured. */
|
|
4157
|
+
503: {
|
|
4158
|
+
headers: {
|
|
4159
|
+
[name: string]: unknown;
|
|
4160
|
+
};
|
|
4161
|
+
content: {
|
|
4162
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4163
|
+
};
|
|
4164
|
+
};
|
|
4165
|
+
};
|
|
4166
|
+
};
|
|
4167
|
+
delete?: never;
|
|
4168
|
+
options?: never;
|
|
4169
|
+
head?: never;
|
|
4170
|
+
patch?: never;
|
|
4171
|
+
trace?: never;
|
|
4172
|
+
};
|
|
4173
|
+
"/api/projects/{projectId}/documents/draft-from-walkthrough/runs/{runId}": {
|
|
4174
|
+
parameters: {
|
|
4175
|
+
query?: never;
|
|
4176
|
+
header?: never;
|
|
4177
|
+
path?: never;
|
|
4178
|
+
cookie?: never;
|
|
4179
|
+
};
|
|
4180
|
+
/**
|
|
4181
|
+
* Poll a walk-through draft that waits for an AI vision sort.
|
|
4182
|
+
* @description Status `running` (with the sort's progress in `sortRun`) until the draft is ready, then `completed` with `draft`, or `failed` with `message`. A run that stops making progress is marked failed on the next poll and never re-run.
|
|
4183
|
+
*/
|
|
4184
|
+
get: {
|
|
4185
|
+
parameters: {
|
|
4186
|
+
query?: never;
|
|
4187
|
+
header?: never;
|
|
4188
|
+
path: {
|
|
4189
|
+
projectId: number;
|
|
4190
|
+
runId: number;
|
|
4191
|
+
};
|
|
4192
|
+
cookie?: never;
|
|
4193
|
+
};
|
|
4194
|
+
requestBody?: never;
|
|
4195
|
+
responses: {
|
|
4196
|
+
/** @description The run's envelope. */
|
|
4197
|
+
200: {
|
|
4198
|
+
headers: {
|
|
4199
|
+
[name: string]: unknown;
|
|
4200
|
+
};
|
|
4201
|
+
content: {
|
|
4202
|
+
"application/json": components["schemas"]["WalkthroughDraftResponse"];
|
|
4203
|
+
};
|
|
4204
|
+
};
|
|
4205
|
+
/** @description Authentication required. */
|
|
4206
|
+
401: {
|
|
4207
|
+
headers: {
|
|
4208
|
+
[name: string]: unknown;
|
|
4209
|
+
};
|
|
4210
|
+
content?: never;
|
|
4211
|
+
};
|
|
4212
|
+
/** @description The role cannot create checklists. */
|
|
4213
|
+
403: {
|
|
4214
|
+
headers: {
|
|
4215
|
+
[name: string]: unknown;
|
|
4216
|
+
};
|
|
4217
|
+
content: {
|
|
4218
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4219
|
+
};
|
|
4220
|
+
};
|
|
4221
|
+
/** @description Job or run not found. */
|
|
4222
|
+
404: {
|
|
4223
|
+
headers: {
|
|
4224
|
+
[name: string]: unknown;
|
|
4225
|
+
};
|
|
4226
|
+
content: {
|
|
4227
|
+
"application/json": components["schemas"]["ErrorEnvelope"];
|
|
4228
|
+
};
|
|
4229
|
+
};
|
|
4230
|
+
};
|
|
4231
|
+
};
|
|
4232
|
+
put?: never;
|
|
4233
|
+
post?: never;
|
|
4234
|
+
delete?: never;
|
|
4235
|
+
options?: never;
|
|
4236
|
+
head?: never;
|
|
4237
|
+
patch?: never;
|
|
4238
|
+
trace?: never;
|
|
4239
|
+
};
|
|
4240
|
+
}
|
|
4241
|
+
export type webhooks = Record<string, never>;
|
|
4242
|
+
export interface components {
|
|
4243
|
+
schemas: {
|
|
4244
|
+
/** @description Structured error response returned by every endpoint on failure. */
|
|
4245
|
+
ErrorEnvelope: {
|
|
4246
|
+
/** @example validation_failed */
|
|
4247
|
+
error: string;
|
|
4248
|
+
/** @example roomPlanJSON is required */
|
|
4249
|
+
message: string;
|
|
4250
|
+
details?: unknown;
|
|
4251
|
+
};
|
|
4252
|
+
/** @description Returned with HTTP 426 when the X-Client-Version major is below minClientVersion. */
|
|
4253
|
+
UpgradeRequiredEnvelope: {
|
|
4254
|
+
/** @enum {string} */
|
|
4255
|
+
error: "upgrade_required";
|
|
4256
|
+
message: string;
|
|
4257
|
+
apiVersion: string;
|
|
4258
|
+
minClientVersion: string;
|
|
4259
|
+
deprecatedBelow: string;
|
|
4260
|
+
clientVersion: string;
|
|
4261
|
+
};
|
|
4262
|
+
/** @description Cross-platform version handshake manifest. See docs/api-versioning.md. */
|
|
4263
|
+
VersionManifest: {
|
|
4264
|
+
/** @example 1.6.1 */
|
|
4265
|
+
apiVersion: string;
|
|
4266
|
+
/** @example 1.0.0 */
|
|
4267
|
+
minClientVersion: string;
|
|
4268
|
+
/** @example 1.0.0 */
|
|
4269
|
+
deprecatedBelow: string;
|
|
4270
|
+
/** @description Legacy alias for apiVersion. */
|
|
4271
|
+
version: string;
|
|
4272
|
+
buildTime: string;
|
|
4273
|
+
env?: string | null;
|
|
4274
|
+
gitCommit: string;
|
|
4275
|
+
};
|
|
4276
|
+
InsertContact: {
|
|
4277
|
+
userId?: string | null;
|
|
4278
|
+
organizationId?: string | null;
|
|
4279
|
+
customerNumber?: number | null;
|
|
4280
|
+
name: string;
|
|
4281
|
+
email?: string | null;
|
|
4282
|
+
phone?: string | null;
|
|
4283
|
+
company?: string | null;
|
|
4284
|
+
address?: string | null;
|
|
4285
|
+
status?: string | null;
|
|
4286
|
+
customFields?: string | number | boolean | null | {
|
|
4287
|
+
[key: string]: unknown;
|
|
4288
|
+
} | unknown[];
|
|
4289
|
+
/** Format: date-time */
|
|
4290
|
+
lastContactDate?: string | null;
|
|
4291
|
+
parentContactId?: number | null;
|
|
4292
|
+
relationship?: string | null;
|
|
4293
|
+
role?: string | null;
|
|
4294
|
+
firstName?: string | null;
|
|
4295
|
+
lastName?: string | null;
|
|
4296
|
+
serviceAddress?: string | null;
|
|
4297
|
+
billingAddress?: string | null;
|
|
4298
|
+
isCommercial?: boolean | null;
|
|
4299
|
+
pointOfContactName?: string | null;
|
|
3711
4300
|
pointOfContactTitle?: string | null;
|
|
3712
4301
|
pointOfContactPhone?: string | null;
|
|
3713
4302
|
primaryEmail?: string | null;
|
|
@@ -3723,9 +4312,11 @@ export interface components {
|
|
|
3723
4312
|
cachedLng?: number | null;
|
|
3724
4313
|
qboId?: string | null;
|
|
3725
4314
|
qboSyncToken?: string | null;
|
|
4315
|
+
/** Format: date-time */
|
|
3726
4316
|
qboLastPushedAt?: string | null;
|
|
3727
4317
|
qboLastPushedHash?: string | null;
|
|
3728
4318
|
qboLastError?: string | null;
|
|
4319
|
+
/** Format: date-time */
|
|
3729
4320
|
deletedAt?: string | null;
|
|
3730
4321
|
deletedBy?: string | null;
|
|
3731
4322
|
};
|
|
@@ -3790,25 +4381,35 @@ export interface components {
|
|
|
3790
4381
|
deviceTrack?: string | number | boolean | null | {
|
|
3791
4382
|
[key: string]: unknown;
|
|
3792
4383
|
} | unknown[];
|
|
3793
|
-
referencePhotoKeys?:
|
|
4384
|
+
referencePhotoKeys?: string[] | null;
|
|
3794
4385
|
metricCorrection?: number | null;
|
|
3795
4386
|
squareUpAngleRad?: number | null;
|
|
3796
4387
|
clientMirrorApplied?: boolean | null;
|
|
3797
4388
|
deviceModel?: string | null;
|
|
3798
4389
|
appVersion?: string | null;
|
|
4390
|
+
/** Format: date-time */
|
|
3799
4391
|
captureTimestamp?: string | null;
|
|
3800
4392
|
captureMode?: string | null;
|
|
3801
4393
|
sessionId?: string | null;
|
|
4394
|
+
/** Format: date-time */
|
|
3802
4395
|
sessionCapturedAt?: string | null;
|
|
4396
|
+
clientScanId?: string | null;
|
|
3803
4397
|
floorPlanAssetId?: string | null;
|
|
3804
4398
|
floorPlanPixelsPerMeter?: number | null;
|
|
3805
4399
|
floorPlanOffsetX?: number | null;
|
|
3806
4400
|
floorPlanOffsetY?: number | null;
|
|
3807
4401
|
floorPlanWidthPx?: number | null;
|
|
3808
4402
|
floorPlanHeightPx?: number | null;
|
|
4403
|
+
sourceSketchId?: number | null;
|
|
4404
|
+
takeoffPagePixelsPerMeter?: number | null;
|
|
4405
|
+
takeoffPageOffsetX?: number | null;
|
|
4406
|
+
takeoffPageOffsetY?: number | null;
|
|
4407
|
+
takeoffPageWidthPx?: number | null;
|
|
4408
|
+
takeoffPageHeightPx?: number | null;
|
|
3809
4409
|
floorId?: number | null;
|
|
3810
4410
|
shareToVendor?: boolean | null;
|
|
3811
4411
|
createdBy?: string | null;
|
|
4412
|
+
/** Format: date-time */
|
|
3812
4413
|
deletedAt?: string | null;
|
|
3813
4414
|
deletedBy?: string | null;
|
|
3814
4415
|
};
|
|
@@ -3822,7 +4423,9 @@ export interface components {
|
|
|
3822
4423
|
description?: string | null;
|
|
3823
4424
|
taskType?: string | null;
|
|
3824
4425
|
location?: string | null;
|
|
4426
|
+
/** Format: date-time */
|
|
3825
4427
|
startDate?: string | null;
|
|
4428
|
+
/** Format: date-time */
|
|
3826
4429
|
dueDate?: string | null;
|
|
3827
4430
|
allDay?: boolean | null;
|
|
3828
4431
|
status?: string | null;
|
|
@@ -3847,14 +4450,17 @@ export interface components {
|
|
|
3847
4450
|
isRecurring?: boolean | null;
|
|
3848
4451
|
recurrencePattern?: string | null;
|
|
3849
4452
|
recurrenceInterval?: number | null;
|
|
4453
|
+
/** Format: date-time */
|
|
3850
4454
|
recurrenceEndDate?: string | null;
|
|
3851
4455
|
parentTaskId?: number | null;
|
|
4456
|
+
/** Format: date-time */
|
|
3852
4457
|
recurrenceDate?: string | null;
|
|
3853
4458
|
isRecurrenceException?: boolean | null;
|
|
3854
4459
|
excludedDates?: string | number | boolean | null | {
|
|
3855
4460
|
[key: string]: unknown;
|
|
3856
4461
|
} | unknown[];
|
|
3857
4462
|
displayIndex?: number | null;
|
|
4463
|
+
/** Format: date-time */
|
|
3858
4464
|
deletedAt?: string | null;
|
|
3859
4465
|
deletedBy?: string | null;
|
|
3860
4466
|
};
|
|
@@ -3865,6 +4471,7 @@ export interface components {
|
|
|
3865
4471
|
content: string;
|
|
3866
4472
|
userName?: string | null;
|
|
3867
4473
|
userEmail?: string | null;
|
|
4474
|
+
/** Format: date-time */
|
|
3868
4475
|
deletedAt?: string | null;
|
|
3869
4476
|
deletedBy?: string | null;
|
|
3870
4477
|
};
|
|
@@ -3881,8 +4488,9 @@ export interface components {
|
|
|
3881
4488
|
metadata?: string | number | boolean | null | {
|
|
3882
4489
|
[key: string]: unknown;
|
|
3883
4490
|
} | unknown[];
|
|
3884
|
-
tags?:
|
|
4491
|
+
tags?: string[] | null;
|
|
3885
4492
|
uploadedBy?: string | null;
|
|
4493
|
+
/** Format: date-time */
|
|
3886
4494
|
deletedAt?: string | null;
|
|
3887
4495
|
deletedBy?: string | null;
|
|
3888
4496
|
};
|
|
@@ -3893,6 +4501,7 @@ export interface components {
|
|
|
3893
4501
|
isSystemFolder?: boolean | null;
|
|
3894
4502
|
folderType?: string | null;
|
|
3895
4503
|
createdBy?: string | null;
|
|
4504
|
+
/** Format: date-time */
|
|
3896
4505
|
deletedAt?: string | null;
|
|
3897
4506
|
deletedBy?: string | null;
|
|
3898
4507
|
};
|
|
@@ -3920,12 +4529,17 @@ export interface components {
|
|
|
3920
4529
|
terms?: string | null;
|
|
3921
4530
|
notes?: string | null;
|
|
3922
4531
|
internalNotes?: string | null;
|
|
4532
|
+
/** Format: date-time */
|
|
3923
4533
|
validUntil?: string | null;
|
|
4534
|
+
/** Format: date-time */
|
|
3924
4535
|
sentAt?: string | null;
|
|
4536
|
+
/** Format: date-time */
|
|
3925
4537
|
approvedAt?: string | null;
|
|
3926
4538
|
approvedBy?: string | null;
|
|
4539
|
+
/** Format: date-time */
|
|
3927
4540
|
rejectedAt?: string | null;
|
|
3928
4541
|
rejectionReason?: string | null;
|
|
4542
|
+
/** Format: date-time */
|
|
3929
4543
|
signedAt?: string | null;
|
|
3930
4544
|
signatureMeta?: string | number | boolean | null | {
|
|
3931
4545
|
[key: string]: unknown;
|
|
@@ -3935,10 +4549,13 @@ export interface components {
|
|
|
3935
4549
|
signerName?: string | null;
|
|
3936
4550
|
signerEmail?: string | null;
|
|
3937
4551
|
signerIp?: string | null;
|
|
4552
|
+
/** Format: date-time */
|
|
3938
4553
|
revisionRequestedAt?: string | null;
|
|
3939
4554
|
revisionNotes?: string | null;
|
|
4555
|
+
/** Format: date-time */
|
|
3940
4556
|
customerResponseAt?: string | null;
|
|
3941
4557
|
convertedToInvoiceId?: number | null;
|
|
4558
|
+
/** Format: date-time */
|
|
3942
4559
|
voidedAt?: string | null;
|
|
3943
4560
|
voidedBy?: string | null;
|
|
3944
4561
|
voidedReason?: string | null;
|
|
@@ -3947,16 +4564,22 @@ export interface components {
|
|
|
3947
4564
|
signNowRoleId?: string | null;
|
|
3948
4565
|
signNowRoleName?: string | null;
|
|
3949
4566
|
portalVisible?: boolean | null;
|
|
4567
|
+
/** Format: date-time */
|
|
3950
4568
|
signedCompletionEmailSentAt?: string | null;
|
|
3951
4569
|
qboId?: string | null;
|
|
3952
4570
|
qboSyncToken?: string | null;
|
|
4571
|
+
/** Format: date-time */
|
|
3953
4572
|
qboLastPushedAt?: string | null;
|
|
3954
4573
|
qboLastPushedHash?: string | null;
|
|
3955
4574
|
qboLastError?: string | null;
|
|
3956
4575
|
qboTotalTax?: string | null;
|
|
3957
4576
|
qboTotalAmount?: string | null;
|
|
4577
|
+
/** Format: date-time */
|
|
3958
4578
|
qboTotalsAt?: string | null;
|
|
4579
|
+
sourceKind?: string | null;
|
|
4580
|
+
takeoffScanId?: number | null;
|
|
3959
4581
|
createdBy?: string | null;
|
|
4582
|
+
/** Format: date-time */
|
|
3960
4583
|
deletedAt?: string | null;
|
|
3961
4584
|
deletedBy?: string | null;
|
|
3962
4585
|
};
|
|
@@ -3981,12 +4604,12 @@ export interface components {
|
|
|
3981
4604
|
MobileUploadRequest: {
|
|
3982
4605
|
/** @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). */
|
|
3983
4606
|
roomPlanJSON: {
|
|
3984
|
-
rooms: {
|
|
4607
|
+
rooms: ({
|
|
3985
4608
|
label?: string;
|
|
3986
4609
|
name?: string;
|
|
3987
4610
|
category?: string;
|
|
3988
4611
|
roomLocalId?: string;
|
|
3989
|
-
walls?: {
|
|
4612
|
+
walls?: ({
|
|
3990
4613
|
start?: {
|
|
3991
4614
|
x: number;
|
|
3992
4615
|
y: number;
|
|
@@ -4001,9 +4624,13 @@ export interface components {
|
|
|
4001
4624
|
identifier?: string;
|
|
4002
4625
|
isDoor?: boolean;
|
|
4003
4626
|
isOpening?: boolean;
|
|
4627
|
+
} & {
|
|
4628
|
+
[key: string]: unknown;
|
|
4004
4629
|
};
|
|
4005
4630
|
captureMethod?: string;
|
|
4006
|
-
}
|
|
4631
|
+
} & {
|
|
4632
|
+
[key: string]: unknown;
|
|
4633
|
+
})[];
|
|
4007
4634
|
doors?: {
|
|
4008
4635
|
position: {
|
|
4009
4636
|
x: number;
|
|
@@ -4011,6 +4638,7 @@ export interface components {
|
|
|
4011
4638
|
};
|
|
4012
4639
|
width: number;
|
|
4013
4640
|
height: number;
|
|
4641
|
+
sillHeightM?: number;
|
|
4014
4642
|
hostWallIndex?: number | null;
|
|
4015
4643
|
wallIndex?: number;
|
|
4016
4644
|
/** @enum {string} */
|
|
@@ -4025,6 +4653,7 @@ export interface components {
|
|
|
4025
4653
|
};
|
|
4026
4654
|
width: number;
|
|
4027
4655
|
height: number;
|
|
4656
|
+
sillHeightM?: number;
|
|
4028
4657
|
hostWallIndex?: number | null;
|
|
4029
4658
|
wallIndex?: number;
|
|
4030
4659
|
/** @enum {string} */
|
|
@@ -4039,6 +4668,7 @@ export interface components {
|
|
|
4039
4668
|
};
|
|
4040
4669
|
width: number;
|
|
4041
4670
|
height: number;
|
|
4671
|
+
sillHeightM?: number;
|
|
4042
4672
|
hostWallIndex?: number | null;
|
|
4043
4673
|
wallIndex?: number;
|
|
4044
4674
|
/** @enum {string} */
|
|
@@ -4046,7 +4676,7 @@ export interface components {
|
|
|
4046
4676
|
/** @enum {string} */
|
|
4047
4677
|
placementSource?: "auto" | "manual";
|
|
4048
4678
|
}[];
|
|
4049
|
-
pins?: {
|
|
4679
|
+
pins?: ({
|
|
4050
4680
|
id: string;
|
|
4051
4681
|
position: {
|
|
4052
4682
|
x: number;
|
|
@@ -4056,8 +4686,10 @@ export interface components {
|
|
|
4056
4686
|
roomLocalId?: string;
|
|
4057
4687
|
kind?: string;
|
|
4058
4688
|
note?: string;
|
|
4059
|
-
}
|
|
4060
|
-
|
|
4689
|
+
} & {
|
|
4690
|
+
[key: string]: unknown;
|
|
4691
|
+
})[];
|
|
4692
|
+
objects?: ({
|
|
4061
4693
|
category?: string;
|
|
4062
4694
|
position?: {
|
|
4063
4695
|
x: number;
|
|
@@ -4069,14 +4701,20 @@ export interface components {
|
|
|
4069
4701
|
depth?: number;
|
|
4070
4702
|
};
|
|
4071
4703
|
rotation?: number;
|
|
4072
|
-
}
|
|
4704
|
+
} & {
|
|
4705
|
+
[key: string]: unknown;
|
|
4706
|
+
})[];
|
|
4073
4707
|
boundaryPolygon?: {
|
|
4074
4708
|
x: number;
|
|
4075
4709
|
y: number;
|
|
4076
4710
|
}[];
|
|
4077
4711
|
roomNote?: string;
|
|
4078
4712
|
entryDoorwayId?: string;
|
|
4079
|
-
}
|
|
4713
|
+
} & {
|
|
4714
|
+
[key: string]: unknown;
|
|
4715
|
+
})[];
|
|
4716
|
+
} & {
|
|
4717
|
+
[key: string]: unknown;
|
|
4080
4718
|
};
|
|
4081
4719
|
name: string;
|
|
4082
4720
|
description?: string;
|
|
@@ -4123,6 +4761,8 @@ export interface components {
|
|
|
4123
4761
|
x: number;
|
|
4124
4762
|
y: number;
|
|
4125
4763
|
};
|
|
4764
|
+
} & {
|
|
4765
|
+
[key: string]: unknown;
|
|
4126
4766
|
};
|
|
4127
4767
|
MobileUploadResponse: {
|
|
4128
4768
|
scanId: number;
|
|
@@ -4141,6 +4781,14 @@ export interface components {
|
|
|
4141
4781
|
scanRoomSnapshots: boolean;
|
|
4142
4782
|
roomConnections: boolean;
|
|
4143
4783
|
};
|
|
4784
|
+
EventStreamTicketResponse: {
|
|
4785
|
+
ticket: string;
|
|
4786
|
+
};
|
|
4787
|
+
StreamAuthenticationError: {
|
|
4788
|
+
message: string;
|
|
4789
|
+
/** @enum {string} */
|
|
4790
|
+
code?: "IMPERSONATION_UNAVAILABLE" | "SUPPORT_IMPERSONATION_UNAVAILABLE" | "auth_unavailable";
|
|
4791
|
+
};
|
|
4144
4792
|
JobSummary: {
|
|
4145
4793
|
id: number;
|
|
4146
4794
|
name: string;
|
|
@@ -4759,6 +5407,323 @@ export interface components {
|
|
|
4759
5407
|
/** Format: date-time */
|
|
4760
5408
|
requestedAt: string;
|
|
4761
5409
|
};
|
|
5410
|
+
DoorwayEditCommand: {
|
|
5411
|
+
/** @enum {string} */
|
|
5412
|
+
action: "delete";
|
|
5413
|
+
roomId: number;
|
|
5414
|
+
openingId: string;
|
|
5415
|
+
revision: string;
|
|
5416
|
+
/** @enum {boolean} */
|
|
5417
|
+
confirmed: true;
|
|
5418
|
+
} | {
|
|
5419
|
+
/** @enum {string} */
|
|
5420
|
+
action: "undo";
|
|
5421
|
+
token: string;
|
|
5422
|
+
} | {
|
|
5423
|
+
/** @enum {string} */
|
|
5424
|
+
action: "connect";
|
|
5425
|
+
rooms: {
|
|
5426
|
+
id: number;
|
|
5427
|
+
revision: string;
|
|
5428
|
+
geometry: {
|
|
5429
|
+
[key: string]: unknown;
|
|
5430
|
+
};
|
|
5431
|
+
}[];
|
|
5432
|
+
links: {
|
|
5433
|
+
roomAId: number;
|
|
5434
|
+
roomBId: number;
|
|
5435
|
+
doorAIndex: number;
|
|
5436
|
+
doorBIndex: number;
|
|
5437
|
+
}[];
|
|
5438
|
+
};
|
|
5439
|
+
DoorwayEditResult: {
|
|
5440
|
+
/** @enum {boolean} */
|
|
5441
|
+
ok: true;
|
|
5442
|
+
token: string;
|
|
5443
|
+
roomIds: number[];
|
|
5444
|
+
};
|
|
5445
|
+
WalkthroughDraftRequest: {
|
|
5446
|
+
transcript: {
|
|
5447
|
+
text: string;
|
|
5448
|
+
/** Format: date-time */
|
|
5449
|
+
startedAt: string;
|
|
5450
|
+
/** Format: date-time */
|
|
5451
|
+
endedAt: string;
|
|
5452
|
+
}[];
|
|
5453
|
+
photos?: {
|
|
5454
|
+
assetId: string;
|
|
5455
|
+
/** Format: date-time */
|
|
5456
|
+
capturedAt: string;
|
|
5457
|
+
roomHint?: string | null;
|
|
5458
|
+
sketchRoomId?: number | null;
|
|
5459
|
+
capturePose?: {
|
|
5460
|
+
x?: number;
|
|
5461
|
+
y?: number;
|
|
5462
|
+
z?: number;
|
|
5463
|
+
floorId?: number | null;
|
|
5464
|
+
sketchId?: number | null;
|
|
5465
|
+
scanSessionId?: string;
|
|
5466
|
+
scanRoomLocalId?: string;
|
|
5467
|
+
scanRoomName?: string;
|
|
5468
|
+
} | null;
|
|
5469
|
+
}[];
|
|
5470
|
+
sections?: {
|
|
5471
|
+
name: string;
|
|
5472
|
+
/** Format: date-time */
|
|
5473
|
+
startedAt: string;
|
|
5474
|
+
sketchRoomId?: number | null;
|
|
5475
|
+
}[];
|
|
5476
|
+
/** @enum {string} */
|
|
5477
|
+
roomsFrom?: "speech" | "scan";
|
|
5478
|
+
};
|
|
5479
|
+
ChecklistDraft: {
|
|
5480
|
+
name: string;
|
|
5481
|
+
sections: {
|
|
5482
|
+
key: string;
|
|
5483
|
+
title: string;
|
|
5484
|
+
sketchRoomId: number | null;
|
|
5485
|
+
/** @enum {string} */
|
|
5486
|
+
kind: "room" | "custom" | "not_sure";
|
|
5487
|
+
items: {
|
|
5488
|
+
key: string;
|
|
5489
|
+
itemText: string;
|
|
5490
|
+
description: string | null;
|
|
5491
|
+
/** @enum {string} */
|
|
5492
|
+
itemType: "checkbox" | "yes/no" | "text" | "number" | "date" | "dropdown" | "multi-select" | "photo" | "signature";
|
|
5493
|
+
required: boolean;
|
|
5494
|
+
options: {
|
|
5495
|
+
[key: string]: unknown;
|
|
5496
|
+
} | null;
|
|
5497
|
+
referenceMedia: {
|
|
5498
|
+
assetId: string;
|
|
5499
|
+
caption?: string | null;
|
|
5500
|
+
order?: number;
|
|
5501
|
+
}[];
|
|
5502
|
+
hints: ("photo_required" | "yes_no" | "required" | "reading")[];
|
|
5503
|
+
/** @enum {string} */
|
|
5504
|
+
roomSource: "pose" | "named" | "vision" | "time" | "none";
|
|
5505
|
+
spokenAt: string;
|
|
5506
|
+
quote: string | null;
|
|
5507
|
+
}[];
|
|
5508
|
+
}[];
|
|
5509
|
+
photos: {
|
|
5510
|
+
assetId: string;
|
|
5511
|
+
capturedAt: string;
|
|
5512
|
+
sectionKey: string | null;
|
|
5513
|
+
/** @enum {string} */
|
|
5514
|
+
roomSource: "pose" | "named" | "vision" | "time" | "none";
|
|
5515
|
+
itemKeys: string[];
|
|
5516
|
+
}[];
|
|
5517
|
+
visionUsed: boolean;
|
|
5518
|
+
model: string | null;
|
|
5519
|
+
promptVersion: string;
|
|
5520
|
+
};
|
|
5521
|
+
WalkthroughDraftResponse: {
|
|
5522
|
+
/** @enum {string} */
|
|
5523
|
+
status: "completed" | "running" | "failed";
|
|
5524
|
+
runId: number | null;
|
|
5525
|
+
draft: {
|
|
5526
|
+
name: string;
|
|
5527
|
+
sections: {
|
|
5528
|
+
key: string;
|
|
5529
|
+
title: string;
|
|
5530
|
+
sketchRoomId: number | null;
|
|
5531
|
+
/** @enum {string} */
|
|
5532
|
+
kind: "room" | "custom" | "not_sure";
|
|
5533
|
+
items: {
|
|
5534
|
+
key: string;
|
|
5535
|
+
itemText: string;
|
|
5536
|
+
description: string | null;
|
|
5537
|
+
/** @enum {string} */
|
|
5538
|
+
itemType: "checkbox" | "yes/no" | "text" | "number" | "date" | "dropdown" | "multi-select" | "photo" | "signature";
|
|
5539
|
+
required: boolean;
|
|
5540
|
+
options: {
|
|
5541
|
+
[key: string]: unknown;
|
|
5542
|
+
} | null;
|
|
5543
|
+
referenceMedia: {
|
|
5544
|
+
assetId: string;
|
|
5545
|
+
caption?: string | null;
|
|
5546
|
+
order?: number;
|
|
5547
|
+
}[];
|
|
5548
|
+
hints: ("photo_required" | "yes_no" | "required" | "reading")[];
|
|
5549
|
+
/** @enum {string} */
|
|
5550
|
+
roomSource: "pose" | "named" | "vision" | "time" | "none";
|
|
5551
|
+
spokenAt: string;
|
|
5552
|
+
quote: string | null;
|
|
5553
|
+
}[];
|
|
5554
|
+
}[];
|
|
5555
|
+
photos: {
|
|
5556
|
+
assetId: string;
|
|
5557
|
+
capturedAt: string;
|
|
5558
|
+
sectionKey: string | null;
|
|
5559
|
+
/** @enum {string} */
|
|
5560
|
+
roomSource: "pose" | "named" | "vision" | "time" | "none";
|
|
5561
|
+
itemKeys: string[];
|
|
5562
|
+
}[];
|
|
5563
|
+
visionUsed: boolean;
|
|
5564
|
+
model: string | null;
|
|
5565
|
+
promptVersion: string;
|
|
5566
|
+
} | null;
|
|
5567
|
+
sortRun: {
|
|
5568
|
+
/** @enum {string} */
|
|
5569
|
+
status: "running" | "completed" | "failed";
|
|
5570
|
+
total: number;
|
|
5571
|
+
done: number;
|
|
5572
|
+
} | null;
|
|
5573
|
+
message: string | null;
|
|
5574
|
+
};
|
|
5575
|
+
/** @description `arguments` of the Chatty tool `list_job_checklists` (POST /api/chatty-voice/tools/execute). */
|
|
5576
|
+
ChattyListJobChecklistsArguments: {
|
|
5577
|
+
jobId?: number | string;
|
|
5578
|
+
};
|
|
5579
|
+
/** @description `data` of a successful `list_job_checklists` call (`success: true`). */
|
|
5580
|
+
ChattyListJobChecklistsData: {
|
|
5581
|
+
id: number;
|
|
5582
|
+
name: string;
|
|
5583
|
+
status: string | null;
|
|
5584
|
+
completionPercentage: number;
|
|
5585
|
+
templateId: number | null;
|
|
5586
|
+
}[];
|
|
5587
|
+
/** @description `arguments` of the Chatty tool `get_checklist` (POST /api/chatty-voice/tools/execute). */
|
|
5588
|
+
ChattyGetChecklistArguments: {
|
|
5589
|
+
checklistId?: number | string;
|
|
5590
|
+
checklistName?: string;
|
|
5591
|
+
jobId?: number | string;
|
|
5592
|
+
};
|
|
5593
|
+
/** @description `data` of a successful `get_checklist` call (`success: true`). */
|
|
5594
|
+
ChattyGetChecklistData: {
|
|
5595
|
+
id: number;
|
|
5596
|
+
name: string;
|
|
5597
|
+
status: string | null;
|
|
5598
|
+
completionPercentage: number;
|
|
5599
|
+
jobId: number | null;
|
|
5600
|
+
items: {
|
|
5601
|
+
id: number;
|
|
5602
|
+
itemText: string;
|
|
5603
|
+
itemType: string;
|
|
5604
|
+
required: boolean;
|
|
5605
|
+
done: boolean;
|
|
5606
|
+
value: string | null;
|
|
5607
|
+
section: string | null;
|
|
5608
|
+
referencePhotos: number;
|
|
5609
|
+
}[];
|
|
5610
|
+
};
|
|
5611
|
+
/** @description `arguments` of the Chatty tool `create_checklist` (POST /api/chatty-voice/tools/execute). */
|
|
5612
|
+
ChattyCreateChecklistArguments: {
|
|
5613
|
+
jobId?: number | string;
|
|
5614
|
+
name?: string;
|
|
5615
|
+
templateId?: number | string;
|
|
5616
|
+
templateName?: string;
|
|
5617
|
+
notes?: string;
|
|
5618
|
+
items?: string[];
|
|
5619
|
+
};
|
|
5620
|
+
/** @description `data` of a successful `create_checklist` call (`success: true`). */
|
|
5621
|
+
ChattyCreateChecklistData: {
|
|
5622
|
+
id: number;
|
|
5623
|
+
name: string;
|
|
5624
|
+
jobId: number;
|
|
5625
|
+
itemCount: number;
|
|
5626
|
+
templateId?: number;
|
|
5627
|
+
sections?: {
|
|
5628
|
+
title: string;
|
|
5629
|
+
items: {
|
|
5630
|
+
itemText: string;
|
|
5631
|
+
/** @enum {string} */
|
|
5632
|
+
itemType: "checkbox" | "yes/no" | "text" | "number" | "date" | "dropdown" | "multi-select" | "photo" | "signature";
|
|
5633
|
+
required: boolean;
|
|
5634
|
+
}[];
|
|
5635
|
+
}[];
|
|
5636
|
+
};
|
|
5637
|
+
/** @description `arguments` of the Chatty tool `add_checklist_item` (POST /api/chatty-voice/tools/execute). */
|
|
5638
|
+
ChattyAddChecklistItemArguments: {
|
|
5639
|
+
checklistId?: number | string;
|
|
5640
|
+
checklistName?: string;
|
|
5641
|
+
jobId?: number | string;
|
|
5642
|
+
itemText: string;
|
|
5643
|
+
/** @enum {string} */
|
|
5644
|
+
itemType?: "checkbox" | "yes/no" | "text" | "number" | "date" | "dropdown" | "multi-select" | "photo" | "signature";
|
|
5645
|
+
required?: boolean;
|
|
5646
|
+
description?: string;
|
|
5647
|
+
sectionName?: string;
|
|
5648
|
+
};
|
|
5649
|
+
/** @description `data` of a successful `add_checklist_item` call (`success: true`). */
|
|
5650
|
+
ChattyAddChecklistItemData: {
|
|
5651
|
+
id: number;
|
|
5652
|
+
checklistId: number;
|
|
5653
|
+
itemText: string;
|
|
5654
|
+
/** @enum {string} */
|
|
5655
|
+
itemType: "checkbox" | "yes/no" | "text" | "number" | "date" | "dropdown" | "multi-select" | "photo" | "signature";
|
|
5656
|
+
required: boolean;
|
|
5657
|
+
section: string | null;
|
|
5658
|
+
};
|
|
5659
|
+
/** @description `arguments` of the Chatty tool `complete_checklist_item` (POST /api/chatty-voice/tools/execute). */
|
|
5660
|
+
ChattyCompleteChecklistItemArguments: {
|
|
5661
|
+
checklistId?: number | string;
|
|
5662
|
+
checklistName?: string;
|
|
5663
|
+
jobId?: number | string;
|
|
5664
|
+
itemId?: number | string;
|
|
5665
|
+
itemText?: string;
|
|
5666
|
+
completed?: boolean;
|
|
5667
|
+
};
|
|
5668
|
+
/** @description `data` of a successful `complete_checklist_item` call (`success: true`). */
|
|
5669
|
+
ChattyCompleteChecklistItemData: {
|
|
5670
|
+
checklistId: number;
|
|
5671
|
+
itemId: number;
|
|
5672
|
+
completed: boolean;
|
|
5673
|
+
};
|
|
5674
|
+
/** @description `arguments` of the Chatty tool `set_checklist_item_answer` (POST /api/chatty-voice/tools/execute). */
|
|
5675
|
+
ChattySetChecklistItemAnswerArguments: {
|
|
5676
|
+
checklistId?: number | string;
|
|
5677
|
+
checklistName?: string;
|
|
5678
|
+
jobId?: number | string;
|
|
5679
|
+
itemId?: number | string;
|
|
5680
|
+
itemText?: string;
|
|
5681
|
+
value: string;
|
|
5682
|
+
};
|
|
5683
|
+
/** @description `data` of a successful `set_checklist_item_answer` call (`success: true`). */
|
|
5684
|
+
ChattySetChecklistItemAnswerData: {
|
|
5685
|
+
checklistId: number;
|
|
5686
|
+
itemId: number;
|
|
5687
|
+
value: string;
|
|
5688
|
+
};
|
|
5689
|
+
/** @description `arguments` of the Chatty tool `attach_reference_photo_to_item` (POST /api/chatty-voice/tools/execute). */
|
|
5690
|
+
ChattyAttachReferencePhotoToItemArguments: {
|
|
5691
|
+
checklistId?: number | string;
|
|
5692
|
+
checklistName?: string;
|
|
5693
|
+
jobId?: number | string;
|
|
5694
|
+
itemId?: number | string;
|
|
5695
|
+
itemText?: string;
|
|
5696
|
+
photoId: number | string;
|
|
5697
|
+
caption?: string;
|
|
5698
|
+
};
|
|
5699
|
+
/** @description `data` of a successful `attach_reference_photo_to_item` call (`success: true`). */
|
|
5700
|
+
ChattyAttachReferencePhotoToItemData: {
|
|
5701
|
+
checklistId: number;
|
|
5702
|
+
itemId: number;
|
|
5703
|
+
referenceMedia: {
|
|
5704
|
+
assetId: string;
|
|
5705
|
+
caption?: string | null;
|
|
5706
|
+
order?: number;
|
|
5707
|
+
}[];
|
|
5708
|
+
};
|
|
5709
|
+
/** @description `arguments` of the Chatty tool `draft_checklist_from_job_photos` (POST /api/chatty-voice/tools/execute). */
|
|
5710
|
+
ChattyDraftChecklistFromJobPhotosArguments: {
|
|
5711
|
+
jobId?: number | string;
|
|
5712
|
+
name?: string;
|
|
5713
|
+
create?: boolean;
|
|
5714
|
+
};
|
|
5715
|
+
/** @description `data` of a successful `draft_checklist_from_job_photos` call (`success: true`). */
|
|
5716
|
+
ChattyDraftChecklistFromJobPhotosData: {
|
|
5717
|
+
id?: number;
|
|
5718
|
+
jobId?: number;
|
|
5719
|
+
name: string;
|
|
5720
|
+
items: {
|
|
5721
|
+
itemText: string;
|
|
5722
|
+
photos: number;
|
|
5723
|
+
}[];
|
|
5724
|
+
unsortedPhotos: number;
|
|
5725
|
+
created: boolean;
|
|
5726
|
+
};
|
|
4762
5727
|
};
|
|
4763
5728
|
responses: never;
|
|
4764
5729
|
parameters: never;
|