@serviceai/api-spec 1.2.434 → 1.6.2
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 +2480 -85
- package/openapi.yaml +1557 -7
- package/package.json +1 -1
- package/types.d.ts +963 -63
package/openapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: ServiceAi API
|
|
4
|
-
version: 1.2
|
|
4
|
+
version: 1.6.2
|
|
5
5
|
description: >-
|
|
6
6
|
Source-of-truth API contract for ServiceAi. Generated from `shared/schema.ts` Zod schemas by
|
|
7
7
|
`scripts/build-api-spec.ts`. Versioning policy: see `docs/api-versioning.md`. The hand-written docs/ios-contract.md
|
|
@@ -32,6 +32,8 @@ tags:
|
|
|
32
32
|
description: Job (project) lifecycle surface.
|
|
33
33
|
- name: chatty
|
|
34
34
|
description: Realtime voice-enabled AI assistant.
|
|
35
|
+
- name: checklists
|
|
36
|
+
description: 'Job checklists: the voice walk-through draft.'
|
|
35
37
|
- name: time-tracking
|
|
36
38
|
description: >-
|
|
37
39
|
The clock. A work day is the master clock and the payroll number; time entries sit inside it and say where the
|
|
@@ -44,6 +46,18 @@ tags:
|
|
|
44
46
|
- name: account
|
|
45
47
|
description: 'The signed-in person''s own account: asking for it to be deleted.'
|
|
46
48
|
components:
|
|
49
|
+
securitySchemes:
|
|
50
|
+
UserBearer:
|
|
51
|
+
type: http
|
|
52
|
+
scheme: bearer
|
|
53
|
+
BrowserSession:
|
|
54
|
+
type: apiKey
|
|
55
|
+
in: cookie
|
|
56
|
+
name: connect.sid
|
|
57
|
+
BrowserAuthCookie:
|
|
58
|
+
type: apiKey
|
|
59
|
+
in: cookie
|
|
60
|
+
name: auth_token
|
|
47
61
|
schemas:
|
|
48
62
|
ErrorEnvelope:
|
|
49
63
|
type: object
|
|
@@ -89,7 +103,7 @@ components:
|
|
|
89
103
|
properties:
|
|
90
104
|
apiVersion:
|
|
91
105
|
type: string
|
|
92
|
-
example: 1.2
|
|
106
|
+
example: 1.6.2
|
|
93
107
|
minClientVersion:
|
|
94
108
|
type: string
|
|
95
109
|
example: 1.0.0
|
|
@@ -1842,6 +1856,29 @@ components:
|
|
|
1842
1856
|
- manualMeasurements
|
|
1843
1857
|
- scanRoomSnapshots
|
|
1844
1858
|
- roomConnections
|
|
1859
|
+
EventStreamTicketResponse:
|
|
1860
|
+
type: object
|
|
1861
|
+
properties:
|
|
1862
|
+
ticket:
|
|
1863
|
+
type: string
|
|
1864
|
+
minLength: 1
|
|
1865
|
+
maxLength: 8192
|
|
1866
|
+
required:
|
|
1867
|
+
- ticket
|
|
1868
|
+
additionalProperties: false
|
|
1869
|
+
StreamAuthenticationError:
|
|
1870
|
+
type: object
|
|
1871
|
+
properties:
|
|
1872
|
+
message:
|
|
1873
|
+
type: string
|
|
1874
|
+
code:
|
|
1875
|
+
type: string
|
|
1876
|
+
enum:
|
|
1877
|
+
- IMPERSONATION_UNAVAILABLE
|
|
1878
|
+
- SUPPORT_IMPERSONATION_UNAVAILABLE
|
|
1879
|
+
- auth_unavailable
|
|
1880
|
+
required:
|
|
1881
|
+
- message
|
|
1845
1882
|
JobSummary:
|
|
1846
1883
|
type: object
|
|
1847
1884
|
properties:
|
|
@@ -3523,16 +3560,1180 @@ components:
|
|
|
3523
3560
|
type: boolean
|
|
3524
3561
|
enum:
|
|
3525
3562
|
- true
|
|
3526
|
-
token:
|
|
3563
|
+
token:
|
|
3564
|
+
type: string
|
|
3565
|
+
roomIds:
|
|
3566
|
+
type: array
|
|
3567
|
+
items:
|
|
3568
|
+
type: integer
|
|
3569
|
+
required:
|
|
3570
|
+
- ok
|
|
3571
|
+
- token
|
|
3572
|
+
- roomIds
|
|
3573
|
+
WalkthroughDraftRequest:
|
|
3574
|
+
type: object
|
|
3575
|
+
properties:
|
|
3576
|
+
transcript:
|
|
3577
|
+
type: array
|
|
3578
|
+
items:
|
|
3579
|
+
type: object
|
|
3580
|
+
properties:
|
|
3581
|
+
text:
|
|
3582
|
+
type: string
|
|
3583
|
+
minLength: 1
|
|
3584
|
+
maxLength: 1000
|
|
3585
|
+
startedAt:
|
|
3586
|
+
type: string
|
|
3587
|
+
format: date-time
|
|
3588
|
+
endedAt:
|
|
3589
|
+
type: string
|
|
3590
|
+
format: date-time
|
|
3591
|
+
required:
|
|
3592
|
+
- text
|
|
3593
|
+
- startedAt
|
|
3594
|
+
- endedAt
|
|
3595
|
+
minItems: 1
|
|
3596
|
+
maxItems: 400
|
|
3597
|
+
photos:
|
|
3598
|
+
type: array
|
|
3599
|
+
items:
|
|
3600
|
+
type: object
|
|
3601
|
+
properties:
|
|
3602
|
+
assetId:
|
|
3603
|
+
type: string
|
|
3604
|
+
minLength: 1
|
|
3605
|
+
maxLength: 64
|
|
3606
|
+
capturedAt:
|
|
3607
|
+
type: string
|
|
3608
|
+
format: date-time
|
|
3609
|
+
roomHint:
|
|
3610
|
+
type:
|
|
3611
|
+
- string
|
|
3612
|
+
- 'null'
|
|
3613
|
+
maxLength: 200
|
|
3614
|
+
sketchRoomId:
|
|
3615
|
+
type:
|
|
3616
|
+
- integer
|
|
3617
|
+
- 'null'
|
|
3618
|
+
exclusiveMinimum: 0
|
|
3619
|
+
capturePose:
|
|
3620
|
+
type:
|
|
3621
|
+
- object
|
|
3622
|
+
- 'null'
|
|
3623
|
+
properties:
|
|
3624
|
+
x:
|
|
3625
|
+
type: number
|
|
3626
|
+
'y':
|
|
3627
|
+
type: number
|
|
3628
|
+
z:
|
|
3629
|
+
type: number
|
|
3630
|
+
floorId:
|
|
3631
|
+
type:
|
|
3632
|
+
- integer
|
|
3633
|
+
- 'null'
|
|
3634
|
+
exclusiveMinimum: 0
|
|
3635
|
+
sketchId:
|
|
3636
|
+
type:
|
|
3637
|
+
- integer
|
|
3638
|
+
- 'null'
|
|
3639
|
+
exclusiveMinimum: 0
|
|
3640
|
+
scanSessionId:
|
|
3641
|
+
type: string
|
|
3642
|
+
maxLength: 64
|
|
3643
|
+
scanRoomLocalId:
|
|
3644
|
+
type: string
|
|
3645
|
+
maxLength: 128
|
|
3646
|
+
scanRoomName:
|
|
3647
|
+
type: string
|
|
3648
|
+
maxLength: 200
|
|
3649
|
+
required:
|
|
3650
|
+
- assetId
|
|
3651
|
+
- capturedAt
|
|
3652
|
+
maxItems: 200
|
|
3653
|
+
sections:
|
|
3654
|
+
type: array
|
|
3655
|
+
items:
|
|
3656
|
+
type: object
|
|
3657
|
+
properties:
|
|
3658
|
+
name:
|
|
3659
|
+
type: string
|
|
3660
|
+
minLength: 1
|
|
3661
|
+
maxLength: 200
|
|
3662
|
+
startedAt:
|
|
3663
|
+
type: string
|
|
3664
|
+
format: date-time
|
|
3665
|
+
sketchRoomId:
|
|
3666
|
+
type:
|
|
3667
|
+
- integer
|
|
3668
|
+
- 'null'
|
|
3669
|
+
exclusiveMinimum: 0
|
|
3670
|
+
required:
|
|
3671
|
+
- name
|
|
3672
|
+
- startedAt
|
|
3673
|
+
maxItems: 100
|
|
3674
|
+
roomsFrom:
|
|
3675
|
+
type: string
|
|
3676
|
+
enum:
|
|
3677
|
+
- speech
|
|
3678
|
+
- scan
|
|
3679
|
+
required:
|
|
3680
|
+
- transcript
|
|
3681
|
+
ChecklistDraft:
|
|
3682
|
+
type: object
|
|
3683
|
+
properties:
|
|
3684
|
+
name:
|
|
3685
|
+
type: string
|
|
3686
|
+
sections:
|
|
3687
|
+
type: array
|
|
3688
|
+
items:
|
|
3689
|
+
type: object
|
|
3690
|
+
properties:
|
|
3691
|
+
key:
|
|
3692
|
+
type: string
|
|
3693
|
+
title:
|
|
3694
|
+
type: string
|
|
3695
|
+
sketchRoomId:
|
|
3696
|
+
type:
|
|
3697
|
+
- integer
|
|
3698
|
+
- 'null'
|
|
3699
|
+
kind:
|
|
3700
|
+
type: string
|
|
3701
|
+
enum:
|
|
3702
|
+
- room
|
|
3703
|
+
- custom
|
|
3704
|
+
- not_sure
|
|
3705
|
+
items:
|
|
3706
|
+
type: array
|
|
3707
|
+
items:
|
|
3708
|
+
type: object
|
|
3709
|
+
properties:
|
|
3710
|
+
key:
|
|
3711
|
+
type: string
|
|
3712
|
+
itemText:
|
|
3713
|
+
type: string
|
|
3714
|
+
description:
|
|
3715
|
+
type:
|
|
3716
|
+
- string
|
|
3717
|
+
- 'null'
|
|
3718
|
+
itemType:
|
|
3719
|
+
type: string
|
|
3720
|
+
enum:
|
|
3721
|
+
- checkbox
|
|
3722
|
+
- yes/no
|
|
3723
|
+
- text
|
|
3724
|
+
- number
|
|
3725
|
+
- date
|
|
3726
|
+
- dropdown
|
|
3727
|
+
- multi-select
|
|
3728
|
+
- photo
|
|
3729
|
+
- signature
|
|
3730
|
+
required:
|
|
3731
|
+
type: boolean
|
|
3732
|
+
options:
|
|
3733
|
+
type:
|
|
3734
|
+
- object
|
|
3735
|
+
- 'null'
|
|
3736
|
+
additionalProperties: {}
|
|
3737
|
+
referenceMedia:
|
|
3738
|
+
type: array
|
|
3739
|
+
items:
|
|
3740
|
+
type: object
|
|
3741
|
+
properties:
|
|
3742
|
+
assetId:
|
|
3743
|
+
type: string
|
|
3744
|
+
minLength: 1
|
|
3745
|
+
maxLength: 64
|
|
3746
|
+
caption:
|
|
3747
|
+
type:
|
|
3748
|
+
- string
|
|
3749
|
+
- 'null'
|
|
3750
|
+
maxLength: 300
|
|
3751
|
+
order:
|
|
3752
|
+
type: integer
|
|
3753
|
+
minimum: 0
|
|
3754
|
+
required:
|
|
3755
|
+
- assetId
|
|
3756
|
+
maxItems: 10
|
|
3757
|
+
hints:
|
|
3758
|
+
type: array
|
|
3759
|
+
items:
|
|
3760
|
+
type: string
|
|
3761
|
+
enum:
|
|
3762
|
+
- photo_required
|
|
3763
|
+
- yes_no
|
|
3764
|
+
- required
|
|
3765
|
+
- reading
|
|
3766
|
+
roomSource:
|
|
3767
|
+
type: string
|
|
3768
|
+
enum:
|
|
3769
|
+
- pose
|
|
3770
|
+
- named
|
|
3771
|
+
- vision
|
|
3772
|
+
- time
|
|
3773
|
+
- none
|
|
3774
|
+
spokenAt:
|
|
3775
|
+
type: string
|
|
3776
|
+
quote:
|
|
3777
|
+
type:
|
|
3778
|
+
- string
|
|
3779
|
+
- 'null'
|
|
3780
|
+
required:
|
|
3781
|
+
- key
|
|
3782
|
+
- itemText
|
|
3783
|
+
- description
|
|
3784
|
+
- itemType
|
|
3785
|
+
- required
|
|
3786
|
+
- options
|
|
3787
|
+
- referenceMedia
|
|
3788
|
+
- hints
|
|
3789
|
+
- roomSource
|
|
3790
|
+
- spokenAt
|
|
3791
|
+
- quote
|
|
3792
|
+
required:
|
|
3793
|
+
- key
|
|
3794
|
+
- title
|
|
3795
|
+
- sketchRoomId
|
|
3796
|
+
- kind
|
|
3797
|
+
- items
|
|
3798
|
+
photos:
|
|
3799
|
+
type: array
|
|
3800
|
+
items:
|
|
3801
|
+
type: object
|
|
3802
|
+
properties:
|
|
3803
|
+
assetId:
|
|
3804
|
+
type: string
|
|
3805
|
+
capturedAt:
|
|
3806
|
+
type: string
|
|
3807
|
+
sectionKey:
|
|
3808
|
+
type:
|
|
3809
|
+
- string
|
|
3810
|
+
- 'null'
|
|
3811
|
+
roomSource:
|
|
3812
|
+
type: string
|
|
3813
|
+
enum:
|
|
3814
|
+
- pose
|
|
3815
|
+
- named
|
|
3816
|
+
- vision
|
|
3817
|
+
- time
|
|
3818
|
+
- none
|
|
3819
|
+
itemKeys:
|
|
3820
|
+
type: array
|
|
3821
|
+
items:
|
|
3822
|
+
type: string
|
|
3823
|
+
required:
|
|
3824
|
+
- assetId
|
|
3825
|
+
- capturedAt
|
|
3826
|
+
- sectionKey
|
|
3827
|
+
- roomSource
|
|
3828
|
+
- itemKeys
|
|
3829
|
+
visionUsed:
|
|
3830
|
+
type: boolean
|
|
3831
|
+
model:
|
|
3832
|
+
type:
|
|
3833
|
+
- string
|
|
3834
|
+
- 'null'
|
|
3835
|
+
promptVersion:
|
|
3836
|
+
type: string
|
|
3837
|
+
required:
|
|
3838
|
+
- name
|
|
3839
|
+
- sections
|
|
3840
|
+
- photos
|
|
3841
|
+
- visionUsed
|
|
3842
|
+
- model
|
|
3843
|
+
- promptVersion
|
|
3844
|
+
WalkthroughDraftResponse:
|
|
3845
|
+
type: object
|
|
3846
|
+
properties:
|
|
3847
|
+
status:
|
|
3848
|
+
type: string
|
|
3849
|
+
enum:
|
|
3850
|
+
- completed
|
|
3851
|
+
- running
|
|
3852
|
+
- failed
|
|
3853
|
+
runId:
|
|
3854
|
+
type:
|
|
3855
|
+
- integer
|
|
3856
|
+
- 'null'
|
|
3857
|
+
draft:
|
|
3858
|
+
type:
|
|
3859
|
+
- object
|
|
3860
|
+
- 'null'
|
|
3861
|
+
properties:
|
|
3862
|
+
name:
|
|
3863
|
+
type: string
|
|
3864
|
+
sections:
|
|
3865
|
+
type: array
|
|
3866
|
+
items:
|
|
3867
|
+
type: object
|
|
3868
|
+
properties:
|
|
3869
|
+
key:
|
|
3870
|
+
type: string
|
|
3871
|
+
title:
|
|
3872
|
+
type: string
|
|
3873
|
+
sketchRoomId:
|
|
3874
|
+
type:
|
|
3875
|
+
- integer
|
|
3876
|
+
- 'null'
|
|
3877
|
+
kind:
|
|
3878
|
+
type: string
|
|
3879
|
+
enum:
|
|
3880
|
+
- room
|
|
3881
|
+
- custom
|
|
3882
|
+
- not_sure
|
|
3883
|
+
items:
|
|
3884
|
+
type: array
|
|
3885
|
+
items:
|
|
3886
|
+
type: object
|
|
3887
|
+
properties:
|
|
3888
|
+
key:
|
|
3889
|
+
type: string
|
|
3890
|
+
itemText:
|
|
3891
|
+
type: string
|
|
3892
|
+
description:
|
|
3893
|
+
type:
|
|
3894
|
+
- string
|
|
3895
|
+
- 'null'
|
|
3896
|
+
itemType:
|
|
3897
|
+
type: string
|
|
3898
|
+
enum:
|
|
3899
|
+
- checkbox
|
|
3900
|
+
- yes/no
|
|
3901
|
+
- text
|
|
3902
|
+
- number
|
|
3903
|
+
- date
|
|
3904
|
+
- dropdown
|
|
3905
|
+
- multi-select
|
|
3906
|
+
- photo
|
|
3907
|
+
- signature
|
|
3908
|
+
required:
|
|
3909
|
+
type: boolean
|
|
3910
|
+
options:
|
|
3911
|
+
type:
|
|
3912
|
+
- object
|
|
3913
|
+
- 'null'
|
|
3914
|
+
additionalProperties: {}
|
|
3915
|
+
referenceMedia:
|
|
3916
|
+
type: array
|
|
3917
|
+
items:
|
|
3918
|
+
type: object
|
|
3919
|
+
properties:
|
|
3920
|
+
assetId:
|
|
3921
|
+
type: string
|
|
3922
|
+
minLength: 1
|
|
3923
|
+
maxLength: 64
|
|
3924
|
+
caption:
|
|
3925
|
+
type:
|
|
3926
|
+
- string
|
|
3927
|
+
- 'null'
|
|
3928
|
+
maxLength: 300
|
|
3929
|
+
order:
|
|
3930
|
+
type: integer
|
|
3931
|
+
minimum: 0
|
|
3932
|
+
required:
|
|
3933
|
+
- assetId
|
|
3934
|
+
maxItems: 10
|
|
3935
|
+
hints:
|
|
3936
|
+
type: array
|
|
3937
|
+
items:
|
|
3938
|
+
type: string
|
|
3939
|
+
enum:
|
|
3940
|
+
- photo_required
|
|
3941
|
+
- yes_no
|
|
3942
|
+
- required
|
|
3943
|
+
- reading
|
|
3944
|
+
roomSource:
|
|
3945
|
+
type: string
|
|
3946
|
+
enum:
|
|
3947
|
+
- pose
|
|
3948
|
+
- named
|
|
3949
|
+
- vision
|
|
3950
|
+
- time
|
|
3951
|
+
- none
|
|
3952
|
+
spokenAt:
|
|
3953
|
+
type: string
|
|
3954
|
+
quote:
|
|
3955
|
+
type:
|
|
3956
|
+
- string
|
|
3957
|
+
- 'null'
|
|
3958
|
+
required:
|
|
3959
|
+
- key
|
|
3960
|
+
- itemText
|
|
3961
|
+
- description
|
|
3962
|
+
- itemType
|
|
3963
|
+
- required
|
|
3964
|
+
- options
|
|
3965
|
+
- referenceMedia
|
|
3966
|
+
- hints
|
|
3967
|
+
- roomSource
|
|
3968
|
+
- spokenAt
|
|
3969
|
+
- quote
|
|
3970
|
+
required:
|
|
3971
|
+
- key
|
|
3972
|
+
- title
|
|
3973
|
+
- sketchRoomId
|
|
3974
|
+
- kind
|
|
3975
|
+
- items
|
|
3976
|
+
photos:
|
|
3977
|
+
type: array
|
|
3978
|
+
items:
|
|
3979
|
+
type: object
|
|
3980
|
+
properties:
|
|
3981
|
+
assetId:
|
|
3982
|
+
type: string
|
|
3983
|
+
capturedAt:
|
|
3984
|
+
type: string
|
|
3985
|
+
sectionKey:
|
|
3986
|
+
type:
|
|
3987
|
+
- string
|
|
3988
|
+
- 'null'
|
|
3989
|
+
roomSource:
|
|
3990
|
+
type: string
|
|
3991
|
+
enum:
|
|
3992
|
+
- pose
|
|
3993
|
+
- named
|
|
3994
|
+
- vision
|
|
3995
|
+
- time
|
|
3996
|
+
- none
|
|
3997
|
+
itemKeys:
|
|
3998
|
+
type: array
|
|
3999
|
+
items:
|
|
4000
|
+
type: string
|
|
4001
|
+
required:
|
|
4002
|
+
- assetId
|
|
4003
|
+
- capturedAt
|
|
4004
|
+
- sectionKey
|
|
4005
|
+
- roomSource
|
|
4006
|
+
- itemKeys
|
|
4007
|
+
visionUsed:
|
|
4008
|
+
type: boolean
|
|
4009
|
+
model:
|
|
4010
|
+
type:
|
|
4011
|
+
- string
|
|
4012
|
+
- 'null'
|
|
4013
|
+
promptVersion:
|
|
4014
|
+
type: string
|
|
4015
|
+
required:
|
|
4016
|
+
- name
|
|
4017
|
+
- sections
|
|
4018
|
+
- photos
|
|
4019
|
+
- visionUsed
|
|
4020
|
+
- model
|
|
4021
|
+
- promptVersion
|
|
4022
|
+
sortRun:
|
|
4023
|
+
type:
|
|
4024
|
+
- object
|
|
4025
|
+
- 'null'
|
|
4026
|
+
properties:
|
|
4027
|
+
status:
|
|
4028
|
+
type: string
|
|
4029
|
+
enum:
|
|
4030
|
+
- running
|
|
4031
|
+
- completed
|
|
4032
|
+
- failed
|
|
4033
|
+
total:
|
|
4034
|
+
type: integer
|
|
4035
|
+
done:
|
|
4036
|
+
type: integer
|
|
4037
|
+
required:
|
|
4038
|
+
- status
|
|
4039
|
+
- total
|
|
4040
|
+
- done
|
|
4041
|
+
message:
|
|
4042
|
+
type:
|
|
4043
|
+
- string
|
|
4044
|
+
- 'null'
|
|
4045
|
+
required:
|
|
4046
|
+
- status
|
|
4047
|
+
- runId
|
|
4048
|
+
- draft
|
|
4049
|
+
- sortRun
|
|
4050
|
+
- message
|
|
4051
|
+
ChattyListJobChecklistsArguments:
|
|
4052
|
+
type: object
|
|
4053
|
+
properties:
|
|
4054
|
+
jobId:
|
|
4055
|
+
anyOf:
|
|
4056
|
+
- type: integer
|
|
4057
|
+
exclusiveMinimum: 0
|
|
4058
|
+
- type: string
|
|
4059
|
+
pattern: ^\d+$
|
|
4060
|
+
description: '`arguments` of the Chatty tool `list_job_checklists` (POST /api/chatty-voice/tools/execute).'
|
|
4061
|
+
ChattyListJobChecklistsData:
|
|
4062
|
+
type: array
|
|
4063
|
+
items:
|
|
4064
|
+
type: object
|
|
4065
|
+
properties:
|
|
4066
|
+
id:
|
|
4067
|
+
type: integer
|
|
4068
|
+
name:
|
|
4069
|
+
type: string
|
|
4070
|
+
status:
|
|
4071
|
+
type:
|
|
4072
|
+
- string
|
|
4073
|
+
- 'null'
|
|
4074
|
+
completionPercentage:
|
|
4075
|
+
type: number
|
|
4076
|
+
templateId:
|
|
4077
|
+
type:
|
|
4078
|
+
- integer
|
|
4079
|
+
- 'null'
|
|
4080
|
+
required:
|
|
4081
|
+
- id
|
|
4082
|
+
- name
|
|
4083
|
+
- status
|
|
4084
|
+
- completionPercentage
|
|
4085
|
+
- templateId
|
|
4086
|
+
description: '`data` of a successful `list_job_checklists` call (`success: true`).'
|
|
4087
|
+
ChattyGetChecklistArguments:
|
|
4088
|
+
type: object
|
|
4089
|
+
properties:
|
|
4090
|
+
checklistId:
|
|
4091
|
+
anyOf:
|
|
4092
|
+
- type: integer
|
|
4093
|
+
exclusiveMinimum: 0
|
|
4094
|
+
- type: string
|
|
4095
|
+
pattern: ^\d+$
|
|
4096
|
+
checklistName:
|
|
4097
|
+
type: string
|
|
4098
|
+
jobId:
|
|
4099
|
+
anyOf:
|
|
4100
|
+
- type: integer
|
|
4101
|
+
exclusiveMinimum: 0
|
|
4102
|
+
- type: string
|
|
4103
|
+
pattern: ^\d+$
|
|
4104
|
+
description: '`arguments` of the Chatty tool `get_checklist` (POST /api/chatty-voice/tools/execute).'
|
|
4105
|
+
ChattyGetChecklistData:
|
|
4106
|
+
type: object
|
|
4107
|
+
properties:
|
|
4108
|
+
id:
|
|
4109
|
+
type: integer
|
|
4110
|
+
name:
|
|
4111
|
+
type: string
|
|
4112
|
+
status:
|
|
4113
|
+
type:
|
|
4114
|
+
- string
|
|
4115
|
+
- 'null'
|
|
4116
|
+
completionPercentage:
|
|
4117
|
+
type: number
|
|
4118
|
+
jobId:
|
|
4119
|
+
type:
|
|
4120
|
+
- integer
|
|
4121
|
+
- 'null'
|
|
4122
|
+
items:
|
|
4123
|
+
type: array
|
|
4124
|
+
items:
|
|
4125
|
+
type: object
|
|
4126
|
+
properties:
|
|
4127
|
+
id:
|
|
4128
|
+
type: integer
|
|
4129
|
+
itemText:
|
|
4130
|
+
type: string
|
|
4131
|
+
itemType:
|
|
4132
|
+
type: string
|
|
4133
|
+
required:
|
|
4134
|
+
type: boolean
|
|
4135
|
+
done:
|
|
4136
|
+
type: boolean
|
|
4137
|
+
value:
|
|
4138
|
+
type:
|
|
4139
|
+
- string
|
|
4140
|
+
- 'null'
|
|
4141
|
+
section:
|
|
4142
|
+
type:
|
|
4143
|
+
- string
|
|
4144
|
+
- 'null'
|
|
4145
|
+
referencePhotos:
|
|
4146
|
+
type: integer
|
|
4147
|
+
required:
|
|
4148
|
+
- id
|
|
4149
|
+
- itemText
|
|
4150
|
+
- itemType
|
|
4151
|
+
- required
|
|
4152
|
+
- done
|
|
4153
|
+
- value
|
|
4154
|
+
- section
|
|
4155
|
+
- referencePhotos
|
|
4156
|
+
required:
|
|
4157
|
+
- id
|
|
4158
|
+
- name
|
|
4159
|
+
- status
|
|
4160
|
+
- completionPercentage
|
|
4161
|
+
- jobId
|
|
4162
|
+
- items
|
|
4163
|
+
description: '`data` of a successful `get_checklist` call (`success: true`).'
|
|
4164
|
+
ChattyCreateChecklistArguments:
|
|
4165
|
+
type: object
|
|
4166
|
+
properties:
|
|
4167
|
+
jobId:
|
|
4168
|
+
anyOf:
|
|
4169
|
+
- type: integer
|
|
4170
|
+
exclusiveMinimum: 0
|
|
4171
|
+
- type: string
|
|
4172
|
+
pattern: ^\d+$
|
|
4173
|
+
name:
|
|
4174
|
+
type: string
|
|
4175
|
+
templateId:
|
|
4176
|
+
anyOf:
|
|
4177
|
+
- type: integer
|
|
4178
|
+
exclusiveMinimum: 0
|
|
4179
|
+
- type: string
|
|
4180
|
+
pattern: ^\d+$
|
|
4181
|
+
templateName:
|
|
4182
|
+
type: string
|
|
4183
|
+
notes:
|
|
4184
|
+
type: string
|
|
4185
|
+
items:
|
|
4186
|
+
type: array
|
|
4187
|
+
items:
|
|
4188
|
+
type: string
|
|
4189
|
+
description: '`arguments` of the Chatty tool `create_checklist` (POST /api/chatty-voice/tools/execute).'
|
|
4190
|
+
ChattyCreateChecklistData:
|
|
4191
|
+
type: object
|
|
4192
|
+
properties:
|
|
4193
|
+
id:
|
|
4194
|
+
type: integer
|
|
4195
|
+
name:
|
|
4196
|
+
type: string
|
|
4197
|
+
jobId:
|
|
4198
|
+
type: integer
|
|
4199
|
+
itemCount:
|
|
4200
|
+
type: integer
|
|
4201
|
+
templateId:
|
|
4202
|
+
type: integer
|
|
4203
|
+
sections:
|
|
4204
|
+
type: array
|
|
4205
|
+
items:
|
|
4206
|
+
type: object
|
|
4207
|
+
properties:
|
|
4208
|
+
title:
|
|
4209
|
+
type: string
|
|
4210
|
+
items:
|
|
4211
|
+
type: array
|
|
4212
|
+
items:
|
|
4213
|
+
type: object
|
|
4214
|
+
properties:
|
|
4215
|
+
itemText:
|
|
4216
|
+
type: string
|
|
4217
|
+
itemType:
|
|
4218
|
+
type: string
|
|
4219
|
+
enum:
|
|
4220
|
+
- checkbox
|
|
4221
|
+
- yes/no
|
|
4222
|
+
- text
|
|
4223
|
+
- number
|
|
4224
|
+
- date
|
|
4225
|
+
- dropdown
|
|
4226
|
+
- multi-select
|
|
4227
|
+
- photo
|
|
4228
|
+
- signature
|
|
4229
|
+
required:
|
|
4230
|
+
type: boolean
|
|
4231
|
+
required:
|
|
4232
|
+
- itemText
|
|
4233
|
+
- itemType
|
|
4234
|
+
- required
|
|
4235
|
+
required:
|
|
4236
|
+
- title
|
|
4237
|
+
- items
|
|
4238
|
+
required:
|
|
4239
|
+
- id
|
|
4240
|
+
- name
|
|
4241
|
+
- jobId
|
|
4242
|
+
- itemCount
|
|
4243
|
+
description: '`data` of a successful `create_checklist` call (`success: true`).'
|
|
4244
|
+
ChattyAddChecklistItemArguments:
|
|
4245
|
+
type: object
|
|
4246
|
+
properties:
|
|
4247
|
+
checklistId:
|
|
4248
|
+
anyOf:
|
|
4249
|
+
- type: integer
|
|
4250
|
+
exclusiveMinimum: 0
|
|
4251
|
+
- type: string
|
|
4252
|
+
pattern: ^\d+$
|
|
4253
|
+
checklistName:
|
|
4254
|
+
type: string
|
|
4255
|
+
jobId:
|
|
4256
|
+
anyOf:
|
|
4257
|
+
- type: integer
|
|
4258
|
+
exclusiveMinimum: 0
|
|
4259
|
+
- type: string
|
|
4260
|
+
pattern: ^\d+$
|
|
4261
|
+
itemText:
|
|
4262
|
+
type: string
|
|
4263
|
+
itemType:
|
|
4264
|
+
type: string
|
|
4265
|
+
enum:
|
|
4266
|
+
- checkbox
|
|
4267
|
+
- yes/no
|
|
4268
|
+
- text
|
|
4269
|
+
- number
|
|
4270
|
+
- date
|
|
4271
|
+
- dropdown
|
|
4272
|
+
- multi-select
|
|
4273
|
+
- photo
|
|
4274
|
+
- signature
|
|
4275
|
+
required:
|
|
4276
|
+
type: boolean
|
|
4277
|
+
description:
|
|
4278
|
+
type: string
|
|
4279
|
+
sectionName:
|
|
4280
|
+
type: string
|
|
4281
|
+
required:
|
|
4282
|
+
- itemText
|
|
4283
|
+
description: '`arguments` of the Chatty tool `add_checklist_item` (POST /api/chatty-voice/tools/execute).'
|
|
4284
|
+
ChattyAddChecklistItemData:
|
|
4285
|
+
type: object
|
|
4286
|
+
properties:
|
|
4287
|
+
id:
|
|
4288
|
+
type: integer
|
|
4289
|
+
checklistId:
|
|
4290
|
+
type: integer
|
|
4291
|
+
itemText:
|
|
4292
|
+
type: string
|
|
4293
|
+
itemType:
|
|
4294
|
+
type: string
|
|
4295
|
+
enum:
|
|
4296
|
+
- checkbox
|
|
4297
|
+
- yes/no
|
|
4298
|
+
- text
|
|
4299
|
+
- number
|
|
4300
|
+
- date
|
|
4301
|
+
- dropdown
|
|
4302
|
+
- multi-select
|
|
4303
|
+
- photo
|
|
4304
|
+
- signature
|
|
4305
|
+
required:
|
|
4306
|
+
type: boolean
|
|
4307
|
+
section:
|
|
4308
|
+
type:
|
|
4309
|
+
- string
|
|
4310
|
+
- 'null'
|
|
4311
|
+
required:
|
|
4312
|
+
- id
|
|
4313
|
+
- checklistId
|
|
4314
|
+
- itemText
|
|
4315
|
+
- itemType
|
|
4316
|
+
- required
|
|
4317
|
+
- section
|
|
4318
|
+
description: '`data` of a successful `add_checklist_item` call (`success: true`).'
|
|
4319
|
+
ChattyCompleteChecklistItemArguments:
|
|
4320
|
+
type: object
|
|
4321
|
+
properties:
|
|
4322
|
+
checklistId:
|
|
4323
|
+
anyOf:
|
|
4324
|
+
- type: integer
|
|
4325
|
+
exclusiveMinimum: 0
|
|
4326
|
+
- type: string
|
|
4327
|
+
pattern: ^\d+$
|
|
4328
|
+
checklistName:
|
|
4329
|
+
type: string
|
|
4330
|
+
jobId:
|
|
4331
|
+
anyOf:
|
|
4332
|
+
- type: integer
|
|
4333
|
+
exclusiveMinimum: 0
|
|
4334
|
+
- type: string
|
|
4335
|
+
pattern: ^\d+$
|
|
4336
|
+
itemId:
|
|
4337
|
+
anyOf:
|
|
4338
|
+
- type: integer
|
|
4339
|
+
exclusiveMinimum: 0
|
|
4340
|
+
- type: string
|
|
4341
|
+
pattern: ^\d+$
|
|
4342
|
+
itemText:
|
|
4343
|
+
type: string
|
|
4344
|
+
completed:
|
|
4345
|
+
type: boolean
|
|
4346
|
+
description: '`arguments` of the Chatty tool `complete_checklist_item` (POST /api/chatty-voice/tools/execute).'
|
|
4347
|
+
ChattyCompleteChecklistItemData:
|
|
4348
|
+
type: object
|
|
4349
|
+
properties:
|
|
4350
|
+
checklistId:
|
|
4351
|
+
type: integer
|
|
4352
|
+
itemId:
|
|
4353
|
+
type: integer
|
|
4354
|
+
completed:
|
|
4355
|
+
type: boolean
|
|
4356
|
+
required:
|
|
4357
|
+
- checklistId
|
|
4358
|
+
- itemId
|
|
4359
|
+
- completed
|
|
4360
|
+
description: '`data` of a successful `complete_checklist_item` call (`success: true`).'
|
|
4361
|
+
ChattySetChecklistItemAnswerArguments:
|
|
4362
|
+
type: object
|
|
4363
|
+
properties:
|
|
4364
|
+
checklistId:
|
|
4365
|
+
anyOf:
|
|
4366
|
+
- type: integer
|
|
4367
|
+
exclusiveMinimum: 0
|
|
4368
|
+
- type: string
|
|
4369
|
+
pattern: ^\d+$
|
|
4370
|
+
checklistName:
|
|
4371
|
+
type: string
|
|
4372
|
+
jobId:
|
|
4373
|
+
anyOf:
|
|
4374
|
+
- type: integer
|
|
4375
|
+
exclusiveMinimum: 0
|
|
4376
|
+
- type: string
|
|
4377
|
+
pattern: ^\d+$
|
|
4378
|
+
itemId:
|
|
4379
|
+
anyOf:
|
|
4380
|
+
- type: integer
|
|
4381
|
+
exclusiveMinimum: 0
|
|
4382
|
+
- type: string
|
|
4383
|
+
pattern: ^\d+$
|
|
4384
|
+
itemText:
|
|
4385
|
+
type: string
|
|
4386
|
+
value:
|
|
4387
|
+
type: string
|
|
4388
|
+
required:
|
|
4389
|
+
- value
|
|
4390
|
+
description: '`arguments` of the Chatty tool `set_checklist_item_answer` (POST /api/chatty-voice/tools/execute).'
|
|
4391
|
+
ChattySetChecklistItemAnswerData:
|
|
4392
|
+
type: object
|
|
4393
|
+
properties:
|
|
4394
|
+
checklistId:
|
|
4395
|
+
type: integer
|
|
4396
|
+
itemId:
|
|
4397
|
+
type: integer
|
|
4398
|
+
value:
|
|
4399
|
+
type: string
|
|
4400
|
+
required:
|
|
4401
|
+
- checklistId
|
|
4402
|
+
- itemId
|
|
4403
|
+
- value
|
|
4404
|
+
description: '`data` of a successful `set_checklist_item_answer` call (`success: true`).'
|
|
4405
|
+
ChattyAttachReferencePhotoToItemArguments:
|
|
4406
|
+
type: object
|
|
4407
|
+
properties:
|
|
4408
|
+
checklistId:
|
|
4409
|
+
anyOf:
|
|
4410
|
+
- type: integer
|
|
4411
|
+
exclusiveMinimum: 0
|
|
4412
|
+
- type: string
|
|
4413
|
+
pattern: ^\d+$
|
|
4414
|
+
checklistName:
|
|
4415
|
+
type: string
|
|
4416
|
+
jobId:
|
|
4417
|
+
anyOf:
|
|
4418
|
+
- type: integer
|
|
4419
|
+
exclusiveMinimum: 0
|
|
4420
|
+
- type: string
|
|
4421
|
+
pattern: ^\d+$
|
|
4422
|
+
itemId:
|
|
4423
|
+
anyOf:
|
|
4424
|
+
- type: integer
|
|
4425
|
+
exclusiveMinimum: 0
|
|
4426
|
+
- type: string
|
|
4427
|
+
pattern: ^\d+$
|
|
4428
|
+
itemText:
|
|
4429
|
+
type: string
|
|
4430
|
+
photoId:
|
|
4431
|
+
anyOf:
|
|
4432
|
+
- type: integer
|
|
4433
|
+
exclusiveMinimum: 0
|
|
4434
|
+
- type: string
|
|
4435
|
+
pattern: ^\d+$
|
|
4436
|
+
caption:
|
|
4437
|
+
type: string
|
|
4438
|
+
required:
|
|
4439
|
+
- photoId
|
|
4440
|
+
description: '`arguments` of the Chatty tool `attach_reference_photo_to_item` (POST /api/chatty-voice/tools/execute).'
|
|
4441
|
+
ChattyAttachReferencePhotoToItemData:
|
|
4442
|
+
type: object
|
|
4443
|
+
properties:
|
|
4444
|
+
checklistId:
|
|
4445
|
+
type: integer
|
|
4446
|
+
itemId:
|
|
4447
|
+
type: integer
|
|
4448
|
+
referenceMedia:
|
|
4449
|
+
type: array
|
|
4450
|
+
items:
|
|
4451
|
+
type: object
|
|
4452
|
+
properties:
|
|
4453
|
+
assetId:
|
|
4454
|
+
type: string
|
|
4455
|
+
minLength: 1
|
|
4456
|
+
maxLength: 64
|
|
4457
|
+
caption:
|
|
4458
|
+
type:
|
|
4459
|
+
- string
|
|
4460
|
+
- 'null'
|
|
4461
|
+
maxLength: 300
|
|
4462
|
+
order:
|
|
4463
|
+
type: integer
|
|
4464
|
+
minimum: 0
|
|
4465
|
+
required:
|
|
4466
|
+
- assetId
|
|
4467
|
+
required:
|
|
4468
|
+
- checklistId
|
|
4469
|
+
- itemId
|
|
4470
|
+
- referenceMedia
|
|
4471
|
+
description: '`data` of a successful `attach_reference_photo_to_item` call (`success: true`).'
|
|
4472
|
+
ChattyDraftChecklistFromJobPhotosArguments:
|
|
4473
|
+
type: object
|
|
4474
|
+
properties:
|
|
4475
|
+
jobId:
|
|
4476
|
+
anyOf:
|
|
4477
|
+
- type: integer
|
|
4478
|
+
exclusiveMinimum: 0
|
|
4479
|
+
- type: string
|
|
4480
|
+
pattern: ^\d+$
|
|
4481
|
+
name:
|
|
4482
|
+
type: string
|
|
4483
|
+
create:
|
|
4484
|
+
type: boolean
|
|
4485
|
+
description: '`arguments` of the Chatty tool `draft_checklist_from_job_photos` (POST /api/chatty-voice/tools/execute).'
|
|
4486
|
+
ChattyDraftChecklistFromJobPhotosData:
|
|
4487
|
+
type: object
|
|
4488
|
+
properties:
|
|
4489
|
+
id:
|
|
4490
|
+
type: integer
|
|
4491
|
+
jobId:
|
|
4492
|
+
type: integer
|
|
4493
|
+
name:
|
|
4494
|
+
type: string
|
|
4495
|
+
items:
|
|
4496
|
+
type: array
|
|
4497
|
+
items:
|
|
4498
|
+
type: object
|
|
4499
|
+
properties:
|
|
4500
|
+
itemText:
|
|
4501
|
+
type: string
|
|
4502
|
+
photos:
|
|
4503
|
+
type: integer
|
|
4504
|
+
required:
|
|
4505
|
+
- itemText
|
|
4506
|
+
- photos
|
|
4507
|
+
unsortedPhotos:
|
|
4508
|
+
type: integer
|
|
4509
|
+
created:
|
|
4510
|
+
type: boolean
|
|
4511
|
+
required:
|
|
4512
|
+
- name
|
|
4513
|
+
- items
|
|
4514
|
+
- unsortedPhotos
|
|
4515
|
+
- created
|
|
4516
|
+
description: '`data` of a successful `draft_checklist_from_job_photos` call (`success: true`).'
|
|
4517
|
+
AssetInitUploadRequest:
|
|
4518
|
+
type: object
|
|
4519
|
+
properties:
|
|
4520
|
+
filename:
|
|
4521
|
+
anyOf:
|
|
4522
|
+
- type: string
|
|
4523
|
+
maxLength: 10000
|
|
4524
|
+
- type: number
|
|
4525
|
+
- type: 'null'
|
|
4526
|
+
byteSize:
|
|
4527
|
+
anyOf:
|
|
4528
|
+
- type: number
|
|
4529
|
+
- type: string
|
|
4530
|
+
maxLength: 10000
|
|
4531
|
+
- type: 'null'
|
|
4532
|
+
clientQueueId:
|
|
4533
|
+
anyOf:
|
|
4534
|
+
- type: string
|
|
4535
|
+
maxLength: 10000
|
|
4536
|
+
- type: number
|
|
4537
|
+
- type: 'null'
|
|
4538
|
+
pendingMetadata:
|
|
4539
|
+
type:
|
|
4540
|
+
- object
|
|
4541
|
+
- 'null'
|
|
4542
|
+
additionalProperties: {}
|
|
4543
|
+
mimeType:
|
|
4544
|
+
anyOf:
|
|
4545
|
+
- type: string
|
|
4546
|
+
maxLength: 10000
|
|
4547
|
+
- type: number
|
|
4548
|
+
- type: 'null'
|
|
4549
|
+
contentType:
|
|
4550
|
+
anyOf:
|
|
4551
|
+
- type: string
|
|
4552
|
+
maxLength: 10000
|
|
4553
|
+
- type: number
|
|
4554
|
+
- type: 'null'
|
|
4555
|
+
poster:
|
|
4556
|
+
type:
|
|
4557
|
+
- object
|
|
4558
|
+
- 'null'
|
|
4559
|
+
properties:
|
|
4560
|
+
contentType:
|
|
4561
|
+
type: string
|
|
4562
|
+
enum:
|
|
4563
|
+
- image/jpeg
|
|
4564
|
+
byteSize:
|
|
4565
|
+
type: integer
|
|
4566
|
+
exclusiveMinimum: 0
|
|
4567
|
+
maximum: 2097152
|
|
4568
|
+
required:
|
|
4569
|
+
- contentType
|
|
4570
|
+
- byteSize
|
|
4571
|
+
description: >-
|
|
4572
|
+
POST /api/assets/init-upload body. `filename` and `mimeType` (alias `contentType`) are required by the handler.
|
|
4573
|
+
`poster` is accepted only when the upload's content type is `video/*`: a JPEG frame of at most 2 MiB the client
|
|
4574
|
+
renders locally and PUTs to `posterUploadUrl`; on any other content type the response is 400
|
|
4575
|
+
`poster_requires_video`.
|
|
4576
|
+
AssetInitUploadResponse:
|
|
4577
|
+
type: object
|
|
4578
|
+
properties:
|
|
4579
|
+
assetId:
|
|
4580
|
+
type: string
|
|
4581
|
+
key:
|
|
4582
|
+
type: string
|
|
4583
|
+
description: Storage key of the original (`org/<orgId>/assets/<assetId>/original`).
|
|
4584
|
+
putUrl:
|
|
4585
|
+
type: string
|
|
4586
|
+
description: Presigned PUT for the original. Absent when `alreadyCompleted` is true.
|
|
4587
|
+
headersToSend:
|
|
4588
|
+
type: object
|
|
4589
|
+
additionalProperties:
|
|
4590
|
+
type: string
|
|
4591
|
+
putUrlExpiresAt:
|
|
4592
|
+
type: string
|
|
4593
|
+
description: ISO instant; also the expiry of `posterUploadUrl`.
|
|
4594
|
+
reused:
|
|
4595
|
+
type: boolean
|
|
4596
|
+
alreadyCompleted:
|
|
4597
|
+
type: boolean
|
|
4598
|
+
posterUploadUrl:
|
|
4599
|
+
type: string
|
|
4600
|
+
description: 'Presigned PUT (Content-Type: image/jpeg) for the poster frame. Present only when `poster` was sent.'
|
|
4601
|
+
posterKey:
|
|
4602
|
+
type: string
|
|
4603
|
+
description: 'The poster''s storage key: the asset prefix with `/original` replaced by `/thumb_320`.'
|
|
4604
|
+
required:
|
|
4605
|
+
- assetId
|
|
4606
|
+
- key
|
|
4607
|
+
AssetCompleteUploadRequest:
|
|
4608
|
+
type: object
|
|
4609
|
+
properties:
|
|
4610
|
+
assetId:
|
|
4611
|
+
anyOf:
|
|
4612
|
+
- type: string
|
|
4613
|
+
maxLength: 10000
|
|
4614
|
+
- type: number
|
|
4615
|
+
- type: 'null'
|
|
4616
|
+
clientQueueId:
|
|
4617
|
+
anyOf:
|
|
4618
|
+
- type: string
|
|
4619
|
+
maxLength: 10000
|
|
4620
|
+
- type: number
|
|
4621
|
+
- type: 'null'
|
|
4622
|
+
gpsLatitude:
|
|
4623
|
+
anyOf:
|
|
4624
|
+
- type: number
|
|
4625
|
+
- type: string
|
|
4626
|
+
maxLength: 10000
|
|
4627
|
+
- type: 'null'
|
|
4628
|
+
gpsLongitude:
|
|
4629
|
+
anyOf:
|
|
4630
|
+
- type: number
|
|
4631
|
+
- type: string
|
|
4632
|
+
maxLength: 10000
|
|
4633
|
+
- type: 'null'
|
|
4634
|
+
gpsAddress:
|
|
4635
|
+
anyOf:
|
|
4636
|
+
- type: string
|
|
4637
|
+
maxLength: 10000
|
|
4638
|
+
- type: number
|
|
4639
|
+
- type: 'null'
|
|
4640
|
+
captureTimestamp:
|
|
4641
|
+
anyOf:
|
|
4642
|
+
- type: string
|
|
4643
|
+
- type: number
|
|
4644
|
+
- type: string
|
|
4645
|
+
format: date-time
|
|
4646
|
+
- type: 'null'
|
|
4647
|
+
deviceInfo:
|
|
4648
|
+
anyOf:
|
|
4649
|
+
- type: string
|
|
4650
|
+
maxLength: 10000
|
|
4651
|
+
- type: number
|
|
4652
|
+
- type: 'null'
|
|
4653
|
+
overlayApplied:
|
|
4654
|
+
anyOf:
|
|
4655
|
+
- type: boolean
|
|
4656
|
+
- type: string
|
|
4657
|
+
- type: number
|
|
4658
|
+
- type: 'null'
|
|
4659
|
+
hasMarkup:
|
|
4660
|
+
anyOf:
|
|
4661
|
+
- type: boolean
|
|
4662
|
+
- type: string
|
|
4663
|
+
- type: number
|
|
4664
|
+
- type: 'null'
|
|
4665
|
+
tags:
|
|
4666
|
+
type:
|
|
4667
|
+
- array
|
|
4668
|
+
- 'null'
|
|
4669
|
+
items: {}
|
|
4670
|
+
projectId:
|
|
4671
|
+
anyOf:
|
|
4672
|
+
- type: number
|
|
4673
|
+
- type: string
|
|
4674
|
+
maxLength: 10000
|
|
4675
|
+
- type: 'null'
|
|
4676
|
+
contactId:
|
|
4677
|
+
anyOf:
|
|
4678
|
+
- type: number
|
|
4679
|
+
- type: string
|
|
4680
|
+
maxLength: 10000
|
|
4681
|
+
- type: 'null'
|
|
4682
|
+
folderId:
|
|
4683
|
+
anyOf:
|
|
4684
|
+
- type: string
|
|
4685
|
+
maxLength: 10000
|
|
4686
|
+
- type: number
|
|
4687
|
+
- type: 'null'
|
|
4688
|
+
description:
|
|
4689
|
+
anyOf:
|
|
4690
|
+
- type: string
|
|
4691
|
+
maxLength: 200000
|
|
4692
|
+
- type: number
|
|
4693
|
+
- type: 'null'
|
|
4694
|
+
serverOverlay:
|
|
4695
|
+
type:
|
|
4696
|
+
- object
|
|
4697
|
+
- 'null'
|
|
4698
|
+
additionalProperties: {}
|
|
4699
|
+
capturePose:
|
|
4700
|
+
type:
|
|
4701
|
+
- object
|
|
4702
|
+
- 'null'
|
|
4703
|
+
additionalProperties: {}
|
|
4704
|
+
posterUploaded:
|
|
4705
|
+
anyOf:
|
|
4706
|
+
- type: boolean
|
|
4707
|
+
- type: string
|
|
4708
|
+
- type: number
|
|
4709
|
+
- type: 'null'
|
|
4710
|
+
description: >-
|
|
4711
|
+
POST /api/assets/complete-upload body. `assetId` or `clientQueueId` is required. `posterUploaded: true` (video
|
|
4712
|
+
uploads only) asks the server to verify the poster frame PUT to `posterUploadUrl` and use it as the thumbnail at
|
|
4713
|
+
once; a missing, oversized or non-JPEG poster never fails the upload — it completes without it.
|
|
4714
|
+
AssetCompleteUploadResponse:
|
|
4715
|
+
type: object
|
|
4716
|
+
properties:
|
|
4717
|
+
ok:
|
|
4718
|
+
type: boolean
|
|
4719
|
+
enum:
|
|
4720
|
+
- true
|
|
4721
|
+
assetId:
|
|
3527
4722
|
type: string
|
|
3528
|
-
|
|
4723
|
+
alreadyCompleted:
|
|
4724
|
+
type: boolean
|
|
4725
|
+
actions:
|
|
3529
4726
|
type: array
|
|
3530
4727
|
items:
|
|
3531
|
-
type:
|
|
4728
|
+
type: string
|
|
4729
|
+
description: >-
|
|
4730
|
+
Human-readable log of what finalize did (status change, links, pipeline dispatch, `thumbnail: client poster
|
|
4731
|
+
accepted (thumb_320)`).
|
|
3532
4732
|
required:
|
|
3533
4733
|
- ok
|
|
3534
|
-
-
|
|
3535
|
-
-
|
|
4734
|
+
- assetId
|
|
4735
|
+
- alreadyCompleted
|
|
4736
|
+
- actions
|
|
3536
4737
|
parameters: {}
|
|
3537
4738
|
paths:
|
|
3538
4739
|
/api/version:
|
|
@@ -3602,6 +4803,181 @@ paths:
|
|
|
3602
4803
|
application/json:
|
|
3603
4804
|
schema:
|
|
3604
4805
|
$ref: '#/components/schemas/UpgradeRequiredEnvelope'
|
|
4806
|
+
/api/impersonate/native-read-ticket:
|
|
4807
|
+
post:
|
|
4808
|
+
tags:
|
|
4809
|
+
- auth
|
|
4810
|
+
summary: Authorize an exact browser-native download URL for the current support session.
|
|
4811
|
+
description: >-
|
|
4812
|
+
Requires the current typed support session and X-Support-Impersonation: 1. A narrow fixed GET allowlist only;
|
|
4813
|
+
record permissions still run on every GET. Admission lasts at most 15 minutes and never outlives the original
|
|
4814
|
+
one-hour support grant. The same browser session is required; URL alone is insufficient. GET/Range retries
|
|
4815
|
+
recheck current authority. Response is no-store with no-referrer. No user bearer is issued.
|
|
4816
|
+
security:
|
|
4817
|
+
- BrowserSession: []
|
|
4818
|
+
parameters:
|
|
4819
|
+
- schema:
|
|
4820
|
+
type: string
|
|
4821
|
+
enum:
|
|
4822
|
+
- '1'
|
|
4823
|
+
required: true
|
|
4824
|
+
name: X-Support-Impersonation
|
|
4825
|
+
in: header
|
|
4826
|
+
requestBody:
|
|
4827
|
+
required: true
|
|
4828
|
+
content:
|
|
4829
|
+
application/json:
|
|
4830
|
+
schema:
|
|
4831
|
+
type: object
|
|
4832
|
+
properties:
|
|
4833
|
+
url:
|
|
4834
|
+
type: string
|
|
4835
|
+
minLength: 1
|
|
4836
|
+
maxLength: 1024
|
|
4837
|
+
required:
|
|
4838
|
+
- url
|
|
4839
|
+
additionalProperties: false
|
|
4840
|
+
responses:
|
|
4841
|
+
'200':
|
|
4842
|
+
description: Exact relative URL and terminal admission deadline.
|
|
4843
|
+
content:
|
|
4844
|
+
application/json:
|
|
4845
|
+
schema:
|
|
4846
|
+
type: object
|
|
4847
|
+
properties:
|
|
4848
|
+
url:
|
|
4849
|
+
type: string
|
|
4850
|
+
minLength: 1
|
|
4851
|
+
maxLength: 8192
|
|
4852
|
+
expiresAt:
|
|
4853
|
+
type: integer
|
|
4854
|
+
exclusiveMinimum: 0
|
|
4855
|
+
required:
|
|
4856
|
+
- url
|
|
4857
|
+
- expiresAt
|
|
4858
|
+
additionalProperties: false
|
|
4859
|
+
'400':
|
|
4860
|
+
description: Unsupported destination or malformed request.
|
|
4861
|
+
'401':
|
|
4862
|
+
description: No authenticated session.
|
|
4863
|
+
'403':
|
|
4864
|
+
description: Support authority unavailable; explicit exit required.
|
|
4865
|
+
content:
|
|
4866
|
+
application/json:
|
|
4867
|
+
schema:
|
|
4868
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4869
|
+
'503':
|
|
4870
|
+
description: Authentication lookup temporarily unavailable.
|
|
4871
|
+
content:
|
|
4872
|
+
application/json:
|
|
4873
|
+
schema:
|
|
4874
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4875
|
+
/api/events/ticket:
|
|
4876
|
+
post:
|
|
4877
|
+
tags:
|
|
4878
|
+
- auth
|
|
4879
|
+
summary: Create a short-lived stream-only admission ticket from the current authenticated actor.
|
|
4880
|
+
description: >-
|
|
4881
|
+
Connect within at most 60 seconds using GET /api/events?ticket=.... The ticket preserves the real principal,
|
|
4882
|
+
effective target and original login/impersonation deadlines; it cannot authenticate ordinary API requests. It is
|
|
4883
|
+
never a target-user bearer token. Response Cache-Control is no-store. An invalid temporary context returns 403
|
|
4884
|
+
and must be explicitly exited, without dropping the real login.
|
|
4885
|
+
security:
|
|
4886
|
+
- UserBearer: []
|
|
4887
|
+
- BrowserSession: []
|
|
4888
|
+
- BrowserAuthCookie: []
|
|
4889
|
+
requestBody:
|
|
4890
|
+
required: false
|
|
4891
|
+
content:
|
|
4892
|
+
application/json:
|
|
4893
|
+
schema:
|
|
4894
|
+
type: object
|
|
4895
|
+
properties: {}
|
|
4896
|
+
additionalProperties: false
|
|
4897
|
+
responses:
|
|
4898
|
+
'200':
|
|
4899
|
+
description: Opaque ticket, usable only for short-lived stream admission.
|
|
4900
|
+
content:
|
|
4901
|
+
application/json:
|
|
4902
|
+
schema:
|
|
4903
|
+
$ref: '#/components/schemas/EventStreamTicketResponse'
|
|
4904
|
+
'400':
|
|
4905
|
+
description: Unexpected request fields.
|
|
4906
|
+
content:
|
|
4907
|
+
application/json:
|
|
4908
|
+
schema:
|
|
4909
|
+
type: object
|
|
4910
|
+
properties:
|
|
4911
|
+
message:
|
|
4912
|
+
type: string
|
|
4913
|
+
errors:
|
|
4914
|
+
type: array
|
|
4915
|
+
items: {}
|
|
4916
|
+
required:
|
|
4917
|
+
- message
|
|
4918
|
+
- errors
|
|
4919
|
+
'401':
|
|
4920
|
+
description: Real principal is missing, deleted, revoked or expired.
|
|
4921
|
+
content:
|
|
4922
|
+
application/json:
|
|
4923
|
+
schema:
|
|
4924
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4925
|
+
'403':
|
|
4926
|
+
description: Impersonation is unavailable; explicitly exit before continuing as the real principal.
|
|
4927
|
+
content:
|
|
4928
|
+
application/json:
|
|
4929
|
+
schema:
|
|
4930
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4931
|
+
'503':
|
|
4932
|
+
description: Authentication lookup unavailable; retry without discarding credentials.
|
|
4933
|
+
content:
|
|
4934
|
+
application/json:
|
|
4935
|
+
schema:
|
|
4936
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4937
|
+
/api/events:
|
|
4938
|
+
get:
|
|
4939
|
+
tags:
|
|
4940
|
+
- auth
|
|
4941
|
+
summary: Open the authenticated server-sent event stream.
|
|
4942
|
+
description: >-
|
|
4943
|
+
New clients use a stream-only ticket in the ticket query parameter. Legacy authenticated connections remain
|
|
4944
|
+
supported. A supplied invalid ticket never falls back to another credential. Current user, session and
|
|
4945
|
+
revocation state is rechecked before admission and each delivery batch/heartbeat. Original authority deadlines
|
|
4946
|
+
also close idle or blocked sockets. A stream:resync hint means refresh authorized snapshots; this stream is not
|
|
4947
|
+
a replay log.
|
|
4948
|
+
parameters:
|
|
4949
|
+
- schema:
|
|
4950
|
+
type: string
|
|
4951
|
+
minLength: 1
|
|
4952
|
+
maxLength: 8192
|
|
4953
|
+
required: false
|
|
4954
|
+
name: ticket
|
|
4955
|
+
in: query
|
|
4956
|
+
responses:
|
|
4957
|
+
'200':
|
|
4958
|
+
description: Bounded SSE hints and heartbeat comments until disconnect or authority expiry.
|
|
4959
|
+
content:
|
|
4960
|
+
text/event-stream:
|
|
4961
|
+
schema:
|
|
4962
|
+
type: string
|
|
4963
|
+
'401':
|
|
4964
|
+
description: Ticket/source authentication expired, revoked or invalid.
|
|
4965
|
+
content:
|
|
4966
|
+
application/json:
|
|
4967
|
+
schema:
|
|
4968
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4969
|
+
'403':
|
|
4970
|
+
description: Legacy temporary context is unavailable.
|
|
4971
|
+
content:
|
|
4972
|
+
application/json:
|
|
4973
|
+
schema:
|
|
4974
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4975
|
+
'503':
|
|
4976
|
+
description: Authorization temporarily unavailable; retry with backoff.
|
|
4977
|
+
content:
|
|
4978
|
+
application/json:
|
|
4979
|
+
schema:
|
|
4980
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
3605
4981
|
/api/jobs/{jobId}/scans/mobile-upload:
|
|
3606
4982
|
post:
|
|
3607
4983
|
summary: iOS LiDAR scan upload. v2 fields are additive — v1 payloads remain byte-identical.
|
|
@@ -7432,4 +8808,178 @@ paths:
|
|
|
7432
8808
|
application/json:
|
|
7433
8809
|
schema:
|
|
7434
8810
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8811
|
+
/api/projects/{projectId}/documents/draft-from-walkthrough:
|
|
8812
|
+
post:
|
|
8813
|
+
tags:
|
|
8814
|
+
- checklists
|
|
8815
|
+
summary: Turn a voice walk-through (timed transcript + photos) into a checklist draft.
|
|
8816
|
+
description: >-
|
|
8817
|
+
Returns a DRAFT only; nothing is saved to the job. The phone's review screen creates the checklist with POST
|
|
8818
|
+
/api/projects/{projectId}/documents (custom `items`, carrying `referenceMedia`). Sections come from, in order:
|
|
8819
|
+
the camera pose of a scan, the room the tech named (the item's words, the photo's room chip, a section opened),
|
|
8820
|
+
the AI Image Sort's room for the item's photo (add-on), then the last room mentioned; items with no signal go to
|
|
8821
|
+
Not sure. GPS is never used. Item types come from spoken hints only (checkbox unless "photo required", "yes or
|
|
8822
|
+
no" or a reading; "required" sets the flag). Reference photos are the shots taken from 10 s before a sentence to
|
|
8823
|
+
20 s after it. 200 when the draft is ready at once; 202 with `runId` while the photos go through an AI vision
|
|
8824
|
+
sort (poll the runs route). Requires the job (404 otherwise) and the Create Checklists permission (403). Photos
|
|
8825
|
+
that are not the organization's assets are left out.
|
|
8826
|
+
parameters:
|
|
8827
|
+
- &ref_3
|
|
8828
|
+
name: projectId
|
|
8829
|
+
in: path
|
|
8830
|
+
required: true
|
|
8831
|
+
schema:
|
|
8832
|
+
type: integer
|
|
8833
|
+
minimum: 1
|
|
8834
|
+
requestBody:
|
|
8835
|
+
required: true
|
|
8836
|
+
content:
|
|
8837
|
+
application/json:
|
|
8838
|
+
schema:
|
|
8839
|
+
$ref: '#/components/schemas/WalkthroughDraftRequest'
|
|
8840
|
+
responses:
|
|
8841
|
+
'200':
|
|
8842
|
+
description: The draft (status completed).
|
|
8843
|
+
content:
|
|
8844
|
+
application/json:
|
|
8845
|
+
schema:
|
|
8846
|
+
$ref: '#/components/schemas/WalkthroughDraftResponse'
|
|
8847
|
+
'202':
|
|
8848
|
+
description: A vision sort runs first (status running); poll GET …/draft-from-walkthrough/runs/{runId}.
|
|
8849
|
+
content:
|
|
8850
|
+
application/json:
|
|
8851
|
+
schema:
|
|
8852
|
+
$ref: '#/components/schemas/WalkthroughDraftResponse'
|
|
8853
|
+
'400':
|
|
8854
|
+
description: No transcript, or a wrong shape.
|
|
8855
|
+
content:
|
|
8856
|
+
application/json:
|
|
8857
|
+
schema:
|
|
8858
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8859
|
+
'401':
|
|
8860
|
+
description: Authentication required.
|
|
8861
|
+
'403':
|
|
8862
|
+
description: The role cannot create checklists.
|
|
8863
|
+
content:
|
|
8864
|
+
application/json:
|
|
8865
|
+
schema:
|
|
8866
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8867
|
+
'404':
|
|
8868
|
+
description: Job not found.
|
|
8869
|
+
content:
|
|
8870
|
+
application/json:
|
|
8871
|
+
schema:
|
|
8872
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8873
|
+
'502':
|
|
8874
|
+
description: The AI's answer could not be used.
|
|
8875
|
+
content:
|
|
8876
|
+
application/json:
|
|
8877
|
+
schema:
|
|
8878
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8879
|
+
'503':
|
|
8880
|
+
description: AI is not configured.
|
|
8881
|
+
content:
|
|
8882
|
+
application/json:
|
|
8883
|
+
schema:
|
|
8884
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8885
|
+
/api/projects/{projectId}/documents/draft-from-walkthrough/runs/{runId}:
|
|
8886
|
+
get:
|
|
8887
|
+
tags:
|
|
8888
|
+
- checklists
|
|
8889
|
+
summary: Poll a walk-through draft that waits for an AI vision sort.
|
|
8890
|
+
description: >-
|
|
8891
|
+
Status `running` (with the sort's progress in `sortRun`) until the draft is ready, then `completed` with
|
|
8892
|
+
`draft`, or `failed` with `message`. A run that stops making progress is marked failed on the next poll and
|
|
8893
|
+
never re-run.
|
|
8894
|
+
parameters:
|
|
8895
|
+
- *ref_3
|
|
8896
|
+
- name: runId
|
|
8897
|
+
in: path
|
|
8898
|
+
required: true
|
|
8899
|
+
schema:
|
|
8900
|
+
type: integer
|
|
8901
|
+
minimum: 1
|
|
8902
|
+
responses:
|
|
8903
|
+
'200':
|
|
8904
|
+
description: The run's envelope.
|
|
8905
|
+
content:
|
|
8906
|
+
application/json:
|
|
8907
|
+
schema:
|
|
8908
|
+
$ref: '#/components/schemas/WalkthroughDraftResponse'
|
|
8909
|
+
'401':
|
|
8910
|
+
description: Authentication required.
|
|
8911
|
+
'403':
|
|
8912
|
+
description: The role cannot create checklists.
|
|
8913
|
+
content:
|
|
8914
|
+
application/json:
|
|
8915
|
+
schema:
|
|
8916
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8917
|
+
'404':
|
|
8918
|
+
description: Job or run not found.
|
|
8919
|
+
content:
|
|
8920
|
+
application/json:
|
|
8921
|
+
schema:
|
|
8922
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8923
|
+
/api/assets/init-upload:
|
|
8924
|
+
post:
|
|
8925
|
+
summary: 'Open a direct-to-S3 upload: presigned PUT for the original, and for a video''s optional poster frame.'
|
|
8926
|
+
tags:
|
|
8927
|
+
- photos
|
|
8928
|
+
parameters:
|
|
8929
|
+
- *ref_0
|
|
8930
|
+
requestBody:
|
|
8931
|
+
required: true
|
|
8932
|
+
content:
|
|
8933
|
+
application/json:
|
|
8934
|
+
schema:
|
|
8935
|
+
$ref: '#/components/schemas/AssetInitUploadRequest'
|
|
8936
|
+
responses:
|
|
8937
|
+
'200':
|
|
8938
|
+
description: Presigned URL(s) and the asset id to pass to complete-upload.
|
|
8939
|
+
content:
|
|
8940
|
+
application/json:
|
|
8941
|
+
schema:
|
|
8942
|
+
$ref: '#/components/schemas/AssetInitUploadResponse'
|
|
8943
|
+
'400':
|
|
8944
|
+
description: Missing filename/mimeType, or a `poster` on a non-video upload (`poster_requires_video`).
|
|
8945
|
+
content:
|
|
8946
|
+
application/json:
|
|
8947
|
+
schema:
|
|
8948
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8949
|
+
'401':
|
|
8950
|
+
description: Authentication required.
|
|
8951
|
+
'413':
|
|
8952
|
+
description: File larger than the single-PUT limit.
|
|
8953
|
+
/api/assets/complete-upload:
|
|
8954
|
+
post:
|
|
8955
|
+
summary: Mark a direct upload complete (idempotent); link it to a job/contact; dispatch processing.
|
|
8956
|
+
tags:
|
|
8957
|
+
- photos
|
|
8958
|
+
parameters:
|
|
8959
|
+
- *ref_0
|
|
8960
|
+
requestBody:
|
|
8961
|
+
required: true
|
|
8962
|
+
content:
|
|
8963
|
+
application/json:
|
|
8964
|
+
schema:
|
|
8965
|
+
$ref: '#/components/schemas/AssetCompleteUploadRequest'
|
|
8966
|
+
responses:
|
|
8967
|
+
'200':
|
|
8968
|
+
description: Finalized (or already was).
|
|
8969
|
+
content:
|
|
8970
|
+
application/json:
|
|
8971
|
+
schema:
|
|
8972
|
+
$ref: '#/components/schemas/AssetCompleteUploadResponse'
|
|
8973
|
+
'400':
|
|
8974
|
+
description: Neither assetId nor clientQueueId.
|
|
8975
|
+
content:
|
|
8976
|
+
application/json:
|
|
8977
|
+
schema:
|
|
8978
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8979
|
+
'401':
|
|
8980
|
+
description: Authentication required.
|
|
8981
|
+
'403':
|
|
8982
|
+
description: Attaching to a job/contact without the Upload Files permission.
|
|
8983
|
+
'404':
|
|
8984
|
+
description: Asset, job or contact not found in the organization.
|
|
7435
8985
|
webhooks: {}
|