@serviceai/api-spec 1.2.434 → 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.
Files changed (4) hide show
  1. package/openapi.json +1915 -51
  2. package/openapi.yaml +1279 -11
  3. package/package.json +1 -1
  4. package/types.d.ts +696 -1
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;
@@ -3832,6 +4064,179 @@ export interface paths {
3832
4064
  patch?: never;
3833
4065
  trace?: never;
3834
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
+ };
3835
4240
  }
3836
4241
  export type webhooks = Record<string, never>;
3837
4242
  export interface components {
@@ -3856,7 +4261,7 @@ export interface components {
3856
4261
  };
3857
4262
  /** @description Cross-platform version handshake manifest. See docs/api-versioning.md. */
3858
4263
  VersionManifest: {
3859
- /** @example 1.2.434 */
4264
+ /** @example 1.6.1 */
3860
4265
  apiVersion: string;
3861
4266
  /** @example 1.0.0 */
3862
4267
  minClientVersion: string;
@@ -4376,6 +4781,14 @@ export interface components {
4376
4781
  scanRoomSnapshots: boolean;
4377
4782
  roomConnections: boolean;
4378
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
+ };
4379
4792
  JobSummary: {
4380
4793
  id: number;
4381
4794
  name: string;
@@ -5029,6 +5442,288 @@ export interface components {
5029
5442
  token: string;
5030
5443
  roomIds: number[];
5031
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
+ };
5032
5727
  };
5033
5728
  responses: never;
5034
5729
  parameters: never;