@truepic/vision-api-types 3.78.0 → 3.81.0

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/README.md +10 -44
  2. package/index.d.ts +1162 -222
  3. package/package.json +3 -10
  4. package/LICENSE +0 -20
package/index.d.ts CHANGED
@@ -2070,7 +2070,7 @@ export interface paths {
2070
2070
  };
2071
2071
  requestBody: {
2072
2072
  content: {
2073
- "application/json": Record<string, never>;
2073
+ "application/json": components["schemas"]["UpdateInspectionTypeBody"];
2074
2074
  };
2075
2075
  };
2076
2076
  responses: {
@@ -2080,7 +2080,7 @@ export interface paths {
2080
2080
  [name: string]: unknown;
2081
2081
  };
2082
2082
  content: {
2083
- "application/json": components["schemas"]["CreateInspectionTypeBody"];
2083
+ "application/json": components["schemas"]["ResponseData"];
2084
2084
  };
2085
2085
  };
2086
2086
  400: components["responses"]["ErrorBadRequest"];
@@ -2744,50 +2744,270 @@ export interface paths {
2744
2744
  patch?: never;
2745
2745
  trace?: never;
2746
2746
  };
2747
+ "/ai-item-types": {
2748
+ parameters: {
2749
+ query?: never;
2750
+ header?: never;
2751
+ path?: never;
2752
+ cookie?: never;
2753
+ };
2754
+ /** List AI Item Types for the organization */
2755
+ get: {
2756
+ parameters: {
2757
+ query?: {
2758
+ inspection_type_id?: number;
2759
+ };
2760
+ header?: never;
2761
+ path?: never;
2762
+ cookie?: never;
2763
+ };
2764
+ requestBody?: never;
2765
+ responses: {
2766
+ /** @description Success */
2767
+ 200: {
2768
+ headers: {
2769
+ [name: string]: unknown;
2770
+ };
2771
+ content?: never;
2772
+ };
2773
+ 400: components["responses"]["ErrorBadRequest"];
2774
+ 401: components["responses"]["ErrorUnauthorized"];
2775
+ 403: components["responses"]["ErrorForbidden"];
2776
+ 404: components["responses"]["ErrorNotFound"];
2777
+ 412: components["responses"]["ErrorPreconditionFailed"];
2778
+ 500: components["responses"]["ErrorUnhandled"];
2779
+ };
2780
+ };
2781
+ put?: never;
2782
+ /** Create an AI Item Type for the organization */
2783
+ post: {
2784
+ parameters: {
2785
+ query?: never;
2786
+ header?: never;
2787
+ path?: never;
2788
+ cookie?: never;
2789
+ };
2790
+ requestBody?: never;
2791
+ responses: {
2792
+ /** @description Created */
2793
+ 201: {
2794
+ headers: {
2795
+ [name: string]: unknown;
2796
+ };
2797
+ content?: never;
2798
+ };
2799
+ /** @description Validation error */
2800
+ 400: {
2801
+ headers: {
2802
+ [name: string]: unknown;
2803
+ };
2804
+ content?: never;
2805
+ };
2806
+ 401: components["responses"]["ErrorUnauthorized"];
2807
+ 403: components["responses"]["ErrorForbidden"];
2808
+ /** @description Inspection Type not in organization */
2809
+ 404: {
2810
+ headers: {
2811
+ [name: string]: unknown;
2812
+ };
2813
+ content?: never;
2814
+ };
2815
+ 412: components["responses"]["ErrorPreconditionFailed"];
2816
+ 500: components["responses"]["ErrorUnhandled"];
2817
+ };
2818
+ };
2819
+ delete?: never;
2820
+ options?: never;
2821
+ head?: never;
2822
+ patch?: never;
2823
+ trace?: never;
2824
+ };
2825
+ "/ai-item-types/{itemTypeId}": {
2826
+ parameters: {
2827
+ query?: never;
2828
+ header?: never;
2829
+ path?: never;
2830
+ cookie?: never;
2831
+ };
2832
+ get?: never;
2833
+ /** Replace an AI Item Type (replace-by-tree) */
2834
+ put: {
2835
+ parameters: {
2836
+ query?: never;
2837
+ header?: never;
2838
+ path: {
2839
+ itemTypeId: number;
2840
+ };
2841
+ cookie?: never;
2842
+ };
2843
+ requestBody?: never;
2844
+ responses: {
2845
+ /** @description Success */
2846
+ 200: {
2847
+ headers: {
2848
+ [name: string]: unknown;
2849
+ };
2850
+ content?: never;
2851
+ };
2852
+ /** @description Validation error */
2853
+ 400: {
2854
+ headers: {
2855
+ [name: string]: unknown;
2856
+ };
2857
+ content?: never;
2858
+ };
2859
+ 401: components["responses"]["ErrorUnauthorized"];
2860
+ 403: components["responses"]["ErrorForbidden"];
2861
+ /** @description Not found */
2862
+ 404: {
2863
+ headers: {
2864
+ [name: string]: unknown;
2865
+ };
2866
+ content?: never;
2867
+ };
2868
+ 412: components["responses"]["ErrorPreconditionFailed"];
2869
+ 500: components["responses"]["ErrorUnhandled"];
2870
+ };
2871
+ };
2872
+ post?: never;
2873
+ /** Delete an AI Item Type */
2874
+ delete: {
2875
+ parameters: {
2876
+ query?: never;
2877
+ header?: never;
2878
+ path: {
2879
+ itemTypeId: number;
2880
+ };
2881
+ cookie?: never;
2882
+ };
2883
+ requestBody?: never;
2884
+ responses: {
2885
+ /** @description No Content */
2886
+ 204: {
2887
+ headers: {
2888
+ [name: string]: unknown;
2889
+ };
2890
+ content?: never;
2891
+ };
2892
+ 400: components["responses"]["ErrorBadRequest"];
2893
+ 401: components["responses"]["ErrorUnauthorized"];
2894
+ 403: components["responses"]["ErrorForbidden"];
2895
+ /** @description Not found */
2896
+ 404: {
2897
+ headers: {
2898
+ [name: string]: unknown;
2899
+ };
2900
+ content?: never;
2901
+ };
2902
+ /** @description Still linked to inspection types */
2903
+ 409: {
2904
+ headers: {
2905
+ [name: string]: unknown;
2906
+ };
2907
+ content?: never;
2908
+ };
2909
+ 412: components["responses"]["ErrorPreconditionFailed"];
2910
+ 500: components["responses"]["ErrorUnhandled"];
2911
+ };
2912
+ };
2913
+ options?: never;
2914
+ head?: never;
2915
+ patch?: never;
2916
+ trace?: never;
2917
+ };
2918
+ "/ai-item-types/{itemTypeId}/inspection-types/{inspectionTypeId}": {
2919
+ parameters: {
2920
+ query?: never;
2921
+ header?: never;
2922
+ path?: never;
2923
+ cookie?: never;
2924
+ };
2925
+ get?: never;
2926
+ put?: never;
2927
+ /** Link an AI Item Type to an Inspection Type */
2928
+ post: {
2929
+ parameters: {
2930
+ query?: never;
2931
+ header?: never;
2932
+ path: {
2933
+ itemTypeId: number;
2934
+ inspectionTypeId: number;
2935
+ };
2936
+ cookie?: never;
2937
+ };
2938
+ requestBody?: never;
2939
+ responses: {
2940
+ /** @description Linked (idempotent) */
2941
+ 204: {
2942
+ headers: {
2943
+ [name: string]: unknown;
2944
+ };
2945
+ content?: never;
2946
+ };
2947
+ 400: components["responses"]["ErrorBadRequest"];
2948
+ 401: components["responses"]["ErrorUnauthorized"];
2949
+ 403: components["responses"]["ErrorForbidden"];
2950
+ /** @description Not found */
2951
+ 404: {
2952
+ headers: {
2953
+ [name: string]: unknown;
2954
+ };
2955
+ content?: never;
2956
+ };
2957
+ 412: components["responses"]["ErrorPreconditionFailed"];
2958
+ 500: components["responses"]["ErrorUnhandled"];
2959
+ };
2960
+ };
2961
+ /** Unlink an AI Item Type from an Inspection Type (auto-deletes the item type if no links remain in V1) */
2962
+ delete: {
2963
+ parameters: {
2964
+ query?: never;
2965
+ header?: never;
2966
+ path: {
2967
+ itemTypeId: number;
2968
+ inspectionTypeId: number;
2969
+ };
2970
+ cookie?: never;
2971
+ };
2972
+ requestBody?: never;
2973
+ responses: {
2974
+ /** @description Unlinked (idempotent) */
2975
+ 204: {
2976
+ headers: {
2977
+ [name: string]: unknown;
2978
+ };
2979
+ content?: never;
2980
+ };
2981
+ 400: components["responses"]["ErrorBadRequest"];
2982
+ 401: components["responses"]["ErrorUnauthorized"];
2983
+ 403: components["responses"]["ErrorForbidden"];
2984
+ /** @description Not found */
2985
+ 404: {
2986
+ headers: {
2987
+ [name: string]: unknown;
2988
+ };
2989
+ content?: never;
2990
+ };
2991
+ 412: components["responses"]["ErrorPreconditionFailed"];
2992
+ 500: components["responses"]["ErrorUnhandled"];
2993
+ };
2994
+ };
2995
+ options?: never;
2996
+ head?: never;
2997
+ patch?: never;
2998
+ trace?: never;
2999
+ };
2747
3000
  }
2748
3001
  export type webhooks = Record<string, never>;
