@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.
- package/openapi.json +1915 -51
- package/openapi.yaml +1279 -11
- package/package.json +1 -1
- package/types.d.ts +696 -1
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.
|
|
4
|
+
version: 1.6.1
|
|
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.
|
|
106
|
+
example: 1.6.1
|
|
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:
|
|
@@ -3519,20 +3556,964 @@ components:
|
|
|
3519
3556
|
DoorwayEditResult:
|
|
3520
3557
|
type: object
|
|
3521
3558
|
properties:
|
|
3522
|
-
ok:
|
|
3559
|
+
ok:
|
|
3560
|
+
type: boolean
|
|
3561
|
+
enum:
|
|
3562
|
+
- true
|
|
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:
|
|
3523
4484
|
type: boolean
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
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:
|
|
3527
4494
|
type: string
|
|
3528
|
-
|
|
4495
|
+
items:
|
|
3529
4496
|
type: array
|
|
3530
4497
|
items:
|
|
3531
|
-
type:
|
|
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
|
|
3532
4511
|
required:
|
|
3533
|
-
-
|
|
3534
|
-
-
|
|
3535
|
-
-
|
|
4512
|
+
- name
|
|
4513
|
+
- items
|
|
4514
|
+
- unsortedPhotos
|
|
4515
|
+
- created
|
|
4516
|
+
description: '`data` of a successful `draft_checklist_from_job_photos` call (`success: true`).'
|
|
3536
4517
|
parameters: {}
|
|
3537
4518
|
paths:
|
|
3538
4519
|
/api/version:
|
|
@@ -3602,6 +4583,181 @@ paths:
|
|
|
3602
4583
|
application/json:
|
|
3603
4584
|
schema:
|
|
3604
4585
|
$ref: '#/components/schemas/UpgradeRequiredEnvelope'
|
|
4586
|
+
/api/impersonate/native-read-ticket:
|
|
4587
|
+
post:
|
|
4588
|
+
tags:
|
|
4589
|
+
- auth
|
|
4590
|
+
summary: Authorize an exact browser-native download URL for the current support session.
|
|
4591
|
+
description: >-
|
|
4592
|
+
Requires the current typed support session and X-Support-Impersonation: 1. A narrow fixed GET allowlist only;
|
|
4593
|
+
record permissions still run on every GET. Admission lasts at most 15 minutes and never outlives the original
|
|
4594
|
+
one-hour support grant. The same browser session is required; URL alone is insufficient. GET/Range retries
|
|
4595
|
+
recheck current authority. Response is no-store with no-referrer. No user bearer is issued.
|
|
4596
|
+
security:
|
|
4597
|
+
- BrowserSession: []
|
|
4598
|
+
parameters:
|
|
4599
|
+
- schema:
|
|
4600
|
+
type: string
|
|
4601
|
+
enum:
|
|
4602
|
+
- '1'
|
|
4603
|
+
required: true
|
|
4604
|
+
name: X-Support-Impersonation
|
|
4605
|
+
in: header
|
|
4606
|
+
requestBody:
|
|
4607
|
+
required: true
|
|
4608
|
+
content:
|
|
4609
|
+
application/json:
|
|
4610
|
+
schema:
|
|
4611
|
+
type: object
|
|
4612
|
+
properties:
|
|
4613
|
+
url:
|
|
4614
|
+
type: string
|
|
4615
|
+
minLength: 1
|
|
4616
|
+
maxLength: 1024
|
|
4617
|
+
required:
|
|
4618
|
+
- url
|
|
4619
|
+
additionalProperties: false
|
|
4620
|
+
responses:
|
|
4621
|
+
'200':
|
|
4622
|
+
description: Exact relative URL and terminal admission deadline.
|
|
4623
|
+
content:
|
|
4624
|
+
application/json:
|
|
4625
|
+
schema:
|
|
4626
|
+
type: object
|
|
4627
|
+
properties:
|
|
4628
|
+
url:
|
|
4629
|
+
type: string
|
|
4630
|
+
minLength: 1
|
|
4631
|
+
maxLength: 8192
|
|
4632
|
+
expiresAt:
|
|
4633
|
+
type: integer
|
|
4634
|
+
exclusiveMinimum: 0
|
|
4635
|
+
required:
|
|
4636
|
+
- url
|
|
4637
|
+
- expiresAt
|
|
4638
|
+
additionalProperties: false
|
|
4639
|
+
'400':
|
|
4640
|
+
description: Unsupported destination or malformed request.
|
|
4641
|
+
'401':
|
|
4642
|
+
description: No authenticated session.
|
|
4643
|
+
'403':
|
|
4644
|
+
description: Support authority unavailable; explicit exit required.
|
|
4645
|
+
content:
|
|
4646
|
+
application/json:
|
|
4647
|
+
schema:
|
|
4648
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4649
|
+
'503':
|
|
4650
|
+
description: Authentication lookup temporarily unavailable.
|
|
4651
|
+
content:
|
|
4652
|
+
application/json:
|
|
4653
|
+
schema:
|
|
4654
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4655
|
+
/api/events/ticket:
|
|
4656
|
+
post:
|
|
4657
|
+
tags:
|
|
4658
|
+
- auth
|
|
4659
|
+
summary: Create a short-lived stream-only admission ticket from the current authenticated actor.
|
|
4660
|
+
description: >-
|
|
4661
|
+
Connect within at most 60 seconds using GET /api/events?ticket=.... The ticket preserves the real principal,
|
|
4662
|
+
effective target and original login/impersonation deadlines; it cannot authenticate ordinary API requests. It is
|
|
4663
|
+
never a target-user bearer token. Response Cache-Control is no-store. An invalid temporary context returns 403
|
|
4664
|
+
and must be explicitly exited, without dropping the real login.
|
|
4665
|
+
security:
|
|
4666
|
+
- UserBearer: []
|
|
4667
|
+
- BrowserSession: []
|
|
4668
|
+
- BrowserAuthCookie: []
|
|
4669
|
+
requestBody:
|
|
4670
|
+
required: false
|
|
4671
|
+
content:
|
|
4672
|
+
application/json:
|
|
4673
|
+
schema:
|
|
4674
|
+
type: object
|
|
4675
|
+
properties: {}
|
|
4676
|
+
additionalProperties: false
|
|
4677
|
+
responses:
|
|
4678
|
+
'200':
|
|
4679
|
+
description: Opaque ticket, usable only for short-lived stream admission.
|
|
4680
|
+
content:
|
|
4681
|
+
application/json:
|
|
4682
|
+
schema:
|
|
4683
|
+
$ref: '#/components/schemas/EventStreamTicketResponse'
|
|
4684
|
+
'400':
|
|
4685
|
+
description: Unexpected request fields.
|
|
4686
|
+
content:
|
|
4687
|
+
application/json:
|
|
4688
|
+
schema:
|
|
4689
|
+
type: object
|
|
4690
|
+
properties:
|
|
4691
|
+
message:
|
|
4692
|
+
type: string
|
|
4693
|
+
errors:
|
|
4694
|
+
type: array
|
|
4695
|
+
items: {}
|
|
4696
|
+
required:
|
|
4697
|
+
- message
|
|
4698
|
+
- errors
|
|
4699
|
+
'401':
|
|
4700
|
+
description: Real principal is missing, deleted, revoked or expired.
|
|
4701
|
+
content:
|
|
4702
|
+
application/json:
|
|
4703
|
+
schema:
|
|
4704
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4705
|
+
'403':
|
|
4706
|
+
description: Impersonation is unavailable; explicitly exit before continuing as the real principal.
|
|
4707
|
+
content:
|
|
4708
|
+
application/json:
|
|
4709
|
+
schema:
|
|
4710
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4711
|
+
'503':
|
|
4712
|
+
description: Authentication lookup unavailable; retry without discarding credentials.
|
|
4713
|
+
content:
|
|
4714
|
+
application/json:
|
|
4715
|
+
schema:
|
|
4716
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4717
|
+
/api/events:
|
|
4718
|
+
get:
|
|
4719
|
+
tags:
|
|
4720
|
+
- auth
|
|
4721
|
+
summary: Open the authenticated server-sent event stream.
|
|
4722
|
+
description: >-
|
|
4723
|
+
New clients use a stream-only ticket in the ticket query parameter. Legacy authenticated connections remain
|
|
4724
|
+
supported. A supplied invalid ticket never falls back to another credential. Current user, session and
|
|
4725
|
+
revocation state is rechecked before admission and each delivery batch/heartbeat. Original authority deadlines
|
|
4726
|
+
also close idle or blocked sockets. A stream:resync hint means refresh authorized snapshots; this stream is not
|
|
4727
|
+
a replay log.
|
|
4728
|
+
parameters:
|
|
4729
|
+
- schema:
|
|
4730
|
+
type: string
|
|
4731
|
+
minLength: 1
|
|
4732
|
+
maxLength: 8192
|
|
4733
|
+
required: false
|
|
4734
|
+
name: ticket
|
|
4735
|
+
in: query
|
|
4736
|
+
responses:
|
|
4737
|
+
'200':
|
|
4738
|
+
description: Bounded SSE hints and heartbeat comments until disconnect or authority expiry.
|
|
4739
|
+
content:
|
|
4740
|
+
text/event-stream:
|
|
4741
|
+
schema:
|
|
4742
|
+
type: string
|
|
4743
|
+
'401':
|
|
4744
|
+
description: Ticket/source authentication expired, revoked or invalid.
|
|
4745
|
+
content:
|
|
4746
|
+
application/json:
|
|
4747
|
+
schema:
|
|
4748
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4749
|
+
'403':
|
|
4750
|
+
description: Legacy temporary context is unavailable.
|
|
4751
|
+
content:
|
|
4752
|
+
application/json:
|
|
4753
|
+
schema:
|
|
4754
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
4755
|
+
'503':
|
|
4756
|
+
description: Authorization temporarily unavailable; retry with backoff.
|
|
4757
|
+
content:
|
|
4758
|
+
application/json:
|
|
4759
|
+
schema:
|
|
4760
|
+
$ref: '#/components/schemas/StreamAuthenticationError'
|
|
3605
4761
|
/api/jobs/{jobId}/scans/mobile-upload:
|
|
3606
4762
|
post:
|
|
3607
4763
|
summary: iOS LiDAR scan upload. v2 fields are additive — v1 payloads remain byte-identical.
|
|
@@ -7432,4 +8588,116 @@ paths:
|
|
|
7432
8588
|
application/json:
|
|
7433
8589
|
schema:
|
|
7434
8590
|
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8591
|
+
/api/projects/{projectId}/documents/draft-from-walkthrough:
|
|
8592
|
+
post:
|
|
8593
|
+
tags:
|
|
8594
|
+
- checklists
|
|
8595
|
+
summary: Turn a voice walk-through (timed transcript + photos) into a checklist draft.
|
|
8596
|
+
description: >-
|
|
8597
|
+
Returns a DRAFT only; nothing is saved to the job. The phone's review screen creates the checklist with POST
|
|
8598
|
+
/api/projects/{projectId}/documents (custom `items`, carrying `referenceMedia`). Sections come from, in order:
|
|
8599
|
+
the camera pose of a scan, the room the tech named (the item's words, the photo's room chip, a section opened),
|
|
8600
|
+
the AI Image Sort's room for the item's photo (add-on), then the last room mentioned; items with no signal go to
|
|
8601
|
+
Not sure. GPS is never used. Item types come from spoken hints only (checkbox unless "photo required", "yes or
|
|
8602
|
+
no" or a reading; "required" sets the flag). Reference photos are the shots taken from 10 s before a sentence to
|
|
8603
|
+
20 s after it. 200 when the draft is ready at once; 202 with `runId` while the photos go through an AI vision
|
|
8604
|
+
sort (poll the runs route). Requires the job (404 otherwise) and the Create Checklists permission (403). Photos
|
|
8605
|
+
that are not the organization's assets are left out.
|
|
8606
|
+
parameters:
|
|
8607
|
+
- &ref_3
|
|
8608
|
+
name: projectId
|
|
8609
|
+
in: path
|
|
8610
|
+
required: true
|
|
8611
|
+
schema:
|
|
8612
|
+
type: integer
|
|
8613
|
+
minimum: 1
|
|
8614
|
+
requestBody:
|
|
8615
|
+
required: true
|
|
8616
|
+
content:
|
|
8617
|
+
application/json:
|
|
8618
|
+
schema:
|
|
8619
|
+
$ref: '#/components/schemas/WalkthroughDraftRequest'
|
|
8620
|
+
responses:
|
|
8621
|
+
'200':
|
|
8622
|
+
description: The draft (status completed).
|
|
8623
|
+
content:
|
|
8624
|
+
application/json:
|
|
8625
|
+
schema:
|
|
8626
|
+
$ref: '#/components/schemas/WalkthroughDraftResponse'
|
|
8627
|
+
'202':
|
|
8628
|
+
description: A vision sort runs first (status running); poll GET …/draft-from-walkthrough/runs/{runId}.
|
|
8629
|
+
content:
|
|
8630
|
+
application/json:
|
|
8631
|
+
schema:
|
|
8632
|
+
$ref: '#/components/schemas/WalkthroughDraftResponse'
|
|
8633
|
+
'400':
|
|
8634
|
+
description: No transcript, or a wrong shape.
|
|
8635
|
+
content:
|
|
8636
|
+
application/json:
|
|
8637
|
+
schema:
|
|
8638
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8639
|
+
'401':
|
|
8640
|
+
description: Authentication required.
|
|
8641
|
+
'403':
|
|
8642
|
+
description: The role cannot create checklists.
|
|
8643
|
+
content:
|
|
8644
|
+
application/json:
|
|
8645
|
+
schema:
|
|
8646
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8647
|
+
'404':
|
|
8648
|
+
description: Job not found.
|
|
8649
|
+
content:
|
|
8650
|
+
application/json:
|
|
8651
|
+
schema:
|
|
8652
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8653
|
+
'502':
|
|
8654
|
+
description: The AI's answer could not be used.
|
|
8655
|
+
content:
|
|
8656
|
+
application/json:
|
|
8657
|
+
schema:
|
|
8658
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8659
|
+
'503':
|
|
8660
|
+
description: AI is not configured.
|
|
8661
|
+
content:
|
|
8662
|
+
application/json:
|
|
8663
|
+
schema:
|
|
8664
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8665
|
+
/api/projects/{projectId}/documents/draft-from-walkthrough/runs/{runId}:
|
|
8666
|
+
get:
|
|
8667
|
+
tags:
|
|
8668
|
+
- checklists
|
|
8669
|
+
summary: Poll a walk-through draft that waits for an AI vision sort.
|
|
8670
|
+
description: >-
|
|
8671
|
+
Status `running` (with the sort's progress in `sortRun`) until the draft is ready, then `completed` with
|
|
8672
|
+
`draft`, or `failed` with `message`. A run that stops making progress is marked failed on the next poll and
|
|
8673
|
+
never re-run.
|
|
8674
|
+
parameters:
|
|
8675
|
+
- *ref_3
|
|
8676
|
+
- name: runId
|
|
8677
|
+
in: path
|
|
8678
|
+
required: true
|
|
8679
|
+
schema:
|
|
8680
|
+
type: integer
|
|
8681
|
+
minimum: 1
|
|
8682
|
+
responses:
|
|
8683
|
+
'200':
|
|
8684
|
+
description: The run's envelope.
|
|
8685
|
+
content:
|
|
8686
|
+
application/json:
|
|
8687
|
+
schema:
|
|
8688
|
+
$ref: '#/components/schemas/WalkthroughDraftResponse'
|
|
8689
|
+
'401':
|
|
8690
|
+
description: Authentication required.
|
|
8691
|
+
'403':
|
|
8692
|
+
description: The role cannot create checklists.
|
|
8693
|
+
content:
|
|
8694
|
+
application/json:
|
|
8695
|
+
schema:
|
|
8696
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
8697
|
+
'404':
|
|
8698
|
+
description: Job or run not found.
|
|
8699
|
+
content:
|
|
8700
|
+
application/json:
|
|
8701
|
+
schema:
|
|
8702
|
+
$ref: '#/components/schemas/ErrorEnvelope'
|
|
7435
8703
|
webhooks: {}
|