2749
3002
  export interface components {
2750
3003
  schemas: {
2751
- AIAnalysisSetPayload: {
2752
- /**
2753
- * Format: date-time
2754
- * @description The date/time the resource was created
2755
- * @example 2020-05-01T21:44:40.000Z
2756
- */
2757
- created_at: string;
2758
- /**
2759
- * @description The id of the user that created this AI Analysis Set.
2760
- * @example 894
2761
- */
2762
- created_by_user_id: number;
2763
- /**
2764
- * @description The id of the resource.
2765
- * @example 1843
2766
- */
2767
- id: number;
2768
- is_deleted: unknown;
2769
- /**
2770
- * @description The id of the user that last edited this AI Analysis Set.
2771
- * @example 542
2772
- */
2773
- modified_by_user_id?: number;
2774
- /**
2775
- * @description The name of the AI Analysis Set
2776
- * @example AI Analysis Set Name
2777
- */
2778
- name: string;
2779
- /**
2780
- * @description The id of the organization that owns this AI Analysis Set
2781
- * @example 532
2782
- */
2783
- organization_id: number;
2784
- questions: string[];
2785
- /**
2786
- * Format: date-time
2787
- * @description The date/time the resource was last updated
2788
- * @example 2020-05-01T21:44:40.000Z
2789
- */
2790
- updated_at: string;
3004
+ AIAnalysisStatus: {
3005
+ completed_event_count?: number;
3006
+ /** @description Number of non-deleted truepics actually evaluated by the latest completed AI Analysis run, after the AI capture cap (VISION-2118). Equals the total non-deleted count when under the cap; the cap value when over. Present only when the inspection has at least one completed extraction event — drives the summary's "N images analyzed" clause so the user sees the actually-evaluated number rather than the total non-deleted count. */
3007
+ evaluated_truepic_count?: number;
3008
+ last_completed_at: string | null;
3009
+ /** @enum {string} */
3010
+ state: "idle" | "waiting" | "running" | "completed" | "failed";
2791
3011
  };
2792
3012
  AIInspectionCriteriaEvaluationModelResultV1: {
2793
3013
  cachedTokens: number;
@@ -2813,6 +3033,117 @@ export interface components {
2813
3033
  queryTimeMs: number;
2814
3034
  totalCostUSD: number | null;
2815
3035
  };
3036
+ AIInspectionFeedback: {
3037
+ created_at: string;
3038
+ created_by_member_user_id: number;
3039
+ feedback: components["schemas"]["AIInspectionFeedbackSections"];
3040
+ id: number;
3041
+ inspection_id: number;
3042
+ };
3043
+ /** @enum {string} */
3044
+ AIInspectionFeedbackDecision: "accept" | "reject";
3045
+ AIInspectionFeedbackItem: {
3046
+ comment: string | null;
3047
+ decision: components["schemas"]["AIInspectionFeedbackDecision"];
3048
+ list_item_id: number;
3049
+ };
3050
+ AIInspectionFeedbackOverall: {
3051
+ comment: string | null;
3052
+ decision: components["schemas"]["AIInspectionFeedbackDecision"] | unknown;
3053
+ reason?: string | null;
3054
+ };
3055
+ /** @description The three feedback surfaces, each optional. A row carries whichever sections the user has submitted feedback for. */
3056
+ AIInspectionFeedbackSections: {
3057
+ additional_details?: components["schemas"]["AIInspectionSubjectScopedFeedbackSection"];
3058
+ inspection_ready?: components["schemas"]["AIInspectionReadyFeedbackSection"];
3059
+ item_information?: components["schemas"]["AIInspectionSubjectScopedFeedbackSection"];
3060
+ };
3061
+ /** @description One per-Subject verdict row for the `item_information` and `additional_details` surfaces, keyed by the detected `ai_items[].id`. */
3062
+ AIInspectionFeedbackSubjectItem: {
3063
+ comment: string | null;
3064
+ decision: components["schemas"]["AIInspectionFeedbackDecision"];
3065
+ item_id: number;
3066
+ reason?: string | null;
3067
+ };
3068
+ AIInspectionItemAdditionalDetailsResult: {
3069
+ /** @description Per-model call audit data for the Additional Details extraction step. */
3070
+ audit_json: components["schemas"]["AuditEntry"][];
3071
+ /** @description AI observations responding to the configured considerations text. */
3072
+ considerations_observations: components["schemas"]["ConsiderationsObservationEntry"][];
3073
+ /** @description Self-referential reuse provenance (VISION-2080): the prior `ai_inspection_item_additional_details_results.id` this row was cloned from. Null on freshly-computed rows. ON DELETE SET NULL — deleting the source row leaves this as a tombstone. */
3074
+ copied_from_additional_details_result_id: number | null;
3075
+ /**
3076
+ * Format: date-time
3077
+ * @description The date/time the resource was created
3078
+ * @example 2020-05-01T21:44:40.000Z
3079
+ */
3080
+ created_at: string;
3081
+ id: number;
3082
+ /** @description Row-level hex SHA-256 over the canonical projection of the additional_details inputs for every eligible item in this event (VISION-2080). The table stores one row per event with every item's findings merged, so the fingerprint covers the whole row's inputs — any single item's change invalidates the whole row. Drives the prior-result reuse fast path. Null on rows that predate the feature. */
3083
+ input_fingerprint: string | null;
3084
+ inspection_id: number;
3085
+ /** @description Configured items-to-look-for that were found, plus adjacent discoveries. lookfor_id is a UUID referencing the item type's additional_details_lookfor array; null for adjacent-discovery items. */
3086
+ items_found: components["schemas"]["ItemsFoundEntry"][];
3087
+ /** @description FK to ai_extraction_events.id — the run that produced this row. */
3088
+ triggering_event_id?: number;
3089
+ /**
3090
+ * Format: date-time
3091
+ * @description The date/time the resource was last updated
3092
+ * @example 2020-05-01T21:44:40.000Z
3093
+ */
3094
+ updated_at: string;
3095
+ };
3096
+ AIInspectionItemFieldResult: {
3097
+ /**
3098
+ * @description AI-derived disposition.
3099
+ * @enum {string|null}
3100
+ */
3101
+ ai_disposition: "pass" | "warn" | null;
3102
+ /** @description Per-model call audit data for this field extraction step, plus (when a rerun drift was suppressed) the suppressed verdict — VISION-2126. */
3103
+ audit_json: components["schemas"]["FieldResultAuditEntry"][];
3104
+ /** @description Cross-extraction conflict candidates. Present and non-empty only when status='conflict'. Not deduplicated — vote distribution is preserved. */
3105
+ candidate_values: components["schemas"]["CandidateValue"][];
3106
+ /** @description 0..1 consensus confidence; null when status !== 'found'. */
3107
+ confidence: number | null;
3108
+ /** @description Self-referential reuse provenance (VISION-2080): the prior `ai_inspection_item_field_results.id` this row was cloned from. Null on freshly-computed rows. ON DELETE SET NULL — deleting the source row leaves this as a tombstone. */
3109
+ copied_from_field_result_id: number | null;
3110
+ /**
3111
+ * Format: date-time
3112
+ * @description The date/time the resource was created
3113
+ * @example 2020-05-01T21:44:40.000Z
3114
+ */
3115
+ created_at: string;
3116
+ /**
3117
+ * @description Override disposition (Sprint 2).
3118
+ * @enum {string|null}
3119
+ */
3120
+ current_disposition: "pass" | "warn" | null;
3121
+ /** @description Models that disagreed with the consensus within this extraction run. */
3122
+ dissenters: components["schemas"]["Dissenter"][];
3123
+ /** @description FK to ai_item_type_fields.id (INSTANCE row); ON DELETE RESTRICT. */
3124
+ field_id: number;
3125
+ id: number;
3126
+ /** @description Hex SHA-256 over the canonical projection of every input the item_information prompt fed the model for this (item, field) call (VISION-2080). On rerun, the executor recomputes this and compares against the prior row's fingerprint; on match it skips the AI call entirely and copies the prior row's value verbatim. Null on rows that predate the feature. */
3127
+ input_fingerprint: string | null;
3128
+ /** @description FK to ai_inspection_item_results.id. */
3129
+ inspection_item_id: number;
3130
+ override_at: string | null;
3131
+ /** @description FK to users.id; set when a user overrides the disposition (Sprint 2). */
3132
+ override_user_id: number | null;
3133
+ reasoning: string | null;
3134
+ /** @description Evidence sources for this extraction. Empty when status !== 'found'. */
3135
+ sources: components["schemas"]["Source"][];
3136
+ /** @description Per-field extraction status ( {@link FieldStatus } ). The DB column is a free-form string so future values (skipped, error, partial, low_confidence) need no migration; adding one means widening {@link FieldStatus } and the model-layer Joi `.valid(...)` together. */
3137
+ status: components["schemas"]["FieldStatus"];
3138
+ /**
3139
+ * Format: date-time
3140
+ * @description The date/time the resource was last updated
3141
+ * @example 2020-05-01T21:44:40.000Z
3142
+ */
3143
+ updated_at: string;
3144
+ /** @description Polymorphic: string for open_answer / single-select; string[] for multi-select; null when status !== 'found'. */
3145
+ value: string | string[] | unknown;
3146
+ };
2816
3147
  AIInspectionReadyCriteriaResultV1: {
2817
3148
  cachedTokens: number;
2818
3149
  criteria: components["schemas"]["CriteriaGenerationOutputV1"];
@@ -2831,6 +3162,11 @@ export interface components {
2831
3162
  queryTimeMs: number;
2832
3163
  totalCostUSD: number | null;
2833
3164
  };
3165
+ /** @description Content Summary / Inspection Readiness — overall verdict plus per-item feedback. */
3166
+ AIInspectionReadyFeedbackSection: {
3167
+ items: components["schemas"]["AIInspectionFeedbackItem"][];
3168
+ overall: components["schemas"]["AIInspectionFeedbackOverall"];
3169
+ };
2834
3170
  AIInspectionReadyResult: {
2835
3171
  client_override_date?: string | null;
2836
3172
  client_override_result?: components["schemas"]["TestResult"] | unknown;
@@ -2852,8 +3188,139 @@ export interface components {
2852
3188
  criteriaEvaluation: components["schemas"]["AIInspectionCriteriaEvaluationResultV1"][] | unknown;
2853
3189
  schema_version: number;
2854
3190
  };
3191
+ /** @description AI Item Information & Additional Details — per-Subject verdicts. Both surfaces render once per detected Subject, so feedback is scoped to each `ai_items[].id` rather than a single overall verdict. */
3192
+ AIInspectionSubjectScopedFeedbackSection: {
3193
+ items: components["schemas"]["AIInspectionFeedbackSubjectItem"][];
3194
+ };
3195
+ AIItemType: {
3196
+ additional_details_considerations: string | null;
3197
+ /** @description Items-to-look-for for Additional Details. Each entry carries a UUID stable across template→instance copies; items_found[*].lookfor_id references it. */
3198
+ additional_details_lookfor: components["schemas"]["AIItemTypeLookforEntry"][];
3199
+ /**
3200
+ * Format: date-time
3201
+ * @description The date/time the resource was created
3202
+ * @example 2020-05-01T21:44:40.000Z
3203
+ */
3204
+ created_at: string;
3205
+ id: number;
3206
+ /** @description Set for INSTANCE rows; null for TEMPLATE rows. Template rows are associated with inspection types via the ai_item_type_inspection_types junction table. */
3207
+ inspection_id: number | null;
3208
+ name: string;
3209
+ organization_id: number;
3210
+ /** @description Informational pointer to the TEMPLATE row this INSTANCE was deep-copied from. Not a FK — survives template deletion intentionally. */
3211
+ source_item_type_id: number | null;
3212
+ /**
3213
+ * @description Discriminates template rows (owned by an inspection type) from instance rows (frozen copies owned by an inspection).
3214
+ * @enum {string}
3215
+ */
3216
+ type: "TEMPLATE" | "INSTANCE";
3217
+ /**
3218
+ * Format: date-time
3219
+ * @description The date/time the resource was last updated
3220
+ * @example 2020-05-01T21:44:40.000Z
3221
+ */
3222
+ updated_at: string;
3223
+ };
3224
+ AIItemTypeField: {
3225
+ /**
3226
+ * Format: date-time
3227
+ * @description The date/time the resource was created
3228
+ * @example 2020-05-01T21:44:40.000Z
3229
+ */
3230
+ created_at: string;
3231
+ description: string;
3232
+ id: number;
3233
+ item_type_id: number;
3234
+ name: string;
3235
+ /** @description Populated for choose_from_options fields; empty array for open_answer. No per-option IDs — the array is replaced atomically on update. */
3236
+ options: components["schemas"]["AIItemTypeOption"][];
3237
+ /** @description Required when response_mode='choose_from_options'; null for open_answer. */
3238
+ options_multiple: boolean | null;
3239
+ position: number;
3240
+ /** @enum {string} */
3241
+ response_mode: "open_answer" | "choose_from_options";
3242
+ /**
3243
+ * Format: date-time
3244
+ * @description The date/time the resource was last updated
3245
+ * @example 2020-05-01T21:44:40.000Z
3246
+ */
3247
+ updated_at: string;
3248
+ /**
3249
+ * @description 'missing' = warn if AI doesn't find it; 'found' = warn if AI does find it; null = no warning.
3250
+ * @enum {string|null}
3251
+ */
3252
+ warn_mode: "missing" | "found" | null;
3253
+ };
3254
+ /** @description One entry in ai_item_types.additional_details_lookfor. The uuid is server-generated and preserved verbatim through template→instance copies. */
3255
+ AIItemTypeLookforEntry: {
3256
+ label: string;
3257
+ position: number;
3258
+ uuid: string;
3259
+ };
3260
+ /** @description One entry in ai_item_type_fields.options (choose_from_options fields). */
3261
+ AIItemTypeOption: {
3262
+ label: string;
3263
+ position: number;
3264
+ };
2855
3265
  /** @description The details of the AI status for an inspection */
2856
3266
  AIStatusDetails: {
3267
+ /** @description Configured AI Analysis additional details */
3268
+ ai_additional_details?: {
3269
+ /** @description AI observations responding to the configured considerations text. */
3270
+ considerations_observations: components["schemas"]["ConsiderationsObservationEntry"][];
3271
+ /** @description Configured items-to-look-for that were found, plus adjacent discoveries. lookfor_id is a UUID referencing the item type's additional_details_lookfor array; null for adjacent-discovery items. */
3272
+ items_found: components["schemas"]["ItemsFoundEntry"][];
3273
+ } | unknown;
3274
+ /** @description Current configured AI Analysis run state */
3275
+ ai_analysis_status?: components["schemas"]["AIAnalysisStatus"];
3276
+ /** @description Configured AI Analysis expected items and field results */
3277
+ ai_items?: {
3278
+ additional_details_attribution: number[];
3279
+ classification_confidence: number | null;
3280
+ detected_type: string;
3281
+ id: number;
3282
+ item_index: number | null;
3283
+ item_information: {
3284
+ candidate_values: components["schemas"]["CandidateValue"][];
3285
+ confidence: number | null;
3286
+ /** @enum {string} */
3287
+ disposition: "pass" | "warn";
3288
+ field_id: number;
3289
+ field_name: string;
3290
+ reasoning: string | null;
3291
+ sources: components["schemas"]["Source"][];
3292
+ status: components["schemas"]["FieldStatus"];
3293
+ value: string | string[] | unknown;
3294
+ }[];
3295
+ item_type_id: number | null;
3296
+ truepic_ids: number[];
3297
+ }[];
3298
+ /** @description Configured AI Analysis unexpected items */
3299
+ ai_unexpected_items?: {
3300
+ classification_confidence: number | null;
3301
+ detected_type: string;
3302
+ id: number;
3303
+ message: string | null;
3304
+ truepic_ids: number[];
3305
+ }[];
3306
+ /** @description AI Analysis Configuration rollup of detected items for the L1 sidebar (Contract §2.7). Present only on inspections running the new feature; mirrors entries in `ai_items[]` / `ai_unexpected_items[]` by `id`, stripped to a rollup shape. */
3307
+ detected_items?: {
3308
+ /** @description Free-text classification label (e.g. `'watch'`). */
3309
+ detected_type: string;
3310
+ /** @description Matches the corresponding `ai_items[].id` / `ai_unexpected_items[].id`. */
3311
+ id: number;
3312
+ /** @description 0-indexed position within the expected items; null for unexpected. */
3313
+ item_index: number | null;
3314
+ /**
3315
+ * @description Whether this is a configured (expected) item or an unexpected detection.
3316
+ * @enum {string}
3317
+ */
3318
+ kind: "expected" | "unexpected";
3319
+ /** @description Short rollup summary for the sidebar. */
3320
+ summary?: string;
3321
+ /** @description Truepic IDs of the captures associated with this item. */
3322
+ truepic_ids: number[];
3323
+ }[];
2857
3324
  /** @description AI analyses per-list-item */
2858
3325
  list_items?: {
2859
3326
  /** @description The id of the list item this AI analysis corresponds to */
@@ -2876,6 +3343,10 @@ export interface components {
2876
3343
  };
2877
3344
  /** @enum {string} */
2878
3345
  AIStatusReason: "COMPLETE_WITH_NO_INCONSISTENCIES" | "COMPLETE_WITH_INCONSISTENCIES" | "INCOMPLETE";
3346
+ AISuggestedSource: {
3347
+ truepic_ids: number[];
3348
+ type: string;
3349
+ };
2879
3350
  AIUserCriteriaResult: {
2880
3351
  client_override_date?: string | null;
2881
3352
  client_override_result?: string | null;
@@ -2891,6 +3362,46 @@ export interface components {
2891
3362
  photo_id?: number;
2892
3363
  test_key: string;
2893
3364
  };
3365
+ /** @description One entry per model call in audit_json arrays on result tables. */
3366
+ AuditEntry: {
3367
+ /** @description ISO 8601 timestamp when this model call completed. */
3368
+ completed_at: string;
3369
+ /** @description Raw provider-side grounding metadata captured when a provider tool fired during this query (e.g. Gemini `google_search` / `url_context`, OpenAI `web_search`, per VISION-1850). Persisted verbatim — operators reviewing a flagged inspection need the full citation chain the provider returned, not just whatever the model summarized into the `sources[]` array. Absent when no provider tool fired. */
3370
+ grounding_metadata?: {
3371
+ [key: string]: unknown;
3372
+ };
3373
+ /** @description Discriminates this per-model-call entry from other audit_json entry shapes (e.g. `SuppressedExtractionAuditEntry`). Optional on read so rows persisted before this field existed validate; written going forward by `buildAuditFields`. Nothing branches on it today — it's a forward-looking discriminator only. */
3374
+ kind?: string;
3375
+ model_name: string;
3376
+ prompt_id: number;
3377
+ query_time_ms: number;
3378
+ /** @description Model's free-form reasoning text alongside its terminal tool call (VISION-2075). Gemini 3.x preview surfaces a structured chain-of-thought as `text` parts that capture observations, source evaluation, and self-checks — much richer than the one-sentence `reasoning` field the model writes into its own output, and the only audit-time record of rejected first-attempt content when a retry succeeds. Absent on queriers that don't yet populate it. */
3379
+ reasoning_text?: string;
3380
+ /** @description Provider-reported reason the model stopped generating (VISION-2023). Surfaces truncation (`max_tokens`) and policy declines (`refusal`) per step/model so observability can spot them without grepping logs. Provider-specific values: Anthropic emits `end_turn`, `tool_use`, `max_tokens`, `refusal`, `pause_turn`; OpenAI emits `completed`, `incomplete`; Gemini emits raw `STOP`, `MAX_TOKENS`, etc. Absent on queriers that don't yet populate it. */
3381
+ stop_reason?: string;
3382
+ tokens: components["schemas"]["AuditEntryTokens"];
3383
+ /** @description Per-tool-call audit records for any non-terminal tool invocations the model issued during this query (VISION-1965). One entry per invocation, in invocation order; shape is the tool's own `auditRecord` field from its `PipelineToolResult`. Absent / empty when the query didn't use any non-terminal tools. */
3384
+ tool_calls?: {
3385
+ [key: string]: unknown;
3386
+ }[];
3387
+ total_cost_usd: number;
3388
+ };
3389
+ AuditEntryTokens: {
3390
+ cached?: number;
3391
+ input: number;
3392
+ output: number;
3393
+ };
3394
+ /**
3395
+ * @description One entry in ai_inspection_item_field_results.candidate_values. Populated when status='conflict'; never deduplicated.
3396
+ *
3397
+ * `value` is nullable: when a field disappears across runs (found in a prior run, `not_captured` in a later one), the null candidate represents the "missing on this side" vote so the comparison UI can render both outcomes against each other. (Appearance — `not_captured` then `found` — no longer produces a conflict or candidate; see VISION-2054.)
3398
+ */
3399
+ CandidateValue: {
3400
+ confidence: number;
3401
+ reasoning: string;
3402
+ sources: components["schemas"]["Source"][];
3403
+ value: string | string[] | unknown;
3404
+ };
2894
3405
  /** @description The request body for PUT /inspections/{inspectionId}/inspection-type */
2895
3406
  ChangeInspectionTypeBody: {
2896
3407
  /**
@@ -2899,6 +3410,15 @@ export interface components {
2899
3410
  */
2900
3411
  inspection_type_id: number;
2901
3412
  };
3413
+ /** @description One entry in ai_inspection_item_additional_details_results.considerations_observations. */
3414
+ ConsiderationsObservationEntry: {
3415
+ confidence: number;
3416
+ id: number;
3417
+ /** @description id from ai_inspection_item_results (same event); null when attribution is ambiguous. */
3418
+ item_id: number | null;
3419
+ observation: string;
3420
+ sources: components["schemas"]["Source"][];
3421
+ };
2902
3422
  ContentAnalysisDetails: {
2903
3423
  /**
2904
3424
  * @description The expected result of the content analysis test. Will be an object specifying a min and mix on the vehicle odometer for ODOMETER tests. Will be a string representing the expected VIN number on the vehicle for VIN tests. Will be a string representing the expected DOT TIN on the vehicle tire for DOT TIN tests.
@@ -3273,8 +3793,6 @@ export interface components {
3273
3793
  * @enum {string}
3274
3794
  */
3275
3795
  ContentAnalysisType: "ODOMETER" | "VIN" | "TEXT_MATCHING" | "CUSTOM_FIELD_MATCHING" | "DOT_TIN";
3276
- CreateAIAnalysisSetProps: components["schemas"]["AIAnalysisSetPayload"];
3277
- CreateAIAnalysisSetResult: components["schemas"]["SuccessfulCreationResponseData"];
3278
3796
  /** @description The response body for POST /auth/auth0 */
3279
3797
  CreateAPICredentialsResult: {
3280
3798
  /**
@@ -3383,7 +3901,12 @@ export interface components {
3383
3901
  * @example 3028675309
3384
3902
  */
3385
3903
  customer_phone_number?: string;
3386
- include_list?: unknown;
3904
+ /**
3905
+ * @description This must be set to `true` when including items in the `list` object.
3906
+ * @default false
3907
+ * @example false
3908
+ */
3909
+ include_list: boolean;
3387
3910
  /**
3388
3911
  * @description Free-form inspection-ready criteria text. Max length 10KB.
3389
3912
  * @example Capture all rooms and appliances.
@@ -3427,7 +3950,7 @@ export interface components {
3427
3950
  /** @description The method(s) to send the inspection request to the customer completing the inspection. */
3428
3951
  send_methods?: {
3429
3952
  /**
3430
- * @description When true, will send text messages to the customer_email_address
3953
+ * @description When true, will send emails to the customer_email_address
3431
3954
  * @example false
3432
3955
  */
3433
3956
  email: boolean;
@@ -3462,7 +3985,7 @@ export interface components {
3462
3985
  response_code: number;
3463
3986
  result: components["schemas"]["SerializedInspection"];
3464
3987
  };
3465
- /** @description Request Body for POST /inspections */
3988
+ /** @description Request Body for POST /inspection-types */
3466
3989
  CreateInspectionTypeBody: {
3467
3990
  /**
3468
3991
  * @description the id of the user who created this inspection type. References `users.id`
@@ -3523,6 +4046,20 @@ export interface components {
3523
4046
  * @example 539
3524
4047
  */
3525
4048
  outcome_set_id?: number;
4049
+ /**
4050
+ * @description The teams that are allowed to use this inspection type. Pass each team as an object containing its `id`. Passing an empty array removes all team associations.
4051
+ * @example [
4052
+ * {
4053
+ * "id": 12
4054
+ * },
4055
+ * {
4056
+ * "id": 24
4057
+ * }
4058
+ * ]
4059
+ */
4060
+ teams?: {
4061
+ id: number;
4062
+ }[];
3526
4063
  /**
3527
4064
  * @description When true, there is only one name for the user to fill out rather than a separate first name and last name field
3528
4065
  * @example true
@@ -3845,7 +4382,12 @@ export interface components {
3845
4382
  custom_field_option_set_id?: number;
3846
4383
  /** @description The entry method for the custom field */
3847
4384
  entry_method: components["schemas"]["CustomFieldEntryMethods"];
3848
- is_required: unknown;
4385
+ /**
4386
+ * @description When true, the user must supply a value for this custom field in order to create an inspection
4387
+ * @default false
4388
+ * @example true
4389
+ */
4390
+ is_required: boolean;
3849
4391
  /** @description The label for the custom field */
3850
4392
  label?: string;
3851
4393
  };
@@ -3887,6 +4429,13 @@ export interface components {
3887
4429
  issue_description: string;
3888
4430
  related_item_ids: number[];
3889
4431
  };
4432
+ /** @description A model whose response differed from the consensus value within a single extraction run. Stored in ai_inspection_item_field_results.dissenters. */
4433
+ Dissenter: {
4434
+ confidence: number | null;
4435
+ model_name: string;
4436
+ reasoning: string | null;
4437
+ value: string | string[] | unknown;
4438
+ };
3890
4439
  /** @description An email token used for unsubscribing and resubscribing from emails */
3891
4440
  EmailToken: {
3892
4441
  /**
@@ -3938,6 +4487,13 @@ export interface components {
3938
4487
  */
3939
4488
  tz: string;
3940
4489
  };
4490
+ /** @description An entry in a field result's `audit_json` array: either a per-model-call record or a suppressed-rerun verdict (VISION-2126). */
4491
+ FieldResultAuditEntry: components["schemas"]["AuditEntry"] | components["schemas"]["SuppressedExtractionAuditEntry"];
4492
+ /**
4493
+ * @description Per-field extraction status. V1 emits exactly these three values; adding a member requires updating both this union and the model-layer Joi `.valid(...)` (`ai-inspection-item-field-results.model.ts`) and the runtime set in `ai-status-consolidator.ts`. Single source of truth for the status literal.
4494
+ * @enum {string}
4495
+ */
4496
+ FieldStatus: "found" | "not_captured" | "conflict";
3941
4497
  /** @description Request body for POST /inspections/{inspectionId}/flag-device */
3942
4498
  FlagDeviceRequestBody: {
3943
4499
  /** @description The comment to apply to the activity log for this flag action. */
@@ -3947,73 +4503,6 @@ export interface components {
3947
4503
  /** @description The complete list of flags to apply to the device for this inspection. This will update the list of flags to match this array by adding and/or removing any existing flags. */
3948
4504
  flags: components["schemas"]["DeviceFlagType"][];
3949
4505
  };
3950
- GetAIAnalysisSetQuestionTruepicsExamplesResult: {
3951
- question: string;
3952
- question_id: number;
3953
- truepics: components["schemas"]["QuestionTruepicExampleItem"][];
3954
- }[];
3955
- GetAIAnalysisSetResult: {
3956
- /**
3957
- * @description The current version number of the Vision API
3958
- * @example 3.0.0
3959
- */
3960
- api_version: string;
3961
- /**
3962
- * @description The human readable-status of the response
3963
- * @example Success
3964
- */
3965
- message: string;
3966
- /**
3967
- * @description The HTTP status code of the response
3968
- * @example 200
3969
- */
3970
- response_code: number;
3971
- result: {
3972
- id: number;
3973
- name?: string | null;
3974
- num_evaluated_truepics: number;
3975
- questions: string[];
3976
- };
3977
- };
3978
- GetAIAnalysisSetsResult: {
3979
- /**
3980
- * @description The current version number of the Vision API
3981
- * @example 3.0.0
3982
- */
3983
- api_version: string;
3984
- /**
3985
- * @description The human readable-status of the response
3986
- * @example Success
3987
- */
3988
- message: string;
3989
- /**
3990
- * @description The total number of pages for the given query
3991
- * @example 12
3992
- */
3993
- pageCount: number;
3994
- /**
3995
- * @description The HTTP status code of the response
3996
- * @example 200
3997
- */
3998
- response_code: number;
3999
- result: {
4000
- created_at: string;
4001
- id: number;
4002
- name?: string | null;
4003
- num_evaluated_truepics: number;
4004
- questions: string[];
4005
- }[];
4006
- /**
4007
- * @description The total number of results for the given page
4008
- * @example 25
4009
- */
4010
- total: number;
4011
- /**
4012
- * @description The total number of results for the given query
4013
- * @example 251
4014
- */
4015
- totalResults: number;
4016
- };
4017
4506
  /** @description The response body for GET /auth/auth0 */
4018
4507
  GetAPICredentialsResult: components["schemas"]["CreateAPICredentialsResult"];
4019
4508
  /** @description Response Body for GET /inspections/bearer */
@@ -4051,6 +4540,8 @@ export interface components {
4051
4540
  * @example 40.0612708
4052
4541
  */
4053
4542
  address_lng?: string;
4543
+ /** @description Per-inspection lock for the AI Analysis Configuration "inspection items" pipeline. Null until the first AI run resolves it from global_configs.VISION_AI_INSPECTION_ITEMS_PIPELINE_ID under FOR UPDATE; immutable thereafter so the audit chain attaches to a single pipeline even if the global config is later changed. Spec §2.7, §3.4. */
4544
+ ai_inspection_items_pipeline_id?: number | null;
4054
4545
  /**
4055
4546
  * @description The AI analysis result for this inspection.
4056
4547
  * @example pass
@@ -4059,11 +4550,11 @@ export interface components {
4059
4550
  /** @description The details of the AI status for this inspection. This may include information about the criteria evaluation, any inconsistencies detected, and more. */
4060
4551
  ai_status_details?: components["schemas"]["AIStatusDetails"];
4061
4552
  /**
4062
- * @description The reason for the AI analysis result for this inspection.
4063
- * @example COMPLETE_WITH_NO_INCONSISTENCIES
4553
+ * @description Whether the Vision app has been opened by the customer
4554
+ * @default false
4555
+ * @example true
4064
4556
  */
4065
- ai_status_reason?: components["schemas"]["AIStatusReason"];
4066
- app_opened?: unknown;
4557
+ app_opened: boolean;
4067
4558
  /**
4068
4559
  * @description The id of the user this inspection is assigned to.
4069
4560
  * @example 19
@@ -4185,8 +4676,18 @@ export interface components {
4185
4676
  * @example 12
4186
4677
  */
4187
4678
  inspection_type_id?: number;
4188
- is_deleted?: unknown;
4189
- is_expired?: unknown;
4679
+ /**
4680
+ * @description Represents if the inspection has been soft-deleted
4681
+ * @default false
4682
+ * @example true
4683
+ */
4684
+ is_deleted: boolean;
4685
+ /**
4686
+ * @description Whether the inspection has expired
4687
+ * @default false
4688
+ * @example true
4689
+ */
4690
+ is_expired: boolean;
4190
4691
  /**
4191
4692
  * @description The maximum distance, in meters, from the address that the photos/videos must be taken in order to be valid
4192
4693
  * @example 1000
@@ -4234,7 +4735,7 @@ export interface components {
4234
4735
  /** @description The method(s) to send the inspection request to the customer completing the inspection. */
4235
4736
  send_methods?: {
4236
4737
  /**
4237
- * @description When true, will send text messages to the customer_email_address
4738
+ * @description When true, will send emails to the customer_email_address
4238
4739
  * @example false
4239
4740
  */
4240
4741
  email: boolean;
@@ -4473,7 +4974,12 @@ export interface components {
4473
4974
  */
4474
4975
  inspection_id?: number;
4475
4976
  inspection_types: components["schemas"]["InspectionType"][];
4476
- is_deleted: unknown;
4977
+ /**
4978
+ * @description Whether or not this list has been soft-deleted
4979
+ * @default false
4980
+ * @example true
4981
+ */
4982
+ is_deleted: boolean;
4477
4983
  items: components["schemas"]["ListItem"][];
4478
4984
  /**
4479
4985
  * @description The auto-generated name of the list.
@@ -4750,7 +5256,12 @@ export interface components {
4750
5256
  */
4751
5257
  inspection_id?: number;
4752
5258
  inspection_types: components["schemas"]["InspectionType"][];
4753
- is_deleted: unknown;
5259
+ /**
5260
+ * @description Whether or not this list has been soft-deleted
5261
+ * @default false
5262
+ * @example true
5263
+ */
5264
+ is_deleted: boolean;
4754
5265
  items: components["schemas"]["ListItem"][];
4755
5266
  /**
4756
5267
  * @description The auto-generated name of the list.
@@ -4965,7 +5476,12 @@ export interface components {
4965
5476
  * @example 1843
4966
5477
  */
4967
5478
  id: number;
4968
- is_mfa_required: unknown;
5479
+ /**
5480
+ * @description Whether multi-factor authentication is required for user login.
5481
+ * @default false
5482
+ * @example true
5483
+ */
5484
+ is_mfa_required: boolean;
4969
5485
  /**
4970
5486
  * @description The name of the organization.
4971
5487
  * @example Quality Capital
@@ -5260,7 +5776,12 @@ export interface components {
5260
5776
  */
5261
5777
  name: string;
5262
5778
  };
5263
- include_list?: unknown;
5779
+ /**
5780
+ * @description Whether to include the inspection type's list by default with new inspection requests.
5781
+ * @default false
5782
+ * @example true
5783
+ */
5784
+ include_list: boolean;
5264
5785
  inspection_types: {
5265
5786
  /**
5266
5787
  * Format: date-time
@@ -5319,7 +5840,12 @@ export interface components {
5319
5840
  * @example 1000
5320
5841
  */
5321
5842
  is_address_required: boolean;
5322
- is_deleted: unknown;
5843
+ /**
5844
+ * @description Whether this inspection type is deleted
5845
+ * @default false
5846
+ * @example true
5847
+ */
5848
+ is_deleted: boolean;
5323
5849
  /**
5324
5850
  * @description When true, the list associated with this inspection type cannot be changed
5325
5851
  * @example false
@@ -5360,7 +5886,12 @@ export interface components {
5360
5886
  */
5361
5887
  inspection_id?: number;
5362
5888
  inspection_types: components["schemas"]["InspectionType"][];
5363
- is_deleted: unknown;
5889
+ /**
5890
+ * @description Whether or not this list has been soft-deleted
5891
+ * @default false
5892
+ * @example true
5893
+ */
5894
+ is_deleted: boolean;
5364
5895
  items: components["schemas"]["ListItem"][];
5365
5896
  /**
5366
5897
  * @description The auto-generated name of the list.
@@ -5459,7 +5990,12 @@ export interface components {
5459
5990
  */
5460
5991
  use_single_name_field: boolean;
5461
5992
  }[];
5462
- is_deleted: unknown;
5993
+ /**
5994
+ * @description Whether or not this config has been soft-deleted
5995
+ * @default false
5996
+ * @example true
5997
+ */
5998
+ is_deleted: boolean;
5463
5999
  /**
5464
6000
  * @description The amount of time before an admin member's login token when switching teams expires. Any format supported by https://github.com/vercel/ms is valid.
5465
6001
  * @default 72h
@@ -5504,7 +6040,12 @@ export interface components {
5504
6040
  */
5505
6041
  inspection_id?: number;
5506
6042
  inspection_types: components["schemas"]["InspectionType"][];
5507
- is_deleted: unknown;
6043
+ /**
6044
+ * @description Whether or not this list has been soft-deleted
6045
+ * @default false
6046
+ * @example true
6047
+ */
6048
+ is_deleted: boolean;
5508
6049
  items: components["schemas"]["ListItem"][];
5509
6050
  /**
5510
6051
  * @description The auto-generated name of the list.
@@ -5606,7 +6147,12 @@ export interface components {
5606
6147
  * @example 2020-05-01T21:44:40.000Z
5607
6148
  */
5608
6149
  updated_at: string;
5609
- video_enabled?: unknown;
6150
+ /**
6151
+ * @description Whether video is enabled as a capture method in the app.
6152
+ * @default false
6153
+ * @example true
6154
+ */
6155
+ video_enabled: boolean;
5610
6156
  };
5611
6157
  };
5612
6158
  GetTeamWebhookResult: {
@@ -5979,6 +6525,8 @@ export interface components {
5979
6525
  * @example 40.0612708
5980
6526
  */
5981
6527
  address_lng?: string;
6528
+ /** @description Per-inspection lock for the AI Analysis Configuration "inspection items" pipeline. Null until the first AI run resolves it from global_configs.VISION_AI_INSPECTION_ITEMS_PIPELINE_ID under FOR UPDATE; immutable thereafter so the audit chain attaches to a single pipeline even if the global config is later changed. Spec §2.7, §3.4. */
6529
+ ai_inspection_items_pipeline_id: number | null;
5982
6530
  /**
5983
6531
  * @description The AI analysis result for this inspection.
5984
6532
  * @example pass
@@ -5987,11 +6535,11 @@ export interface components {
5987
6535
  /** @description The details of the AI status for this inspection. This may include information about the criteria evaluation, any inconsistencies detected, and more. */
5988
6536
  ai_status_details?: components["schemas"]["AIStatusDetails"];
5989
6537
  /**
5990
- * @description The reason for the AI analysis result for this inspection.
5991
- * @example COMPLETE_WITH_NO_INCONSISTENCIES
6538
+ * @description Whether the Vision app has been opened by the customer
6539
+ * @default false
6540
+ * @example true
5992
6541
  */
5993
- ai_status_reason?: components["schemas"]["AIStatusReason"];
5994
- app_opened: unknown;
6542
+ app_opened: boolean;
5995
6543
  /**
5996
6544
  * @description The id of the user this inspection is assigned to.
5997
6545
  * @example 19
@@ -6113,8 +6661,18 @@ export interface components {
6113
6661
  * @example 12
6114
6662
  */
6115
6663
  inspection_type_id: number;
6116
- is_deleted: unknown;
6117
- is_expired: unknown;
6664
+ /**
6665
+ * @description Represents if the inspection has been soft-deleted
6666
+ * @default false
6667
+ * @example true
6668
+ */
6669
+ is_deleted: boolean;
6670
+ /**
6671
+ * @description Whether the inspection has expired
6672
+ * @default false
6673
+ * @example true
6674
+ */
6675
+ is_expired: boolean;
6118
6676
  /**
6119
6677
  * @description The maximum distance, in meters, from the address that the photos/videos must be taken in order to be valid
6120
6678
  * @example 1000
@@ -6162,7 +6720,7 @@ export interface components {
6162
6720
  /** @description The method(s) to send the inspection request to the customer completing the inspection. */
6163
6721
  send_methods: {
6164
6722
  /**
6165
- * @description When true, will send text messages to the customer_email_address
6723
+ * @description When true, will send emails to the customer_email_address
6166
6724
  * @example false
6167
6725
  */
6168
6726
  email: boolean;
@@ -6236,7 +6794,12 @@ export interface components {
6236
6794
  * @example 1843
6237
6795
  */
6238
6796
  id: number;
6239
- is_deleted: unknown;
6797
+ /**
6798
+ * @description Whether or not this alert has been soft-deleted
6799
+ * @default false
6800
+ * @example true
6801
+ */
6802
+ is_deleted: boolean;
6240
6803
  /**
6241
6804
  * @description The id of the user that last edited the alert.
6242
6805
  * @example 124
@@ -6252,6 +6815,12 @@ export interface components {
6252
6815
  * @example 531
6253
6816
  */
6254
6817
  organization_id: number;
6818
+ /**
6819
+ * @description Whether or not to surface an AI Analysis warn/fail as an alert. Opt-in: defaults to false so an org's alerting behavior does not change until it explicitly enables AI Analysis alerting.
6820
+ * @default false
6821
+ * @example false
6822
+ */
6823
+ test_ai_analysis: boolean;
6255
6824
  /**
6256
6825
  * @description Whether or not to include the blurriness test in this alert.
6257
6826
  * @example true
@@ -6339,6 +6908,12 @@ export interface components {
6339
6908
  * @example true
6340
6909
  */
6341
6910
  test_insecure_device: boolean;
6911
+ /**
6912
+ * @description Whether or not to surface an Inspection Readiness fail/warn as an alert. Opt-in: defaults to false so an org's alerting behavior does not change until it explicitly enables Inspection Readiness alerting.
6913
+ * @default false
6914
+ * @example false
6915
+ */
6916
+ test_inspection_readiness: boolean;
6342
6917
  /**
6343
6918
  * @description Whether or not to include the object detection test in this alert.
6344
6919
  * @default true
@@ -6488,11 +7063,6 @@ export interface components {
6488
7063
  * @example false
6489
7064
  */
6490
7065
  accept_existing_images?: boolean;
6491
- /**
6492
- * @description The id of the AI Analysis Set used for Vision AI Analysis. References `ai_analysis_sets.id`
6493
- * @example 3
6494
- */
6495
- ai_analysis_set_id?: number | null;
6496
7066
  /**
6497
7067
  * @description Limit the number of images taken for this list item. Must be positive number
6498
7068
  * @example 11
@@ -6553,8 +7123,18 @@ export interface components {
6553
7123
  id: number;
6554
7124
  /** @description The timestamp when the list item was marked as incomplete. */
6555
7125
  incomplete_at?: string;
6556
- is_deleted: unknown;
6557
- is_required: unknown;
7126
+ /**
7127
+ * @description Whether or not this item has been soft-deleted
7128
+ * @default false
7129
+ * @example true
7130
+ */
7131
+ is_deleted: boolean;
7132
+ /**
7133
+ * @description Whether the photo/video/question is required to finish the inspection.
7134
+ * @default false
7135
+ * @example true
7136
+ */
7137
+ is_required: boolean;
6558
7138
  /**
6559
7139
  * @description The id of the list that is item is associated with.
6560
7140
  * @example 1256
@@ -6641,16 +7221,11 @@ export interface components {
6641
7221
  */
6642
7222
  accuracy?: number;
6643
7223
  /**
6644
- * @description Whether the AI analysis test is complete for this Truepic.
7224
+ * @description Whether the Truepic has been archived
7225
+ * @default false
6645
7226
  * @example true
6646
7227
  */
6647
- ai_analysis_done?: boolean;
6648
- /**
6649
- * @description The status of an AI analysis test on this Truepic.
6650
- * @example P
6651
- */
6652
- ai_analysis_status: components["schemas"]["TestResult"];
6653
- archived: unknown;
7228
+ archived: boolean;
6654
7229
  /**
6655
7230
  * @description The status of a blockchain test on this Truepic.
6656
7231
  * @example P
@@ -6754,14 +7329,29 @@ export interface components {
6754
7329
  * @example Looks damaged.
6755
7330
  */
6756
7331
  internal_note?: string;
6757
- is_deleted: unknown;
6758
- is_rooted: unknown;
7332
+ /**
7333
+ * @description Whether this Truepic has been deleted.
7334
+ * @default false
7335
+ * @example true
7336
+ */
7337
+ is_deleted: boolean;
7338
+ /**
7339
+ * @description Whether the device that captured the Truepic is rooted
7340
+ * @default false
7341
+ * @example true
7342
+ */
7343
+ is_rooted: boolean;
6759
7344
  /**
6760
7345
  * @description The GPS latitude where the photo/video was taken.
6761
7346
  * @example 33.5565051716316
6762
7347
  */
6763
7348
  lat: string;
6764
- lens_transfer_done: unknown;
7349
+ /**
7350
+ * @description Whether the transfer from Lens is complete for this Truepic.
7351
+ * @default false
7352
+ * @example true
7353
+ */
7354
+ lens_transfer_done: boolean;
6765
7355
  /** @description The list item this photo/video was captured for, if any. */
6766
7356
  list_item?: {
6767
7357
  /**
@@ -6786,9 +7376,19 @@ export interface components {
6786
7376
  * @description The id of the resource.
6787
7377
  * @example 1843
6788
7378
  */
6789
- id: number;
6790
- is_deleted: unknown;
6791
- is_required: unknown;
7379
+ id: number;
7380
+ /**
7381
+ * @description Whether or not this item has been soft-deleted
7382
+ * @default false
7383
+ * @example true
7384
+ */
7385
+ is_deleted: boolean;
7386
+ /**
7387
+ * @description Whether the photo/video/question is required to finish the inspection.
7388
+ * @default false
7389
+ * @example true
7390
+ */
7391
+ is_required: boolean;
6792
7392
  /**
6793
7393
  * @description A description of the requested photo or video when `type` is `IMAGE`, `PHOTO`, or `VIDEO`. A question for the customer to answer when `type` is `QUESTION`. The customer will see this value in the Vision app during the inspection.
6794
7394
  * @example Front of car
@@ -6885,7 +7485,12 @@ export interface components {
6885
7485
  * @example 11.4.1
6886
7486
  */
6887
7487
  os?: string;
6888
- pending_upload: unknown;
7488
+ /**
7489
+ * @description Whether the Truepic is still uploading
7490
+ * @default false
7491
+ * @example true
7492
+ */
7493
+ pending_upload: boolean;
6889
7494
  /**
6890
7495
  * @description The photo list id this Truepic is a part of
6891
7496
  * @example 5678
@@ -6932,7 +7537,12 @@ export interface components {
6932
7537
  * @example CA
6933
7538
  */
6934
7539
  state?: string;
6935
- status_overridden: unknown;
7540
+ /**
7541
+ * @description Whether the status for this Truepic has been overridden
7542
+ * @default false
7543
+ * @example true
7544
+ */
7545
+ status_overridden: boolean;
6936
7546
  /**
6937
7547
  * @description The timestamp of the capture of the Truepic
6938
7548
  * @example 2018-08-07 13:16:15
@@ -7003,7 +7613,12 @@ export interface components {
7003
7613
  * @example 1000
7004
7614
  */
7005
7615
  is_address_required: boolean;
7006
- is_deleted: unknown;
7616
+ /**
7617
+ * @description Whether this inspection type is deleted
7618
+ * @default false
7619
+ * @example true
7620
+ */
7621
+ is_deleted: boolean;
7007
7622
  /**
7008
7623
  * @description When true, the list associated with this inspection type cannot be changed
7009
7624
  * @example false
@@ -7147,6 +7762,18 @@ export interface components {
7147
7762
  */
7148
7763
  use_single_name_field: boolean;
7149
7764
  };
7765
+ /** @description One entry in ai_inspection_item_additional_details_results.items_found. */
7766
+ ItemsFoundEntry: {
7767
+ confidence: number;
7768
+ id: number;
7769
+ /** @description id from ai_inspection_item_results (same event); null when attribution is ambiguous. */
7770
+ item_id: number | null;
7771
+ label: string;
7772
+ /** @description UUID from the matching ai_item_types.additional_details_lookfor entry (INSTANCE row). null for adjacent-discovery items the AI surfaced without a configured match. */
7773
+ lookfor_id: string | null;
7774
+ observation: string;
7775
+ sources: components["schemas"]["Source"][];
7776
+ };
7150
7777
  LandingPageContentSerialized: {
7151
7778
  assets: {
7152
7779
  [key: string]: string;
@@ -7301,11 +7928,6 @@ export interface components {
7301
7928
  * @example false
7302
7929
  */
7303
7930
  accept_existing_images?: boolean;
7304
- /**
7305
- * @description The id of the AI Analysis Set used for Vision AI Analysis. References `ai_analysis_sets.id`
7306
- * @example 3
7307
- */
7308
- ai_analysis_set_id?: number | null;
7309
7931
  /**
7310
7932
  * @description Limit the number of images taken for this list item. Must be positive number
7311
7933
  * @example 11
@@ -7367,8 +7989,18 @@ export interface components {
7367
7989
  id: number;
7368
7990
  /** @description The timestamp when the list item was marked as incomplete. */
7369
7991
  incomplete_at?: string;
7370
- is_deleted: unknown;
7371
- is_required: unknown;
7992
+ /**
7993
+ * @description Whether or not this item has been soft-deleted
7994
+ * @default false
7995
+ * @example true
7996
+ */
7997
+ is_deleted: boolean;
7998
+ /**
7999
+ * @description Whether the photo/video/question is required to finish the inspection.
8000
+ * @default false
8001
+ * @example true
8002
+ */
8003
+ is_required: boolean;
7372
8004
  /**
7373
8005
  * @description The id of the list that is item is associated with.
7374
8006
  * @example 1256
@@ -7484,11 +8116,6 @@ export interface components {
7484
8116
  * @example false
7485
8117
  */
7486
8118
  accept_existing_images?: boolean;
7487
- /**
7488
- * @description The id of the AI Analysis Set used for Vision AI Analysis. References `ai_analysis_sets.id`
7489
- * @example 3
7490
- */
7491
- ai_analysis_set_id?: number | null;
7492
8119
  /**
7493
8120
  * @description Limit the number of images taken for this list item. Must be positive number
7494
8121
  * @example 11
@@ -7539,7 +8166,12 @@ export interface components {
7539
8166
  * @example true
7540
8167
  */
7541
8168
  incomplete?: boolean;
7542
- is_required: unknown;
8169
+ /**
8170
+ * @description Whether the photo/video/question is required to finish the inspection.
8171
+ * @default false
8172
+ * @example true
8173
+ */
8174
+ is_required: boolean;
7543
8175
  /**
7544
8176
  * @description A description of the requested photo or video when `type` is `IMAGE`, `PHOTO`, or `VIDEO`. A question for the customer to answer when `type` is `QUESTION`. The customer will see this value in the Vision app during the inspection.
7545
8177
  * @example Front of car
@@ -7655,7 +8287,12 @@ export interface components {
7655
8287
  * @example Inspection Finished for {{OrganizationFirstName}}
7656
8288
  */
7657
8289
  inspection_finished_subject: string;
7658
- is_deleted: unknown;
8290
+ /**
8291
+ * @description Whether or not this message template set has been soft-deleted
8292
+ * @default false
8293
+ * @example true
8294
+ */
8295
+ is_deleted: boolean;
7659
8296
  /**
7660
8297
  * @description The name of the message template set
7661
8298
  * @example Default Set
@@ -7931,8 +8568,18 @@ export interface components {
7931
8568
  * @example 1843
7932
8569
  */
7933
8570
  id: number;
7934
- is_deleted: unknown;
7935
- is_mfa_required: unknown;
8571
+ /**
8572
+ * @description Whether or not this organization has been soft-deleted.
8573
+ * @default false
8574
+ * @example true
8575
+ */
8576
+ is_deleted: boolean;
8577
+ /**
8578
+ * @description Whether multi-factor authentication is required for user login.
8579
+ * @default false
8580
+ * @example true
8581
+ */
8582
+ is_mfa_required: boolean;
7936
8583
  /**
7937
8584
  * @description The name of the organization.
7938
8585
  * @example Quality Capital
@@ -8001,7 +8648,7 @@ export interface components {
8001
8648
  updated_by_user_id: number | null;
8002
8649
  };
8003
8650
  /** @enum {string} */
8004
- OrganizationEnabledFeatureType: "ai_analysis" | "ask_for_app_review" | "inspection_device_insights" | "device_details" | "risk_network" | "external_risk_network" | "content_analysis_odometer" | "content_analysis_text_matching" | "content_analysis_vin" | "content_analysis_dot_tin" | "object_detection_auto" | "object_detection_jewelry" | "object_detection_real_estate" | "landing_pages" | "inspection_ai_criteria" | "dashboard_user_feedback_forms" | "member_homepage" | "reuse_detection";
8651
+ OrganizationEnabledFeatureType: "ai_analysis" | "ask_for_app_review" | "inspection_device_insights" | "device_details" | "risk_network" | "external_risk_network" | "content_analysis_odometer" | "content_analysis_text_matching" | "content_analysis_vin" | "content_analysis_dot_tin" | "object_detection_auto" | "object_detection_jewelry" | "object_detection_real_estate" | "landing_pages" | "inspection_readiness" | "dashboard_user_feedback_forms" | "member_homepage" | "reuse_detection" | "restrict_members_to_inspection_details" | "ai_analysis_configuration" | "guided_capture";
8005
8652
  /** @description A possible outcome for an inspection */
8006
8653
  Outcome: {
8007
8654
  /**
@@ -8020,7 +8667,12 @@ export interface components {
8020
8667
  * @example 1843
8021
8668
  */
8022
8669
  id: number;
8023
- is_deleted: unknown;
8670
+ /**
8671
+ * @description Whether or not this outcome set has been soft-deleted
8672
+ * @default false
8673
+ * @example true
8674
+ */
8675
+ is_deleted: boolean;
8024
8676
  /**
8025
8677
  * @description The id of the user that last edited this outcome set.
8026
8678
  * @example 542
@@ -8061,7 +8713,12 @@ export interface components {
8061
8713
  * @example 1843
8062
8714
  */
8063
8715
  id: number;
8064
- is_deleted: unknown;
8716
+ /**
8717
+ * @description Whether or not this outcome set has been soft-deleted
8718
+ * @default false
8719
+ * @example true
8720
+ */
8721
+ is_deleted: boolean;
8065
8722
  /**
8066
8723
  * @description The id of the user that last edited this outcome set.
8067
8724
  * @example 542
@@ -8152,6 +8809,55 @@ export interface components {
8152
8809
  PaginationSorting: {
8153
8810
  [key: string]: "asc" | "desc";
8154
8811
  };
8812
+ PhotoDetectedSource: {
8813
+ tag: string;
8814
+ truepic_ids: number[];
8815
+ type: string;
8816
+ };
8817
+ PhotoTextSource: {
8818
+ string: string;
8819
+ truepic_ids: number[];
8820
+ type: string;
8821
+ };
8822
+ /** @description Attached by `inspection-ai-items-populator` (via `InspectionPopulator` when constructed with `includeAIItems: true`). Holds the result snapshot from the latest *completed* extraction event, the derived analysis status, and the inspection's frozen AI Item Type schema. Optional fields on `PopulatedInspection` because they're only present on the inspection-detail code path. */
8823
+ PopulatedAIInspectionItem: {
8824
+ /** @description Per-model call audit data from the classification step. */
8825
+ classification_audit_json: components["schemas"]["AuditEntry"][] | unknown;
8826
+ /** @description 0..1 classifier confidence for this item identification. */
8827
+ classification_confidence: number | null;
8828
+ /**
8829
+ * Format: date-time
8830
+ * @description The date/time the resource was created
8831
+ * @example 2020-05-01T21:44:40.000Z
8832
+ */
8833
+ created_at: string;
8834
+ detected_type: string;
8835
+ fields: components["schemas"]["AIInspectionItemFieldResult"][];
8836
+ id: number;
8837
+ inspection_id: number;
8838
+ /** @description 0-indexed position within the set of EXPECTED items for this event. */
8839
+ item_index: number | null;
8840
+ /** @description FK to ai_item_types.id (INSTANCE row); null for UNEXPECTED items. */
8841
+ item_type_id: number | null;
8842
+ /** @enum {string} */
8843
+ kind: "EXPECTED" | "UNEXPECTED";
8844
+ /** @description Populated for UNEXPECTED items; null for EXPECTED. */
8845
+ message: string | null;
8846
+ /** @description FK to ai_extraction_events.id — the run that produced this row. */
8847
+ triggering_event_id?: number;
8848
+ /** @description Truepic IDs of all captures the classifier associated with this item. */
8849
+ truepic_ids: number[];
8850
+ /**
8851
+ * Format: date-time
8852
+ * @description The date/time the resource was last updated
8853
+ * @example 2020-05-01T21:44:40.000Z
8854
+ */
8855
+ updated_at: string;
8856
+ };
8857
+ PopulatedAIItemTypeInstance: {
8858
+ fields: components["schemas"]["AIItemTypeField"][];
8859
+ itemType: components["schemas"]["AIItemType"];
8860
+ };
8155
8861
  PopulatedCustomField: {
8156
8862
  /** @description The id of the custom field option set used by this custom field when the entry method is ENTRY_METHOD_SELECTABLE */
8157
8863
  custom_field_option_set_id?: number;
@@ -8167,7 +8873,12 @@ export interface components {
8167
8873
  custom_field_options?: components["schemas"]["CustomFieldOption"][];
8168
8874
  /** @description The entry method for the custom field */
8169
8875
  entry_method: components["schemas"]["CustomFieldEntryMethods"];
8170
- is_required: unknown;
8876
+ /**
8877
+ * @description When true, the user must supply a value for this custom field in order to create an inspection
8878
+ * @default false
8879
+ * @example true
8880
+ */
8881
+ is_required: boolean;
8171
8882
  /** @description The label for the custom field */
8172
8883
  label?: string;
8173
8884
  };
@@ -8200,7 +8911,12 @@ export interface components {
8200
8911
  */
8201
8912
  name: string;
8202
8913
  }[];
8203
- is_deleted: unknown;
8914
+ /**
8915
+ * @description Whether or not this custom field option set has been soft-deleted
8916
+ * @default false
8917
+ * @example true
8918
+ */
8919
+ is_deleted: boolean;
8204
8920
  /**
8205
8921
  * @description The id of the user that last edited this custom field option set.
8206
8922
  * @example 542
@@ -8456,7 +9172,12 @@ export interface components {
8456
9172
  * @example 1843
8457
9173
  */
8458
9174
  id: number;
8459
- include_list?: unknown;
9175
+ /**
9176
+ * @description Whether to include the inspection type's list by default with new inspection requests.
9177
+ * @default false
9178
+ * @example true
9179
+ */
9180
+ include_list: boolean;
8460
9181
  inspection_types: {
8461
9182
  /**
8462
9183
  * Format: date-time
@@ -8515,7 +9236,12 @@ export interface components {
8515
9236
  * @example 1000
8516
9237
  */
8517
9238
  is_address_required: boolean;
8518
- is_deleted: unknown;
9239
+ /**
9240
+ * @description Whether this inspection type is deleted
9241
+ * @default false
9242
+ * @example true
9243
+ */
9244
+ is_deleted: boolean;
8519
9245
  /**
8520
9246
  * @description When true, the list associated with this inspection type cannot be changed
8521
9247
  * @example false
@@ -8556,7 +9282,12 @@ export interface components {
8556
9282
  */
8557
9283
  inspection_id?: number;
8558
9284
  inspection_types: components["schemas"]["InspectionType"][];
8559
- is_deleted: unknown;
9285
+ /**
9286
+ * @description Whether or not this list has been soft-deleted
9287
+ * @default false
9288
+ * @example true
9289
+ */
9290
+ is_deleted: boolean;
8560
9291
  items: components["schemas"]["ListItem"][];
8561
9292
  /**
8562
9293
  * @description The auto-generated name of the list.
@@ -8655,7 +9386,12 @@ export interface components {
8655
9386
  */
8656
9387
  use_single_name_field: boolean;
8657
9388
  }[];
8658
- is_deleted: unknown;
9389
+ /**
9390
+ * @description Whether or not this config has been soft-deleted
9391
+ * @default false
9392
+ * @example true
9393
+ */
9394
+ is_deleted: boolean;
8659
9395
  /**
8660
9396
  * @description The amount of time before an admin member's login token when switching teams expires. Any format supported by https://github.com/vercel/ms is valid.
8661
9397
  * @default 72h
@@ -8700,7 +9436,12 @@ export interface components {
8700
9436
  */
8701
9437
  inspection_id?: number;
8702
9438
  inspection_types: components["schemas"]["InspectionType"][];
8703
- is_deleted: unknown;
9439
+ /**
9440
+ * @description Whether or not this list has been soft-deleted
9441
+ * @default false
9442
+ * @example true
9443
+ */
9444
+ is_deleted: boolean;
8704
9445
  items: components["schemas"]["ListItem"][];
8705
9446
  /**
8706
9447
  * @description The auto-generated name of the list.
@@ -8802,7 +9543,12 @@ export interface components {
8802
9543
  * @example 2020-05-01T21:44:40.000Z
8803
9544
  */
8804
9545
  updated_at: string;
8805
- video_enabled?: unknown;
9546
+ /**
9547
+ * @description Whether video is enabled as a capture method in the app.
9548
+ * @default false
9549
+ * @example true
9550
+ */
9551
+ video_enabled: boolean;
8806
9552
  };
8807
9553
  PopulatedTextMatchingSet: {
8808
9554
  can_delete: boolean;
@@ -8822,7 +9568,12 @@ export interface components {
8822
9568
  * @example 1843
8823
9569
  */
8824
9570
  id: number;
8825
- is_deleted: unknown;
9571
+ /**
9572
+ * @description Whether or not this text matching set has been soft-deleted
9573
+ * @default false
9574
+ * @example true
9575
+ */
9576
+ is_deleted: boolean;
8826
9577
  lists: {
8827
9578
  id: number;
8828
9579
  name: string;
@@ -8917,14 +9668,6 @@ export interface components {
8917
9668
  /** @description The identifier for the user */
8918
9669
  user_id: string;
8919
9670
  };
8920
- QuestionTruepicExampleItem: {
8921
- accepted: boolean;
8922
- confidence?: number | null;
8923
- consensus?: boolean | null;
8924
- reason: string | null;
8925
- truepic_id: number;
8926
- url: string;
8927
- };
8928
9671
  RecordWebsiteFormBearerActivityBody: {
8929
9672
  activity: string;
8930
9673
  data?: Record<string, never>;
@@ -8995,7 +9738,12 @@ export interface components {
8995
9738
  };
8996
9739
  /** @description The request body for PUT /text/request */
8997
9740
  SendRequestMoreTextBody: {
8998
- include_list?: unknown;
9741
+ /**
9742
+ * @description Set to true when sending list items in the `list` property.
9743
+ * @default false
9744
+ * @example true
9745
+ */
9746
+ include_list: boolean;
8999
9747
  /**
9000
9748
  * @description The id of the inspection
9001
9749
  * @example 123
@@ -9080,7 +9828,16 @@ export interface components {
9080
9828
  name: string;
9081
9829
  };
9082
9830
  SerializedInspection: {
9831
+ ai_analysis_status?: components["schemas"]["AIAnalysisStatus"];
9832
+ ai_inspection_additional_details?: components["schemas"]["AIInspectionItemAdditionalDetailsResult"] | unknown;
9833
+ /** @description The reviewing member user's latest consolidated verdict feedback (all surfaces), surfaced on GET /inspections/{id}. Null when no feedback has been submitted. */
9834
+ ai_inspection_feedback?: components["schemas"]["AIInspectionFeedback"] | unknown;
9835
+ /** @description Populated by `inspection-ai-items-populator` only — present when the populator was constructed with `includeAIItems: true`. */
9836
+ ai_inspection_items?: components["schemas"]["PopulatedAIInspectionItem"][];
9837
+ /** @description Per-inspection lock for the AI Analysis Configuration "inspection items" pipeline. Null until the first AI run resolves it from global_configs.VISION_AI_INSPECTION_ITEMS_PIPELINE_ID under FOR UPDATE; immutable thereafter so the audit chain attaches to a single pipeline even if the global config is later changed. Spec §2.7, §3.4. */
9838
+ ai_inspection_items_pipeline_id: number | null;
9083
9839
  ai_inspection_ready_result?: components["schemas"]["AIInspectionReadyResult"] | unknown;
9840
+ ai_item_type_instances?: components["schemas"]["PopulatedAIItemTypeInstance"][];
9084
9841
  /**
9085
9842
  * @description The AI analysis result for this inspection.
9086
9843
  * @example pass
@@ -9088,14 +9845,14 @@ export interface components {
9088
9845
  ai_status?: components["schemas"]["VerificationResult"];
9089
9846
  /** @description The details of the AI status for this inspection. This may include information about the criteria evaluation, any inconsistencies detected, and more. */
9090
9847
  ai_status_details?: components["schemas"]["AIStatusDetails"];
9091
- /**
9092
- * @description The reason for the AI analysis result for this inspection.
9093
- * @example COMPLETE_WITH_NO_INCONSISTENCIES
9094
- */
9095
- ai_status_reason?: components["schemas"]["AIStatusReason"];
9096
9848
  ai_user_criteria_result?: components["schemas"]["AIUserCriteriaResult"] | unknown;
9097
9849
  alert: components["schemas"]["InspectionAlertResult"];
9098
- app_opened: unknown;
9850
+ /**
9851
+ * @description Whether the Vision app has been opened by the customer
9852
+ * @default false
9853
+ * @example true
9854
+ */
9855
+ app_opened: boolean;
9099
9856
  assigned_to_member_user: components["schemas"]["User"];
9100
9857
  /**
9101
9858
  * @description The id of the user this inspection is assigned to.
@@ -9288,7 +10045,12 @@ export interface components {
9288
10045
  * @example 1000
9289
10046
  */
9290
10047
  is_address_required: boolean;
9291
- is_deleted: unknown;
10048
+ /**
10049
+ * @description Whether this inspection type is deleted
10050
+ * @default false
10051
+ * @example true
10052
+ */
10053
+ is_deleted: boolean;
9292
10054
  /**
9293
10055
  * @description When true, the list associated with this inspection type cannot be changed
9294
10056
  * @example false
@@ -9329,7 +10091,12 @@ export interface components {
9329
10091
  */
9330
10092
  inspection_id?: number;
9331
10093
  inspection_types: components["schemas"]["InspectionType"][];
9332
- is_deleted: unknown;
10094
+ /**
10095
+ * @description Whether or not this list has been soft-deleted
10096
+ * @default false
10097
+ * @example true
10098
+ */
10099
+ is_deleted: boolean;
9333
10100
  items: components["schemas"]["ListItem"][];
9334
10101
  /**
9335
10102
  * @description The auto-generated name of the list.
@@ -9433,8 +10200,18 @@ export interface components {
9433
10200
  * @example 12
9434
10201
  */
9435
10202
  inspection_type_id: number;
9436
- is_deleted: unknown;
9437
- is_expired: unknown;
10203
+ /**
10204
+ * @description Represents if the inspection has been soft-deleted
10205
+ * @default false
10206
+ * @example true
10207
+ */
10208
+ is_deleted: boolean;
10209
+ /**
10210
+ * @description Whether the inspection has expired
10211
+ * @default false
10212
+ * @example true
10213
+ */
10214
+ is_expired: boolean;
9438
10215
  list: {
9439
10216
  /**
9440
10217
  * @description The groups of items in the list
@@ -9511,7 +10288,7 @@ export interface components {
9511
10288
  /** @description The method(s) to send the inspection request to the customer completing the inspection. */
9512
10289
  send_methods: {
9513
10290
  /**
9514
- * @description When true, will send text messages to the customer_email_address
10291
+ * @description When true, will send emails to the customer_email_address
9515
10292
  * @example false
9516
10293
  */
9517
10294
  email: boolean;
@@ -9627,7 +10404,12 @@ export interface components {
9627
10404
  * @example 4335
9628
10405
  */
9629
10406
  inspection_id: number;
9630
- is_deleted?: unknown;
10407
+ /**
10408
+ * @description Whether or not this action has been soft-deleted
10409
+ * @default false
10410
+ * @example true
10411
+ */
10412
+ is_deleted: boolean;
9631
10413
  location: components["schemas"]["PopulatedLocation"];
9632
10414
  /**
9633
10415
  * @description The id of the location record
@@ -9744,7 +10526,12 @@ export interface components {
9744
10526
  * @example 1843
9745
10527
  */
9746
10528
  id: number;
9747
- is_mfa_required: unknown;
10529
+ /**
10530
+ * @description Whether multi-factor authentication is required for user login.
10531
+ * @default false
10532
+ * @example true
10533
+ */
10534
+ is_mfa_required: boolean;
9748
10535
  /**
9749
10536
  * @description The name of the organization.
9750
10537
  * @example Quality Capital
@@ -9799,6 +10586,7 @@ export interface components {
9799
10586
  name?: string;
9800
10587
  }[];
9801
10588
  };
10589
+ Source: components["schemas"]["PhotoTextSource"] | components["schemas"]["PhotoDetectedSource"] | components["schemas"]["AISuggestedSource"] | components["schemas"]["OrganizationStatedSource"] | components["schemas"]["WebLookupSource"];
9802
10590
  SubmitItemDetailsToolCallParams: {
9803
10591
  auditor_notes: string;
9804
10592
  criteria_results: {
@@ -9846,6 +10634,16 @@ export interface components {
9846
10634
  */
9847
10635
  response_code: number;
9848
10636
  };
10637
+ /** @description Records a rerun verdict that was suppressed in favor of the prior value (VISION-2126). When an `open_answer` field re-runs without genuinely-new evidence, the persisted columns keep the prior value, but the verdict the rerun actually produced is preserved here in the field's `audit_json` so the suppressed answer (and its dissent) isn't lost. The `dissenters` that belong to this rerun live on this entry rather than on the row, keeping the row's own `dissenters` aligned with its (prior) value. */
10638
+ SuppressedExtractionAuditEntry: {
10639
+ confidence: number | null;
10640
+ dissenters: components["schemas"]["Dissenter"][];
10641
+ kind: string;
10642
+ reasoning: string | null;
10643
+ sources: components["schemas"]["Source"][];
10644
+ status: components["schemas"]["FieldStatus"];
10645
+ value: string | string[] | unknown;
10646
+ };
9849
10647
  /** @description A Team that exists under an organization in Vision that sends out inspection requests */
9850
10648
  Team: {
9851
10649
  /**
@@ -9956,8 +10754,18 @@ export interface components {
9956
10754
  * @example 1843
9957
10755
  */
9958
10756
  id: number;
9959
- include_list?: unknown;
9960
- is_deleted: unknown;
10757
+ /**
10758
+ * @description Whether to include the inspection type's list by default with new inspection requests.
10759
+ * @default false
10760
+ * @example true
10761
+ */
10762
+ include_list: boolean;
10763
+ /**
10764
+ * @description Whether or not this config has been soft-deleted
10765
+ * @default false
10766
+ * @example true
10767
+ */
10768
+ is_deleted: boolean;
9961
10769
  /**
9962
10770
  * @description The amount of time before an admin member's login token when switching teams expires. Any format supported by https://github.com/vercel/ms is valid.
9963
10771
  * @default 72h
@@ -10040,7 +10848,12 @@ export interface components {
10040
10848
  * @example 2020-05-01T21:44:40.000Z
10041
10849
  */
10042
10850
  updated_at: string;
10043
- video_enabled?: unknown;
10851
+ /**
10852
+ * @description Whether video is enabled as a capture method in the app.
10853
+ * @default false
10854
+ * @example true
10855
+ */
10856
+ video_enabled: boolean;
10044
10857
  };
10045
10858
  TeamPayload: {
10046
10859
  /**
@@ -10151,8 +10964,18 @@ export interface components {
10151
10964
  * @example 1843
10152
10965
  */
10153
10966
  id?: number;
10154
- include_list?: unknown;
10155
- is_deleted?: unknown;
10967
+ /**
10968
+ * @description Whether to include the inspection type's list by default with new inspection requests.
10969
+ * @default false
10970
+ * @example true
10971
+ */
10972
+ include_list: boolean;
10973
+ /**
10974
+ * @description Whether or not this config has been soft-deleted
10975
+ * @default false
10976
+ * @example true
10977
+ */
10978
+ is_deleted: boolean;
10156
10979
  /**
10157
10980
  * @description The amount of time before an admin member's login token when switching teams expires. Any format supported by https://github.com/vercel/ms is valid.
10158
10981
  * @default 72h
@@ -10238,7 +11061,12 @@ export interface components {
10238
11061
  * @example 2020-05-01T21:44:40.000Z
10239
11062
  */
10240
11063
  updated_at?: string;
10241
- video_enabled?: unknown;
11064
+ /**
11065
+ * @description Whether video is enabled as a capture method in the app.
11066
+ * @default false
11067
+ * @example true
11068
+ */
11069
+ video_enabled: boolean;
10242
11070
  };
10243
11071
  TeamWebhookDBPayload: {
10244
11072
  /**
@@ -10568,7 +11396,12 @@ export interface components {
10568
11396
  * @example true
10569
11397
  */
10570
11398
  is_enabled: boolean;
10571
- is_required: unknown;
11399
+ /**
11400
+ * @description When true, the user must supply a value for this custom field in order to create an inspection
11401
+ * @default false
11402
+ * @example true
11403
+ */
11404
+ is_required: boolean;
10572
11405
  /** @description The label for the custom field */
10573
11406
  label?: string;
10574
11407
  };
@@ -10656,7 +11489,12 @@ export interface components {
10656
11489
  * @example 3028675309
10657
11490
  */
10658
11491
  customer_phone_number?: string;
10659
- include_list?: unknown;
11492
+ /**
11493
+ * @description Must be true when including `list`.
11494
+ * @default false
11495
+ * @example false
11496
+ */
11497
+ include_list: boolean;
10660
11498
  /**
10661
11499
  * @description Free-form inspection-ready criteria text. Max length 10KB.
10662
11500
  * @example Capture all rooms and appliances.
@@ -10710,7 +11548,7 @@ export interface components {
10710
11548
  /** @description The method(s) to send the inspection request to the customer completing the inspection. */
10711
11549
  send_methods?: {
10712
11550
  /**
10713
- * @description When true, will send text messages to the customer_email_address
11551
+ * @description When true, will send emails to the customer_email_address
10714
11552
  * @example false
10715
11553
  */
10716
11554
  email: boolean;
@@ -10746,6 +11584,87 @@ export interface components {
10746
11584
  id: number;
10747
11585
  };
10748
11586
  };
11587
+ /** @description Request Body for PUT /inspection-types/{inspectionTypeId} */
11588
+ UpdateInspectionTypeBody: {
11589
+ /**
11590
+ * @description the id of the user who created this inspection type. References `users.id`
11591
+ * @example 2343
11592
+ */
11593
+ created_by_member_user_id?: number;
11594
+ /** @description An array of custom fields that are used by this inspection type */
11595
+ custom_fields?: components["schemas"]["CustomField"][];
11596
+ /**
11597
+ * @description The id of the inspection alert configuration that is used by this inspection type. References `inspection_alert_configs.id`
11598
+ * @example 539
11599
+ */
11600
+ inspection_alert_config_id?: number;
11601
+ /**
11602
+ * @description Optional inspection-ready criteria text for this inspection type.
11603
+ * @example Capture the VIN plate clearly and include a full odometer photo.
11604
+ */
11605
+ inspection_ready_criteria_text?: string | null;
11606
+ /**
11607
+ * @description Controls whether an address is required for the inspection or not
11608
+ * @example 1000
11609
+ */
11610
+ is_address_required?: boolean;
11611
+ /**
11612
+ * @description When true, the list associated with this inspection type cannot be changed
11613
+ * @example false
11614
+ */
11615
+ is_list_locked?: boolean;
11616
+ /** @description The IETF language tag for the intended language of the inspection. Non-customizable text in emails will use the language specified here. */
11617
+ language?: components["schemas"]["LocalizationLanguages"];
11618
+ /**
11619
+ * @description The id of the list that is used by this inspection type. References `lists.id`
11620
+ * @example 3345
11621
+ */
11622
+ list_id?: number;
11623
+ /**
11624
+ * @description the maximum distance away from the configured inspection address that an inspection can be completed in meters.
11625
+ * @example 1000
11626
+ */
11627
+ max_distance_from_address_threshold?: number;
11628
+ /**
11629
+ * @description The id of the message template set that is used by this inspection type. References `message_template_sets.id`
11630
+ * @example 539
11631
+ */
11632
+ message_template_set_id?: number;
11633
+ /**
11634
+ * @description the id of the user who last modified this inspection type. References `users.id`
11635
+ * @example 2343
11636
+ */
11637
+ modified_by_member_user_id?: number;
11638
+ /**
11639
+ * @description The name of the inspection type
11640
+ * @example My Type
11641
+ */
11642
+ name?: string;
11643
+ /**
11644
+ * @description The id of the outcome set that is used by this inspection type. References `outcome_sets.id`
11645
+ * @example 539
11646
+ */
11647
+ outcome_set_id?: number;
11648
+ /**
11649
+ * @description The teams that are allowed to use this inspection type. Pass each team as an object containing its `id`. Passing an empty array removes all team associations.
11650
+ * @example [
11651
+ * {
11652
+ * "id": 12
11653
+ * },
11654
+ * {
11655
+ * "id": 24
11656
+ * }
11657
+ * ]
11658
+ */
11659
+ teams?: {
11660
+ id: number;
11661
+ }[];
11662
+ /**
11663
+ * @description When true, there is only one name for the user to fill out rather than a separate first name and last name field
11664
+ * @example true
11665
+ */
11666
+ use_single_name_field?: boolean;
11667
+ };
10749
11668
  UpdateInternalNoteBody: components["schemas"]["CreateInternalNoteBody"];
10750
11669
  UpdateLandingPageBody: {
10751
11670
  /**
@@ -11051,6 +11970,16 @@ export interface components {
11051
11970
  * @enum {string}
11052
11971
  */
11053
11972
  VisionRole: "SUPER_ADMIN" | "VISION_AGENT_ADMIN" | "VISION_AGENT" | "VISION_CONSUMER" | "AUTH0_BOT" | "WEBSITE_FORM_BOT" | "GROUP_AGENT" | "VISION_AGENT_OWN_INSPECTIONS" | "VIEW_ONLY" | "VISION_AGENT_REPORT";
11973
+ /** @description A citation backed by a provider-side web call — any of the registered provider tools (Google Search grounding, URL fetching, web search). Surfaces per VISION-1850. */
11974
+ WebLookupSource: {
11975
+ /** @description Excerpt or snippet from the cited content; absent when the provider didn't return one. */
11976
+ snippet?: string;
11977
+ /** @description Page/document title from the provider's grounding metadata. Absent when the provider didn't return one. */
11978
+ title?: string;
11979
+ type: string;
11980
+ /** @description URI of the page or document the model relied on. One URI per source — multiple supporting URIs become multiple `web_lookup` entries. */
11981
+ uri: string;
11982
+ };
11054
11983
  WebsiteFormBearerSerialized: {
11055
11984
  inspection_types: {
11056
11985
  /** @description An array of custom fields that are used by this inspection type */
@@ -11229,6 +12158,17 @@ export interface components {
11229
12158
  */
11230
12159
  updated_at: string;
11231
12160
  };
12161
+ /** @description V1 emits two intake_field values; additional values are reserved for post-V1. */
12162
+ OrganizationStatedSource: {
12163
+ /** @enum {string} */
12164
+ intake_field: "comment" | "list_item_answer";
12165
+ /** @description Present when intake_field='list_item_answer' — the answered list_items.id values. */
12166
+ list_item_ids?: number[];
12167
+ string: string;
12168
+ /** @description Present when intake_field='comment' — the capture(s) the comment is on. */
12169
+ truepic_ids?: number[];
12170
+ type: string;
12171
+ };
11232
12172
  };
11233
12173
  responses: {
11234
12174
  /** @description The request body couldn't be parsed. */