@truepic/vision-api-types 3.87.0 → 3.89.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 (2) hide show
  1. package/index.d.ts +1396 -31
  2. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -184,6 +184,69 @@ export interface paths {
184
184
  "<="?: string;
185
185
  };
186
186
  };
187
+ /**
188
+ * @description Sorting to order the results returned.
189
+ *
190
+ * The order of properties is important, as sorting is applied in the order specified.
191
+ *
192
+ * Defaults to `created_at` `asc`.
193
+ */
194
+ sort?: {
195
+ /**
196
+ * @description Sort by the name of the status.
197
+ * @example asc
198
+ * @enum {string}
199
+ */
200
+ status?: "asc" | "desc";
201
+ /**
202
+ * @description Sort by the name of the inspection type.
203
+ * @example asc
204
+ * @enum {string}
205
+ */
206
+ inspection_type?: "asc" | "desc";
207
+ /**
208
+ * @description Sort by the last name of the member who created the inspection request. Same as `created_by_member`.
209
+ * @example asc
210
+ * @enum {string}
211
+ */
212
+ member?: "asc" | "desc";
213
+ /**
214
+ * @description Sort by the last name of the member who created the inspection request. Same as `member`.
215
+ * @example asc
216
+ * @enum {string}
217
+ */
218
+ created_by_member?: "asc" | "desc";
219
+ /**
220
+ * @description Sort by the last name of the member who is currently assigned to the inspection request.
221
+ * @example asc
222
+ * @enum {string}
223
+ */
224
+ assigned_to_member?: "asc" | "desc";
225
+ /**
226
+ * @description Sort by the date/time when the last photo/video was uploaded.
227
+ * @example asc
228
+ * @enum {string}
229
+ */
230
+ photos?: "asc" | "desc";
231
+ /**
232
+ * @description Sort by the aggregate verification result of all photos/videos.
233
+ * @example asc
234
+ * @enum {string}
235
+ */
236
+ verification?: "asc" | "desc";
237
+ /**
238
+ * @description Sort by the date/time when the inspection request was created.
239
+ * @example asc
240
+ * @enum {string}
241
+ */
242
+ created_at?: "asc" | "desc";
243
+ /**
244
+ * @description Sort by the date/time when the inspection request was scheduled.
245
+ * @example asc
246
+ * @enum {string}
247
+ */
248
+ scheduled_for?: "asc" | "desc";
249
+ };
187
250
  /**
188
251
  * @description Pagination to limit the number of results returned.
189
252
  *
@@ -377,6 +440,20 @@ export interface paths {
377
440
  get: {
378
441
  parameters: {
379
442
  query?: {
443
+ /**
444
+ * @description When `true`, an authorized administrator receives an additive `ai_analysis_test` object, and `ai_status`, `ai_status_details` and `ai_item_types` carry the AI Analysis *test* when the inspection has one to show.
445
+ *
446
+ * When it has none — never tested, or the last test failed — those three fields carry the inspection's **ordinary** result instead. A queued or running test is the exception, and which way it goes depends on whether an earlier test result exists. On a first run there is none, so the three fields describe that run and come back empty. On a rerun the earlier test's result is retained, not withheld, and those fields keep carrying it until the rerun finishes or fails.
447
+ *
448
+ * `ai_analysis_test.results_type` (`test` or `ordinary`) names which of the two a response carries; see that field for how to read it.
449
+ *
450
+ * `ai_analysis_status.state` follows whichever result is being carried, so it is not the test's state — a run's own progress is `ai_analysis_test.attempt.state`.
451
+ *
452
+ * `alert`, `alert_count` and the PDF always describe the ordinary analysis whatever `results_type` says, because unpromoted tests are excluded from them by design.
453
+ *
454
+ * Without the parameter, or with the explicit value `false`, the response keeps its ordinary meaning and omits `ai_analysis_test` entirely — as it does for a caller whose role or organization is not entitled, whatever value is sent. Any other value, or the parameter repeated, is refused with `400 validation_error`. v3 only; on v2 the parameter has no effect.
455
+ */
456
+ include_ai_analysis_test?: "true" | "false";
380
457
  /**
381
458
  * @description The top-level `result` fields to include in the response.
382
459
  *
@@ -615,7 +692,7 @@ export interface paths {
615
692
  get?: never;
616
693
  /**
617
694
  * Update the type of an existing inspection
618
- * @description Updates the type of an existing inspection. The inspection type can only be changed to a inspection type that is assigned to the inspection's team. Changing the type of an inspection will delete any already-uploaded Truepics and will automatically re-send the request email/text to the customer. This endpoint will also set the inspection status to `Created`. Closed or Canceled inspections cannot have their inspection type changed.
695
+ * @description Updates the type of an existing inspection. The inspection type can only be changed to an inspection type that is assigned to the inspection's team. Changing the type of an inspection will delete any already-uploaded Truepics and will automatically re-send the request email/text to the customer. This endpoint will also set the inspection status to `Created`. Closed or Canceled inspections cannot have their inspection type changed. Any unpromoted AI Analysis test data on the inspection is hard-deleted, because it was produced from the old type's configuration; the change is refused while a test is queued or running. That refusal is a 409 carrying `test_run_in_progress`, or `test_data_not_removable` when some of the data can no longer be removed; branch on the code, not the status.
619
696
  */
620
697
  put: {
621
698
  parameters: {
@@ -646,6 +723,7 @@ export interface paths {
646
723
  401: components["responses"]["ErrorUnauthorized"];
647
724
  403: components["responses"]["ErrorForbidden"];
648
725
  404: components["responses"]["ErrorNotFound"];
726
+ 409: components["responses"]["AIAnalysisTestModeConflict"];
649
727
  412: components["responses"]["ErrorPreconditionFailed"];
650
728
  500: components["responses"]["ErrorUnhandled"];
651
729
  };
@@ -991,7 +1069,7 @@ export interface paths {
991
1069
  content: {
992
1070
  "multipart/form-data": {
993
1071
  /** Format: binary */
994
- asset?: string;
1072
+ asset: string;
995
1073
  };
996
1074
  };
997
1075
  };
@@ -1243,7 +1321,7 @@ export interface paths {
1243
1321
  content: {
1244
1322
  "multipart/form-data": {
1245
1323
  /** Format: binary */
1246
- asset?: string;
1324
+ asset: string;
1247
1325
  };
1248
1326
  };
1249
1327
  };
@@ -2023,7 +2101,7 @@ export interface paths {
2023
2101
  };
2024
2102
  responses: {
2025
2103
  /** @description Success */
2026
- 200: {
2104
+ 201: {
2027
2105
  headers: {
2028
2106
  [name: string]: unknown;
2029
2107
  };
@@ -2031,6 +2109,15 @@ export interface paths {
2031
2109
  "application/json": components["schemas"]["ResponseData"] & {
2032
2110
  /** @description The id of the newly created inspection type */
2033
2111
  id?: number;
2112
+ /** @description Present only when `ai_analysis_configuration` was supplied. Carries the configuration that was created in the same transaction as the type. */
2113
+ result?: {
2114
+ ai_analysis_configuration?: {
2115
+ inspection_type_id?: number;
2116
+ /** @enum {string} */
2117
+ lifecycle?: "test" | "live";
2118
+ item_types?: Record<string, never>[];
2119
+ };
2120
+ };
2034
2121
  };
2035
2122
  };
2036
2123
  };
@@ -2932,7 +3019,9 @@ export interface paths {
2932
3019
  headers: {
2933
3020
  [name: string]: unknown;
2934
3021
  };
2935
- content?: never;
3022
+ content: {
3023
+ "application/json": components["schemas"]["AIAnalysisTestModeErrorBody"];
3024
+ };
2936
3025
  };
2937
3026
  412: components["responses"]["ErrorPreconditionFailed"];
2938
3027
  500: components["responses"]["ErrorUnhandled"];
@@ -2986,7 +3075,10 @@ export interface paths {
2986
3075
  500: components["responses"]["ErrorUnhandled"];
2987
3076
  };
2988
3077
  };
2989
- /** Unlink an AI Item Type from an Inspection Type (auto-deletes the item type if no links remain in V1) */
3078
+ /**
3079
+ * Unlink an AI Item Type from an Inspection Type (auto-deletes the item type if no links remain in V1)
3080
+ * @description Unlinking the final template is a configuration removal and takes the same safety rules. Refused with 409 while a test is queued or running (`test_runs_in_progress`), or when some of the test data can no longer be removed (`test_data_not_removable`). Branch on the code, not the status.
3081
+ */
2990
3082
  delete: {
2991
3083
  parameters: {
2992
3084
  query?: never;
@@ -3016,6 +3108,7 @@ export interface paths {
3016
3108
  };
3017
3109
  content?: never;
3018
3110
  };
3111
+ 409: components["responses"]["AIAnalysisTestModeConflict"];
3019
3112
  412: components["responses"]["ErrorPreconditionFailed"];
3020
3113
  500: components["responses"]["ErrorUnhandled"];
3021
3114
  };
@@ -3029,6 +3122,17 @@ export interface paths {
3029
3122
  export type webhooks = Record<string, never>;
3030
3123
  export interface components {
3031
3124
  schemas: {
3125
+ /**
3126
+ * @description Publication state of an inspection type's AI Analysis configuration (VISION-3122).
3127
+ *
3128
+ * Absence of a value is a third, meaningful state: the configuration has never been published. That covers a type with no configuration at all and one that has linked TEMPLATEs but no lifecycle — a state `InspectionTypeModel.lockAIAnalysisForShareIfConfigured` matches deliberately. Like `TEST`, it enrolls no new inspections. `AIAnalysisLifecycleValue` names that union where a column or field can hold it.
3129
+ *
3130
+ * Lifecycle belongs to the inspection type rather than to the AI Item Type TEMPLATE, because one template can be linked to several inspection types and each publishes independently. Editing a shared template therefore changes future snapshots for every linked type without changing any of their lifecycles.
3131
+ * @enum {string}
3132
+ */
3133
+ AIAnalysisLifecycle: "test" | "live";
3134
+ /** @description Lifecycle as stored and sent on the wire, including the unconfigured state. */
3135
+ AIAnalysisLifecycleValue: components["schemas"]["AIAnalysisLifecycle"] | unknown;
3032
3136
  AIAnalysisStatus: {
3033
3137
  completed_event_count?: number;
3034
3138
  /** @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. */
@@ -3037,6 +3141,41 @@ export interface components {
3037
3141
  /** @enum {string} */
3038
3142
  state: "idle" | "waiting" | "running" | "completed" | "failed";
3039
3143
  };
3144
+ /**
3145
+ * @description The response body every AI Analysis test-mode refusal returns (contract §Errors).
3146
+ *
3147
+ * Declared here so the generated OpenAPI describes it. These refusals are written past the global error formatter — see `sendCodedError` — so they do not use the platform's `response_code`/`message` envelope, and a route that documents only a 409 description leaves a client no way to discover the `code` it is expected to branch on.
3148
+ */
3149
+ AIAnalysisTestModeErrorBody: {
3150
+ error: {
3151
+ /** @description Stable and intended for client logic. Never reworded; new categories may be added. Examples: `test_run_in_progress`, `test_runs_in_progress`, `test_data_not_removable`, `discard_blocked`, `idempotency_key_conflict`. */
3152
+ code: string;
3153
+ /**
3154
+ * @description Only information the caller is authorized to see, and never a raw database or provider message. The shape depends on `code`:
3155
+ *
3156
+ * - `test_run_in_progress` — `{ attempt: { id, state } }`, the one attempt blocking this inspection.
3157
+ * - `test_runs_in_progress` — `{ inspections: [{ inspection_id, attempt_id, state }] }`, every attempt blocking a type-wide operation.
3158
+ * - `test_data_not_removable` — `{ generations: [{ generation_id, extraction_event_id, reason }] }`. `extraction_event_id` names the row when the refusal came from the event-level walk and is null otherwise; `generation_id` is null when the refused row carries no generation.
3159
+ *
3160
+ * On a v2-served endpoint the response converter renames keys into v2 terminology, so `inspections`/`inspection_id` arrive as `events`/`event_id`.
3161
+ */
3162
+ details?: {
3163
+ [key: string]: unknown;
3164
+ };
3165
+ /** @description Safe to display or log. Clients must not branch on its wording. */
3166
+ message: string;
3167
+ };
3168
+ };
3169
+ AIAnalysisTestProjection: {
3170
+ attempt: components["schemas"]["TestProjectionAttempt"] | unknown;
3171
+ can_run: boolean;
3172
+ current_configuration_fingerprint: string | null;
3173
+ current_result: components["schemas"]["TestProjectionResult"] | unknown;
3174
+ eligible: boolean;
3175
+ inspection_type_lifecycle: components["schemas"]["AIAnalysisLifecycle"] | unknown;
3176
+ results_type: components["schemas"]["TestResultsType"];
3177
+ unavailable_reason: components["schemas"]["TestUnavailableReasonValue"] | unknown;
3178
+ };
3040
3179
  AIInspectionCriteriaEvaluationModelResultV1: {
3041
3180
  cachedTokens: number;
3042
3181
  discrepancies: components["schemas"]["DiscrepanciesOutputParams"][];
@@ -3131,7 +3270,7 @@ export interface components {
3131
3270
  audit_json: components["schemas"]["FieldResultAuditEntry"][];
3132
3271
  /** @description Cross-extraction conflict candidates. Present and non-empty only when status='conflict'. Not deduplicated — vote distribution is preserved. */
3133
3272
  candidate_values: components["schemas"]["CandidateValue"][];
3134
- /** @description 0..1 consensus confidence; null when status !== 'found'. */
3273
+ /** @description 0..1 extraction confidence; null when unavailable. Conflicts retain the new run's score despite a null row value; low-confidence checks require a non-null newest candidate answer. */
3135
3274
  confidence: number | null;
3136
3275
  /** @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. */
3137
3276
  copied_from_field_result_id: number | null;
@@ -3230,6 +3369,8 @@ export interface components {
3230
3369
  additional_details_considerations: string | null;
3231
3370
  /** @description Items-to-look-for for Additional Details. Each entry carries a UUID stable across template→instance copies; items_found[*].lookfor_id references it. */
3232
3371
  additional_details_lookfor: components["schemas"]["AIItemTypeLookforEntry"][];
3372
+ /** @description The immutable configuration snapshot this row belongs to. Required for INSTANCE and TEST_INSTANCE rows (VISION-3246). Null only on TEMPLATE rows, which are editable configuration. */
3373
+ configuration_generation_id: number | null;
3233
3374
  /**
3234
3375
  * Format: date-time
3235
3376
  * @description The date/time the resource was created
@@ -3237,17 +3378,17 @@ export interface components {
3237
3378
  */
3238
3379
  created_at: string;
3239
3380
  id: number;
3240
- /** @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. */
3381
+ /** @description Set for INSTANCE and TEST_INSTANCE rows; null for TEMPLATE rows. Template rows are associated with inspection types via the ai_item_type_inspection_types junction table. */
3241
3382
  inspection_id: number | null;
3242
3383
  name: string;
3243
3384
  organization_id: number;
3244
3385
  /** @description Informational pointer to the TEMPLATE row this INSTANCE was deep-copied from. Not a FK — survives template deletion intentionally. */
3245
3386
  source_item_type_id: number | null;
3246
3387
  /**
3247
- * @description Discriminates template rows (owned by an inspection type) from instance rows (frozen copies owned by an inspection).
3388
+ * @description `TEMPLATE` is the editable configuration an administrator maintains. `INSTANCE` and `TEST_INSTANCE` are immutable snapshots owned by an inspection — the ordinary one taken at creation, and the frozen copy a test run executes against (VISION-3124).
3248
3389
  * @enum {string}
3249
3390
  */
3250
- type: "TEMPLATE" | "INSTANCE";
3391
+ type: "TEMPLATE" | "INSTANCE" | "TEST_INSTANCE";
3251
3392
  /**
3252
3393
  * Format: date-time
3253
3394
  * @description The date/time the resource was last updated
@@ -3321,11 +3462,7 @@ export interface components {
3321
3462
  disposition: "pass" | "warn";
3322
3463
  field_id: number;
3323
3464
  field_name: string;
3324
- /**
3325
- * @description True when a `found` field's `confidence` is below the configured threshold. Never true for a row whose value is the field's own configured "not present" option: that reports absence, so its confidence describes a selection rather than an answer.
3326
- *
3327
- * Independent of `disposition`, which reports only whether the answer is wrong or missing and never warns for low confidence alone — so `disposition: 'pass'` with `is_low_confidence: true` means "the answer looks fine but the model was unsure", and the inspection's `ai_status` and alert still flag it for review. A field can be both.
3328
- */
3465
+ /** @description Below-threshold, non-null row confidence on a found answer or a conflict with a non-null newest candidate value. Conflicts use the new run's score. Excludes not_captured and configured absence-option answers. Independent of disposition (wrong/missing): either flag requires review, and both may be true. */
3329
3466
  is_low_confidence: boolean;
3330
3467
  /** @description True when the model answered a `found` field by selecting its configured "not present" option (VISION-2692) — the row REPORTS ABSENCE, and clients must not render it as a positive finding. Mirrors `SerializedAIItemFieldResult.not_captured_option_selected` in `serializers/ai-inspection-items.ts`. */
3331
3468
  not_captured_option_selected: boolean;
@@ -3404,6 +3541,465 @@ export interface components {
3404
3541
  photo_id?: number;
3405
3542
  test_key: string;
3406
3543
  };
3544
+ /** @description An organization in a resolved audience. */
3545
+ AnnouncementAudienceOrganization: {
3546
+ /**
3547
+ * @description The id of the organization.
3548
+ * @example 1843
3549
+ */
3550
+ id: number;
3551
+ /**
3552
+ * @description The name of the organization.
3553
+ * @example Quality Capital
3554
+ */
3555
+ name: string | null;
3556
+ };
3557
+ /** @description Exactly who an audience reaches, for the confirmation screen. */
3558
+ AnnouncementAudiencePreview: {
3559
+ /**
3560
+ * @description How many of those organizations already have the announced feature enabled, and so would see the already-enabled copy and settings button rather than the call to action. Null when the announcement names no feature.
3561
+ * @example 18
3562
+ */
3563
+ feature_enabled_organization_count: number | null;
3564
+ /**
3565
+ * @description How many active organizations the announcement resolves to. Always the whole audience, even when `organizations` is capped.
3566
+ * @example 42
3567
+ */
3568
+ organization_count: number;
3569
+ /** @description The first organizations in the audience, by name, capped at 100. */
3570
+ organizations: components["schemas"]["AnnouncementAudienceOrganization"][];
3571
+ /**
3572
+ * @description Whether the audience is larger than the returned `organizations`.
3573
+ * @example false
3574
+ */
3575
+ truncated: boolean;
3576
+ /**
3577
+ * @description How many dashboard users across those organizations would be shown the announcement. Counts people rather than memberships, so someone with a role in several targeted organizations is counted once. Excludes inspection recipients, bot accounts, super admins and deleted users.
3578
+ * @example 318
3579
+ */
3580
+ user_count: number;
3581
+ };
3582
+ /**
3583
+ * @description The request body for POST /announcements/manage/audience-preview — the targeting as the form currently holds it, rather than as it is stored.
3584
+ *
3585
+ * Every field is optional, and an empty body is the widest audience there is: every active organization, nothing excluded, no feature named. That is the default the authoring form starts on, which is why it can ask this before anything has been saved.
3586
+ */
3587
+ AnnouncementAudiencePreviewProps: {
3588
+ /**
3589
+ * @description Whether the audience starts global or is narrowed to industries. Defaults to `global`.
3590
+ * @example industries
3591
+ */
3592
+ audience_scope?: components["schemas"]["AnnouncementAudienceScope"];
3593
+ /**
3594
+ * @description The organizations to subtract from the resolved audience. Defaults to none.
3595
+ * @example [
3596
+ * 1843
3597
+ * ]
3598
+ */
3599
+ excluded_organization_ids?: number[];
3600
+ /**
3601
+ * @description The announced feature, if any, so the already-enabled split can be counted for copy that has not been saved yet. Defaults to none, and the split is answered as `null` rather than 0 when no feature is named.
3602
+ * @example ai_analysis_configuration
3603
+ */
3604
+ feature_identifier?: components["schemas"]["OrganizationEnabledFeatureType"] | unknown;
3605
+ /**
3606
+ * @description The industries to narrow to. Only meaningful under the `industries` scope. Defaults to none, and an `industries` scope with none resolves to nobody.
3607
+ * @example [
3608
+ * 3,
3609
+ * 7
3610
+ * ]
3611
+ */
3612
+ industry_ids?: number[];
3613
+ };
3614
+ /** @enum {string} */
3615
+ AnnouncementAudienceScope: "global" | "industries";
3616
+ /** @enum {string} */
3617
+ AnnouncementBadge: "new" | "beta";
3618
+ /** @description A row of the super-admin Manage table. */
3619
+ AnnouncementManageRow: {
3620
+ /**
3621
+ * @description How the audience starts out before exclusions are subtracted.
3622
+ * @example global
3623
+ */
3624
+ audience_scope: components["schemas"]["AnnouncementAudienceScope"];
3625
+ /**
3626
+ * @description A one-line description of who the announcement targets.
3627
+ * @example All organizations, excluding 3 organizations
3628
+ */
3629
+ audience_summary: string;
3630
+ /**
3631
+ * Format: date-time
3632
+ * @description The date/time the resource was created
3633
+ * @example 2020-05-01T21:44:40.000Z
3634
+ */
3635
+ created_at: string;
3636
+ /**
3637
+ * @description How many organizations the exclusions actually take out of the reach — only those the scope had reached in the first place, so this and `organization_count` cannot contradict each other. Excluding a soft-deleted organization, or one outside the targeted industries, does not count.
3638
+ * @example 2
3639
+ */
3640
+ excluded_organization_count: number;
3641
+ /**
3642
+ * @description The id of the resource.
3643
+ * @example 1
3644
+ */
3645
+ id: number;
3646
+ /**
3647
+ * @description The industries the audience is narrowed to, by name. Empty when `audience_scope` is `global`.
3648
+ * @example [
3649
+ * "Auto Warranty",
3650
+ * "Equipment Financing"
3651
+ * ]
3652
+ */
3653
+ industry_names: string[];
3654
+ /**
3655
+ * @description The name used to identify the announcement internally, unique across all announcements. Never *displayed* to an organization, but it is sent on the organization-facing feed: the dashboard reports it as the announcement's identity to Mixpanel, since two announcements can share a title.
3656
+ * @example AI Analysis
3657
+ */
3658
+ internal_name: string;
3659
+ /**
3660
+ * @description Whether the announcement is still being authored. A draft is never served to organizations, whatever its publish date, so an author can set a date and keep working. Defaults to true — an announcement goes public only by deliberately clearing this.
3661
+ * @example true
3662
+ */
3663
+ is_draft: boolean;
3664
+ /**
3665
+ * @description How many active organizations the targeting resolves to right now — a live count rather than a snapshot taken at publish time, and the same membership test the organization-facing endpoint applies.
3666
+ * @example 270
3667
+ */
3668
+ organization_count: number;
3669
+ /**
3670
+ * @description Whether the announcement should also be promoted as a modal. Feature announcements only.
3671
+ * @example false
3672
+ */
3673
+ promote_as_modal: boolean;
3674
+ /**
3675
+ * @description The date/time from which the announcement is live, once it is no longer a draft. Always set — a future value means it is scheduled.
3676
+ * @example 2026-08-27T00:00:00.000Z
3677
+ */
3678
+ published_at: string;
3679
+ /**
3680
+ * @description The lifecycle status, derived from `is_draft`, `published_at` and `unpublished_at` rather than stored.
3681
+ * @example published
3682
+ */
3683
+ status: components["schemas"]["AnnouncementStatus"];
3684
+ /**
3685
+ * @description The headline shown to the organization.
3686
+ * @example Introducing AI Analysis!
3687
+ */
3688
+ title: string;
3689
+ /**
3690
+ * @description Which kind of announcement this is.
3691
+ * @example feature_announcement
3692
+ */
3693
+ type: components["schemas"]["AnnouncementType"];
3694
+ /**
3695
+ * @description The date/time the announcement was unpublished. Null while it is a draft, scheduled or published; republishing clears it.
3696
+ * @example 2026-10-01T12:00:00.000Z
3697
+ */
3698
+ unpublished_at: string | null;
3699
+ /**
3700
+ * Format: date-time
3701
+ * @description The date/time the resource was last updated
3702
+ * @example 2020-05-01T21:44:40.000Z
3703
+ */
3704
+ updated_at: string;
3705
+ };
3706
+ /**
3707
+ * @description The request body for creating or updating an announcement.
3708
+ *
3709
+ * `legacy_seen_state_key` is deliberately absent — it is set by the cutover migration alone, never by an author. `created_by_user_id` and `updated_by_user_id` come from the authenticated super admin.
3710
+ */
3711
+ AnnouncementProps: {
3712
+ /**
3713
+ * @description The author-set display text for the additional link.
3714
+ * @example Learn more
3715
+ */
3716
+ additional_link_label?: string | null;
3717
+ /**
3718
+ * @description The additional link's destination.
3719
+ * @example https://www.truepic.com/vision/ai-analysis
3720
+ */
3721
+ additional_link_url?: string | null;
3722
+ /**
3723
+ * @description How the audience starts out before exclusions are subtracted.
3724
+ * @example global
3725
+ */
3726
+ audience_scope?: components["schemas"]["AnnouncementAudienceScope"];
3727
+ /**
3728
+ * @description The badge to show alongside the announcement, if any.
3729
+ * @example beta
3730
+ */
3731
+ badge?: components["schemas"]["AnnouncementBadge"] | unknown;
3732
+ /**
3733
+ * @description The body copy. Plain text for feature announcements; a sanitized HTML subset for release notes.
3734
+ * @example Let AI review inspections for you.
3735
+ */
3736
+ description?: string;
3737
+ /**
3738
+ * @description Alternate body copy shown when the announced feature is already enabled for the organization. Null when there is no alternate copy.
3739
+ * @example AI Analysis is on for your organization.
3740
+ */
3741
+ description_when_enabled?: string | null;
3742
+ /**
3743
+ * @description The organizations to subtract from the resolved audience.
3744
+ * @example [
3745
+ * 1843
3746
+ * ]
3747
+ */
3748
+ excluded_organization_ids?: number[];
3749
+ /**
3750
+ * @description The primary call-to-action slot: the feature the blue button acts on. Whether it renders as "Activate feature" or "Request access" comes from the supported-feature-actions config, not from a stored column.
3751
+ * @example ai_analysis_configuration
3752
+ */
3753
+ feature_identifier?: components["schemas"]["OrganizationEnabledFeatureType"] | unknown;
3754
+ /**
3755
+ * @description The URL of the announcement image. Feature announcements only.
3756
+ * @example https://assets.truepic.com/staging/announcements/1756600000000-tpvision-ai-analysis.png
3757
+ */
3758
+ image_url?: string | null;
3759
+ /**
3760
+ * @description The industries to narrow the audience to. Only meaningful when `audience_scope` is `industries`.
3761
+ * @example [
3762
+ * 3,
3763
+ * 7
3764
+ * ]
3765
+ */
3766
+ industry_ids?: number[];
3767
+ /**
3768
+ * @description The name used to identify the announcement internally, unique across all announcements. Never *displayed* to an organization, but it is sent on the organization-facing feed: the dashboard reports it as the announcement's identity to Mixpanel, since two announcements can share a title.
3769
+ * @example AI Analysis
3770
+ */
3771
+ internal_name?: string;
3772
+ /**
3773
+ * @description Whether the announcement is still being authored. A draft is never served to organizations, whatever its publish date, so an author can set a date and keep working. Defaults to true — an announcement goes public only by deliberately clearing this.
3774
+ * @example true
3775
+ */
3776
+ is_draft?: boolean;
3777
+ /**
3778
+ * @description Whether the announcement should also be promoted as a modal. Feature announcements only.
3779
+ * @example false
3780
+ */
3781
+ promote_as_modal?: boolean;
3782
+ /**
3783
+ * @description The date/time from which the announcement is live, once it is no longer a draft. Always set — a future value means it is scheduled.
3784
+ * @example 2026-08-27T00:00:00.000Z
3785
+ */
3786
+ published_at?: string;
3787
+ /**
3788
+ * @description The author-set display text for the settings button.
3789
+ * @example Go to settings
3790
+ */
3791
+ settings_button_label?: string | null;
3792
+ /**
3793
+ * @description The author-set display text for the settings button, used instead of `settings_button_label` when the announced feature is already enabled for the organization. Null means `settings_button_label` is used either way.
3794
+ * @example Manage settings
3795
+ */
3796
+ settings_button_label_enabled?: string | null;
3797
+ /**
3798
+ * @description The secondary call-to-action slot: the dashboard path the outline button navigates to, stored without the organization slug, which is supplied client-side.
3799
+ * @example /account/settings/landing-pages
3800
+ */
3801
+ settings_path?: string | null;
3802
+ /**
3803
+ * @description The headline shown to the organization.
3804
+ * @example Introducing AI Analysis!
3805
+ */
3806
+ title?: string;
3807
+ /**
3808
+ * @description Which kind of announcement this is.
3809
+ * @example feature_announcement
3810
+ */
3811
+ type?: components["schemas"]["AnnouncementType"];
3812
+ /**
3813
+ * @description The date/time the announcement was unpublished. Null while it is a draft, scheduled or published; republishing clears it.
3814
+ * @example 2026-10-01T12:00:00.000Z
3815
+ */
3816
+ unpublished_at?: string | null;
3817
+ };
3818
+ /** @description An announcement with its derived status and audience ids — what the edit form repopulates from. */
3819
+ AnnouncementRecord: {
3820
+ /**
3821
+ * @description The author-set display text for the additional link.
3822
+ * @example Learn more
3823
+ */
3824
+ additional_link_label: string | null;
3825
+ /**
3826
+ * @description The additional link's destination.
3827
+ * @example https://www.truepic.com/vision/ai-analysis
3828
+ */
3829
+ additional_link_url: string | null;
3830
+ /**
3831
+ * @description How the audience starts out before exclusions are subtracted.
3832
+ * @example global
3833
+ */
3834
+ audience_scope: components["schemas"]["AnnouncementAudienceScope"];
3835
+ /**
3836
+ * @description The badge to show alongside the announcement, if any.
3837
+ * @example beta
3838
+ */
3839
+ badge: components["schemas"]["AnnouncementBadge"] | unknown;
3840
+ /**
3841
+ * Format: date-time
3842
+ * @description The date/time the resource was created
3843
+ * @example 2020-05-01T21:44:40.000Z
3844
+ */
3845
+ created_at: string;
3846
+ /**
3847
+ * @description The id of the user who created the announcement.
3848
+ * @example 512
3849
+ */
3850
+ created_by_user_id: number | null;
3851
+ /**
3852
+ * @description The body copy. Plain text for feature announcements; a sanitized HTML subset for release notes.
3853
+ * @example Let AI review inspections for you.
3854
+ */
3855
+ description: string;
3856
+ /**
3857
+ * @description Alternate body copy shown when the announced feature is already enabled for the organization. Null when there is no alternate copy.
3858
+ * @example AI Analysis is on for your organization.
3859
+ */
3860
+ description_when_enabled: string | null;
3861
+ /**
3862
+ * @description The organizations subtracted from the resolved audience.
3863
+ * @example [
3864
+ * 1843
3865
+ * ]
3866
+ */
3867
+ excluded_organization_ids: number[];
3868
+ /**
3869
+ * @description The primary call-to-action slot: the feature the blue button acts on. Whether it renders as "Activate feature" or "Request access" comes from the supported-feature-actions config, not from a stored column.
3870
+ * @example ai_analysis_configuration
3871
+ */
3872
+ feature_identifier: components["schemas"]["OrganizationEnabledFeatureType"] | unknown;
3873
+ /**
3874
+ * @description The id of the resource.
3875
+ * @example 1
3876
+ */
3877
+ id: number;
3878
+ /**
3879
+ * @description The URL of the announcement image. Feature announcements only.
3880
+ * @example https://assets.truepic.com/staging/announcements/1756600000000-tpvision-ai-analysis.png
3881
+ */
3882
+ image_url: string | null;
3883
+ /**
3884
+ * @description The industries the audience is narrowed to. Empty unless `audience_scope` is `industries`.
3885
+ * @example [
3886
+ * 3,
3887
+ * 7
3888
+ * ]
3889
+ */
3890
+ industry_ids: number[];
3891
+ /**
3892
+ * @description The name used to identify the announcement internally, unique across all announcements. Never *displayed* to an organization, but it is sent on the organization-facing feed: the dashboard reports it as the announcement's identity to Mixpanel, since two announcements can share a title.
3893
+ * @example AI Analysis
3894
+ */
3895
+ internal_name: string;
3896
+ /**
3897
+ * @description Whether the announcement is still being authored. A draft is never served to organizations, whatever its publish date, so an author can set a date and keep working. Defaults to true — an announcement goes public only by deliberately clearing this.
3898
+ * @example true
3899
+ */
3900
+ is_draft: boolean;
3901
+ /**
3902
+ * @description The localStorage key that recorded "already seen" for this announcement before announcements moved into the API. Set only on the announcements migrated at cutover, so migrated content is not re-shown to users who had already dismissed it.
3903
+ * @example vision-ui-discover-features-promoted-last-viewed
3904
+ */
3905
+ legacy_seen_state_key: string | null;
3906
+ /**
3907
+ * @description Whether the announcement should also be promoted as a modal. Feature announcements only.
3908
+ * @example false
3909
+ */
3910
+ promote_as_modal: boolean;
3911
+ /**
3912
+ * @description The date/time from which the announcement is live, once it is no longer a draft. Always set — a future value means it is scheduled.
3913
+ * @example 2026-08-27T00:00:00.000Z
3914
+ */
3915
+ published_at: string;
3916
+ /**
3917
+ * @description The author-set display text for the settings button.
3918
+ * @example Go to settings
3919
+ */
3920
+ settings_button_label: string | null;
3921
+ /**
3922
+ * @description The author-set display text for the settings button, used instead of `settings_button_label` when the announced feature is already enabled for the organization. Null means `settings_button_label` is used either way.
3923
+ * @example Manage settings
3924
+ */
3925
+ settings_button_label_enabled: string | null;
3926
+ /**
3927
+ * @description The secondary call-to-action slot: the dashboard path the outline button navigates to, stored without the organization slug, which is supplied client-side.
3928
+ * @example /account/settings/landing-pages
3929
+ */
3930
+ settings_path: string | null;
3931
+ /**
3932
+ * @description The lifecycle status, derived rather than stored.
3933
+ * @example scheduled
3934
+ */
3935
+ status: components["schemas"]["AnnouncementStatus"];
3936
+ /**
3937
+ * @description The headline shown to the organization.
3938
+ * @example Introducing AI Analysis!
3939
+ */
3940
+ title: string;
3941
+ /**
3942
+ * @description Which kind of announcement this is.
3943
+ * @example feature_announcement
3944
+ */
3945
+ type: components["schemas"]["AnnouncementType"];
3946
+ /**
3947
+ * @description The date/time the announcement was unpublished. Null while it is a draft, scheduled or published; republishing clears it.
3948
+ * @example 2026-10-01T12:00:00.000Z
3949
+ */
3950
+ unpublished_at: string | null;
3951
+ /**
3952
+ * @description Who took the announcement down, resolved from `unpublished_by_user_id`. Null on anything that is still up, and on a takedown whose user row has been hard-deleted.
3953
+ * @example Nick Brown
3954
+ */
3955
+ unpublished_by: string | null;
3956
+ /**
3957
+ * @description The id of the user who unpublished the announcement. Written with `unpublished_at` and cleared with it on republish, so it is never set on an announcement that is still up — but it can be null on one that is down, since deleting the user row clears it (`ON DELETE SET NULL`). Read `unpublished_at` for whether a takedown happened.
3958
+ * @example 512
3959
+ */
3960
+ unpublished_by_user_id: number | null;
3961
+ /**
3962
+ * Format: date-time
3963
+ * @description The date/time the resource was last updated
3964
+ * @example 2020-05-01T21:44:40.000Z
3965
+ */
3966
+ updated_at: string;
3967
+ /**
3968
+ * @description The id of the user who last updated the announcement.
3969
+ * @example 512
3970
+ */
3971
+ updated_by_user_id: number | null;
3972
+ };
3973
+ /** @description The audience facts a Manage row carries. The row type owns the field docs; the resolver that produces them and the serializer that writes them both take this rather than re-declaring the four. */
3974
+ AnnouncementRowAudience: {
3975
+ /**
3976
+ * @description A one-line description of who the announcement targets.
3977
+ * @example All organizations, excluding 3 organizations
3978
+ */
3979
+ audience_summary: string;
3980
+ /**
3981
+ * @description How many organizations the exclusions actually take out of the reach — only those the scope had reached in the first place, so this and `organization_count` cannot contradict each other. Excluding a soft-deleted organization, or one outside the targeted industries, does not count.
3982
+ * @example 2
3983
+ */
3984
+ excluded_organization_count: number;
3985
+ /**
3986
+ * @description The industries the audience is narrowed to, by name. Empty when `audience_scope` is `global`.
3987
+ * @example [
3988
+ * "Auto Warranty",
3989
+ * "Equipment Financing"
3990
+ * ]
3991
+ */
3992
+ industry_names: string[];
3993
+ /**
3994
+ * @description How many active organizations the targeting resolves to right now — a live count rather than a snapshot taken at publish time, and the same membership test the organization-facing endpoint applies.
3995
+ * @example 270
3996
+ */
3997
+ organization_count: number;
3998
+ };
3999
+ /** @enum {string} */
4000
+ AnnouncementStatus: "draft" | "scheduled" | "published" | "unpublished";
4001
+ /** @enum {string} */
4002
+ AnnouncementType: "feature_announcement" | "release_note";
3407
4003
  /** @description One entry per model call in audit_json arrays on result tables. */
3408
4004
  AuditEntry: {
3409
4005
  /** @description ISO 8601 timestamp when this model call completed. */
@@ -3851,6 +4447,11 @@ export interface components {
3851
4447
  * @description The date the API credentials and bot were created.
3852
4448
  */
3853
4449
  created_at: string;
4450
+ /**
4451
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
4452
+ * @example announcement_internal_name_taken
4453
+ */
4454
+ error_code?: string;
3854
4455
  /**
3855
4456
  * @description The human readable-status of the response
3856
4457
  * @example Success
@@ -4015,6 +4616,11 @@ export interface components {
4015
4616
  * @example 3.0.0
4016
4617
  */
4017
4618
  api_version: string;
4619
+ /**
4620
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
4621
+ * @example announcement_internal_name_taken
4622
+ */
4623
+ error_code?: string;
4018
4624
  /**
4019
4625
  * @description The human readable-status of the response
4020
4626
  * @example Success
@@ -4029,6 +4635,11 @@ export interface components {
4029
4635
  };
4030
4636
  /** @description Request Body for POST /inspection-types */
4031
4637
  CreateInspectionTypeBody: {
4638
+ /**
4639
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
4640
+ * @example test
4641
+ */
4642
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
4032
4643
  /**
4033
4644
  * @description the id of the user who created this inspection type. References `users.id`
4034
4645
  * @example 2343
@@ -4302,6 +4913,11 @@ export interface components {
4302
4913
  * @example 3.0.0
4303
4914
  */
4304
4915
  api_version: string;
4916
+ /**
4917
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
4918
+ * @example announcement_internal_name_taken
4919
+ */
4920
+ error_code?: string;
4305
4921
  /**
4306
4922
  * @description The human readable-status of the response
4307
4923
  * @example Success
@@ -4339,6 +4955,11 @@ export interface components {
4339
4955
  * @example 3.0.0
4340
4956
  */
4341
4957
  api_version: string;
4958
+ /**
4959
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
4960
+ * @example announcement_internal_name_taken
4961
+ */
4962
+ error_code?: string;
4342
4963
  /**
4343
4964
  * @description The human readable-status of the response
4344
4965
  * @example Success
@@ -4550,6 +5171,8 @@ export interface components {
4550
5171
  */
4551
5172
  tz: string;
4552
5173
  };
5174
+ /** @enum {string} */
5175
+ FeatureAction: "self_enable" | "request_access";
4553
5176
  /** @description An entry in a field result's `audit_json` array: either a per-model-call record or a suppressed-rerun verdict (VISION-2126). */
4554
5177
  FieldResultAuditEntry: components["schemas"]["AuditEntry"] | components["schemas"]["SuppressedExtractionAuditEntry"];
4555
5178
  /**
@@ -4568,6 +5191,132 @@ export interface components {
4568
5191
  };
4569
5192
  /** @description The response body for GET /auth/auth0 */
4570
5193
  GetAPICredentialsResult: components["schemas"]["CreateAPICredentialsResult"];
5194
+ /** @description The response body for GET /announcements/manage/audience-options */
5195
+ GetAnnouncementAudienceOptionsResult: {
5196
+ /**
5197
+ * @description The current version number of the Vision API
5198
+ * @example 3.0.0
5199
+ */
5200
+ api_version: string;
5201
+ /**
5202
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5203
+ * @example announcement_internal_name_taken
5204
+ */
5205
+ error_code?: string;
5206
+ /**
5207
+ * @description The human readable-status of the response
5208
+ * @example Success
5209
+ */
5210
+ message: string;
5211
+ /**
5212
+ * @description The HTTP status code of the response
5213
+ * @example 200
5214
+ */
5215
+ response_code: number;
5216
+ result: {
5217
+ /** @description Every industry an audience can be narrowed to, by name. */
5218
+ industries: {
5219
+ id: number;
5220
+ name: string;
5221
+ }[];
5222
+ /** @description Every active organization, so the authoring form can offer them as exclusions. Id and name only — the picker needs nothing else. */
5223
+ organizations: components["schemas"]["AnnouncementAudienceOrganization"][];
5224
+ /**
5225
+ * @description How many active organizations there are in total, which is what a global audience reaches and the denominator the authoring form shows a narrowed audience against.
5226
+ * @example 272
5227
+ */
5228
+ total_organization_count: number;
5229
+ };
5230
+ };
5231
+ /** @description The response body for GET /announcements/manage/{announcementID}/audience-preview */
5232
+ GetAnnouncementAudiencePreviewResult: {
5233
+ /**
5234
+ * @description The current version number of the Vision API
5235
+ * @example 3.0.0
5236
+ */
5237
+ api_version: string;
5238
+ /**
5239
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5240
+ * @example announcement_internal_name_taken
5241
+ */
5242
+ error_code?: string;
5243
+ /**
5244
+ * @description The human readable-status of the response
5245
+ * @example Success
5246
+ */
5247
+ message: string;
5248
+ /**
5249
+ * @description The HTTP status code of the response
5250
+ * @example 200
5251
+ */
5252
+ response_code: number;
5253
+ result: components["schemas"]["AnnouncementAudiencePreview"];
5254
+ };
5255
+ /** @description The response body for GET /announcements/manage/{announcementID} */
5256
+ GetAnnouncementResult: {
5257
+ /**
5258
+ * @description The current version number of the Vision API
5259
+ * @example 3.0.0
5260
+ */
5261
+ api_version: string;
5262
+ /**
5263
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5264
+ * @example announcement_internal_name_taken
5265
+ */
5266
+ error_code?: string;
5267
+ /**
5268
+ * @description The human readable-status of the response
5269
+ * @example Success
5270
+ */
5271
+ message: string;
5272
+ /**
5273
+ * @description The HTTP status code of the response
5274
+ * @example 200
5275
+ */
5276
+ response_code: number;
5277
+ /** @description The full announcement, including its audience and derived status */
5278
+ result: components["schemas"]["AnnouncementRecord"];
5279
+ };
5280
+ /** @description The response body for GET /announcements/manage */
5281
+ GetAnnouncementsResult: {
5282
+ /**
5283
+ * @description The current version number of the Vision API
5284
+ * @example 3.0.0
5285
+ */
5286
+ api_version: string;
5287
+ /**
5288
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5289
+ * @example announcement_internal_name_taken
5290
+ */
5291
+ error_code?: string;
5292
+ /**
5293
+ * @description The human readable-status of the response
5294
+ * @example Success
5295
+ */
5296
+ message: string;
5297
+ /**
5298
+ * @description The total number of pages for the given query
5299
+ * @example 12
5300
+ */
5301
+ pageCount: number;
5302
+ /**
5303
+ * @description The HTTP status code of the response
5304
+ * @example 200
5305
+ */
5306
+ response_code: number;
5307
+ /** @description A paginated list of announcements for the Manage table */
5308
+ result: components["schemas"]["AnnouncementManageRow"][];
5309
+ /**
5310
+ * @description The total number of results for the given page
5311
+ * @example 25
5312
+ */
5313
+ total: number;
5314
+ /**
5315
+ * @description The total number of results for the given query
5316
+ * @example 251
5317
+ */
5318
+ totalResults: number;
5319
+ };
4571
5320
  /** @description Response Body for GET /inspections/bearer */
4572
5321
  GetBearerInspectionResult: {
4573
5322
  /**
@@ -4575,6 +5324,11 @@ export interface components {
4575
5324
  * @example 3.0.0
4576
5325
  */
4577
5326
  api_version: string;
5327
+ /**
5328
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5329
+ * @example announcement_internal_name_taken
5330
+ */
5331
+ error_code?: string;
4578
5332
  /**
4579
5333
  * @description The human readable-status of the response
4580
5334
  * @example Success
@@ -4585,7 +5339,6 @@ export interface components {
4585
5339
  * @example 200
4586
5340
  */
4587
5341
  response_code: number;
4588
- /** @description The Inspection schema with all properties optional */
4589
5342
  result: {
4590
5343
  /**
4591
5344
  * Format: address
@@ -4740,6 +5493,14 @@ export interface components {
4740
5493
  * @example 4
4741
5494
  */
4742
5495
  inspection_status_id?: components["schemas"]["InspectionStatusId"];
5496
+ inspection_type: {
5497
+ custom_fields: {
5498
+ /** @description The label for the custom field */
5499
+ label?: string;
5500
+ }[];
5501
+ /** @description Present when the web app should use verification terminology. */
5502
+ use_verification_terminology?: boolean;
5503
+ };
4743
5504
  /**
4744
5505
  * @description The id of the inspection type this inspection is for.
4745
5506
  * @example 12
@@ -4886,6 +5647,11 @@ export interface components {
4886
5647
  * @example 3.0.0
4887
5648
  */
4888
5649
  api_version: string;
5650
+ /**
5651
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5652
+ * @example announcement_internal_name_taken
5653
+ */
5654
+ error_code?: string;
4889
5655
  /**
4890
5656
  * @description The human readable-status of the response
4891
5657
  * @example Success
@@ -4905,6 +5671,11 @@ export interface components {
4905
5671
  * @example 3.0.0
4906
5672
  */
4907
5673
  api_version: string;
5674
+ /**
5675
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5676
+ * @example announcement_internal_name_taken
5677
+ */
5678
+ error_code?: string;
4908
5679
  /**
4909
5680
  * @description The human readable-status of the response
4910
5681
  * @example Success
@@ -4940,6 +5711,11 @@ export interface components {
4940
5711
  * @example 3.0.0
4941
5712
  */
4942
5713
  api_version: string;
5714
+ /**
5715
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5716
+ * @example announcement_internal_name_taken
5717
+ */
5718
+ error_code?: string;
4943
5719
  /**
4944
5720
  * @description The human readable-status of the response
4945
5721
  * @example Success
@@ -4959,6 +5735,11 @@ export interface components {
4959
5735
  * @example 3.0.0
4960
5736
  */
4961
5737
  api_version: string;
5738
+ /**
5739
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5740
+ * @example announcement_internal_name_taken
5741
+ */
5742
+ error_code?: string;
4962
5743
  /**
4963
5744
  * @description The human readable-status of the response
4964
5745
  * @example Success
@@ -4970,6 +5751,11 @@ export interface components {
4970
5751
  */
4971
5752
  response_code: number;
4972
5753
  result: {
5754
+ /**
5755
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
5756
+ * @example test
5757
+ */
5758
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
4973
5759
  /**
4974
5760
  * Format: date-time
4975
5761
  * @description The date/time the resource was created
@@ -5168,6 +5954,11 @@ export interface components {
5168
5954
  * @example 3.0.0
5169
5955
  */
5170
5956
  api_version: string;
5957
+ /**
5958
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5959
+ * @example announcement_internal_name_taken
5960
+ */
5961
+ error_code?: string;
5171
5962
  /**
5172
5963
  * @description The human readable-status of the response
5173
5964
  * @example Success
@@ -5202,6 +5993,11 @@ export interface components {
5202
5993
  * @example 3.0.0
5203
5994
  */
5204
5995
  api_version: string;
5996
+ /**
5997
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
5998
+ * @example announcement_internal_name_taken
5999
+ */
6000
+ error_code?: string;
5205
6001
  /**
5206
6002
  * @description The human readable-status of the response
5207
6003
  * @example Success
@@ -5236,6 +6032,11 @@ export interface components {
5236
6032
  * @example 3.0.0
5237
6033
  */
5238
6034
  api_version: string;
6035
+ /**
6036
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6037
+ * @example announcement_internal_name_taken
6038
+ */
6039
+ error_code?: string;
5239
6040
  /**
5240
6041
  * @description The human readable-status of the response
5241
6042
  * @example Success
@@ -5254,6 +6055,11 @@ export interface components {
5254
6055
  * @example 3.0.0
5255
6056
  */
5256
6057
  api_version: string;
6058
+ /**
6059
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6060
+ * @example announcement_internal_name_taken
6061
+ */
6062
+ error_code?: string;
5257
6063
  /**
5258
6064
  * @description The human readable-status of the response
5259
6065
  * @example Success
@@ -5272,6 +6078,11 @@ export interface components {
5272
6078
  * @example 3.0.0
5273
6079
  */
5274
6080
  api_version: string;
6081
+ /**
6082
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6083
+ * @example announcement_internal_name_taken
6084
+ */
6085
+ error_code?: string;
5275
6086
  /**
5276
6087
  * @description The human readable-status of the response
5277
6088
  * @example Success
@@ -5306,6 +6117,11 @@ export interface components {
5306
6117
  * @example 3.0.0
5307
6118
  */
5308
6119
  api_version: string;
6120
+ /**
6121
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6122
+ * @example announcement_internal_name_taken
6123
+ */
6124
+ error_code?: string;
5309
6125
  /**
5310
6126
  * @description The human readable-status of the response
5311
6127
  * @example Success
@@ -5391,6 +6207,11 @@ export interface components {
5391
6207
  * @example 3.0.0
5392
6208
  */
5393
6209
  api_version: string;
6210
+ /**
6211
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6212
+ * @example announcement_internal_name_taken
6213
+ */
6214
+ error_code?: string;
5394
6215
  /**
5395
6216
  * @description The human readable-status of the response
5396
6217
  * @example Success
@@ -5645,6 +6466,11 @@ export interface components {
5645
6466
  * @example 3.0.0
5646
6467
  */
5647
6468
  api_version: string;
6469
+ /**
6470
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6471
+ * @example announcement_internal_name_taken
6472
+ */
6473
+ error_code?: string;
5648
6474
  /**
5649
6475
  * @description The human readable-status of the response
5650
6476
  * @example Success
@@ -5664,6 +6490,11 @@ export interface components {
5664
6490
  * @example 3.0.0
5665
6491
  */
5666
6492
  api_version: string;
6493
+ /**
6494
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6495
+ * @example announcement_internal_name_taken
6496
+ */
6497
+ error_code?: string;
5667
6498
  /**
5668
6499
  * @description The human readable-status of the response
5669
6500
  * @example Success
@@ -5686,18 +6517,47 @@ export interface components {
5686
6517
  */
5687
6518
  total: number;
5688
6519
  /**
5689
- * @description The total number of results for the given query
5690
- * @example 251
6520
+ * @description The total number of results for the given query
6521
+ * @example 251
6522
+ */
6523
+ totalResults: number;
6524
+ };
6525
+ /** @description The response body for GET /operations/{operationId} */
6526
+ GetOperationResult: {
6527
+ /**
6528
+ * @description The current version number of the Vision API
6529
+ * @example 3.0.0
6530
+ */
6531
+ api_version: string;
6532
+ /**
6533
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6534
+ * @example announcement_internal_name_taken
6535
+ */
6536
+ error_code?: string;
6537
+ /**
6538
+ * @description The human readable-status of the response
6539
+ * @example Success
6540
+ */
6541
+ message: string;
6542
+ /**
6543
+ * @description The HTTP status code of the response
6544
+ * @example 200
5691
6545
  */
5692
- totalResults: number;
6546
+ response_code: number;
6547
+ result: components["schemas"]["Operation"];
5693
6548
  };
5694
- /** @description The response body for GET /operations/{operationId} */
5695
- GetOperationResult: {
6549
+ /** @description The response body for GET /announcements */
6550
+ GetOrganizationAnnouncementsResult: {
5696
6551
  /**
5697
6552
  * @description The current version number of the Vision API
5698
6553
  * @example 3.0.0
5699
6554
  */
5700
6555
  api_version: string;
6556
+ /**
6557
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6558
+ * @example announcement_internal_name_taken
6559
+ */
6560
+ error_code?: string;
5701
6561
  /**
5702
6562
  * @description The human readable-status of the response
5703
6563
  * @example Success
@@ -5708,7 +6568,16 @@ export interface components {
5708
6568
  * @example 200
5709
6569
  */
5710
6570
  response_code: number;
5711
- result: components["schemas"]["Operation"];
6571
+ result: {
6572
+ /** @description Every Discover Features card the organization is eligible for, newest publish date first. Not paginated — the page renders all of them. */
6573
+ feature_announcements: components["schemas"]["OrganizationAnnouncement"][];
6574
+ /** @description The feature announcements promoted as a modal — a subset of `feature_announcements`, in the same order. */
6575
+ promoted: components["schemas"]["OrganizationAnnouncement"][];
6576
+ /** @description One page of release notes, newest publish date first. */
6577
+ release_notes: components["schemas"]["OrganizationAnnouncement"][];
6578
+ /** @description Where `release_notes` sits in the whole set, for a "load more" control. */
6579
+ release_notes_pagination: components["schemas"]["ReleaseNotesPagination"];
6580
+ };
5712
6581
  };
5713
6582
  /** @description The response body for GET /inspections/bearer/support */
5714
6583
  GetSupportByBearerResult: {
@@ -5717,6 +6586,11 @@ export interface components {
5717
6586
  * @example 3.0.0
5718
6587
  */
5719
6588
  api_version: string;
6589
+ /**
6590
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6591
+ * @example announcement_internal_name_taken
6592
+ */
6593
+ error_code?: string;
5720
6594
  /**
5721
6595
  * @description The human readable-status of the response
5722
6596
  * @example Success
@@ -5736,6 +6610,59 @@ export interface components {
5736
6610
  user_jwt: string;
5737
6611
  };
5738
6612
  };
6613
+ /**
6614
+ * @description The response body for GET /supported-feature-actions.
6615
+ *
6616
+ * Structural rather than an alias of the service's `SupportedFeatureActions`: the schema generator reads this directory only, and a type imported from `src/services` would pull a runtime module into that pass. The two are kept in step by the enums they are both built from.
6617
+ */
6618
+ GetSupportedFeatureActionsResult: {
6619
+ /**
6620
+ * @description The current version number of the Vision API
6621
+ * @example 3.0.0
6622
+ */
6623
+ api_version: string;
6624
+ /**
6625
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6626
+ * @example announcement_internal_name_taken
6627
+ */
6628
+ error_code?: string;
6629
+ /**
6630
+ * @description The human readable-status of the response
6631
+ * @example Success
6632
+ */
6633
+ message: string;
6634
+ /**
6635
+ * @description The HTTP status code of the response
6636
+ * @example 200
6637
+ */
6638
+ response_code: number;
6639
+ /** @description A feature identifier → the action an organization may take on it. A feature absent from the map supports neither, and only a super admin can toggle it. */
6640
+ result: {
6641
+ ai_analysis?: components["schemas"]["FeatureAction"];
6642
+ ai_analysis_configuration?: components["schemas"]["FeatureAction"];
6643
+ ask_for_app_review?: components["schemas"]["FeatureAction"];
6644
+ content_analysis_dot_tin?: components["schemas"]["FeatureAction"];
6645
+ content_analysis_odometer?: components["schemas"]["FeatureAction"];
6646
+ content_analysis_text_matching?: components["schemas"]["FeatureAction"];
6647
+ content_analysis_vin?: components["schemas"]["FeatureAction"];
6648
+ dashboard_user_feedback_forms?: components["schemas"]["FeatureAction"];
6649
+ device_details?: components["schemas"]["FeatureAction"];
6650
+ disable_selfie_capture?: components["schemas"]["FeatureAction"];
6651
+ enable_processing_status_for_inspections?: components["schemas"]["FeatureAction"];
6652
+ external_risk_network?: components["schemas"]["FeatureAction"];
6653
+ guided_capture?: components["schemas"]["FeatureAction"];
6654
+ inspection_device_insights?: components["schemas"]["FeatureAction"];
6655
+ landing_pages?: components["schemas"]["FeatureAction"];
6656
+ member_homepage?: components["schemas"]["FeatureAction"];
6657
+ object_detection_auto?: components["schemas"]["FeatureAction"];
6658
+ object_detection_jewelry?: components["schemas"]["FeatureAction"];
6659
+ object_detection_real_estate?: components["schemas"]["FeatureAction"];
6660
+ restrict_members_to_inspection_details?: components["schemas"]["FeatureAction"];
6661
+ reuse_detection?: components["schemas"]["FeatureAction"];
6662
+ risk_network?: components["schemas"]["FeatureAction"];
6663
+ verisk_sso?: components["schemas"]["FeatureAction"];
6664
+ };
6665
+ };
5739
6666
  /** @description The response body for the GET /teams/{teamId} endpoint */
5740
6667
  GetTeamResult: {
5741
6668
  /**
@@ -5743,6 +6670,11 @@ export interface components {
5743
6670
  * @example 3.0.0
5744
6671
  */
5745
6672
  api_version: string;
6673
+ /**
6674
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
6675
+ * @example announcement_internal_name_taken
6676
+ */
6677
+ error_code?: string;
5746
6678
  /**
5747
6679
  * @description The human readable-status of the response
5748
6680
  * @example Success
@@ -5871,6 +6803,11 @@ export interface components {
5871
6803
  */
5872
6804
  include_list: boolean;
5873
6805
  inspection_types: {
6806
+ /**
6807
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
6808
+ * @example test
6809
+ */
6810
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
5874
6811
  /**
5875
6812
  * Format: date-time
5876
6813
  * @description The date/time the resource was created
@@ -6036,10 +6973,10 @@ export interface components {
6036
6973
  */
6037
6974
  name: string;
6038
6975
  /**
6039
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
6976
+ * @description the id of the organization that this inspection type belongs to. References `organizations.id`. Null for legacy inspection types that were created without an owner.
6040
6977
  * @example 14
6041
6978
  */
6042
- organization_id: number;
6979
+ organization_id: number | null;
6043
6980
  /** @description The outcome set that is used by this inspection type. */
6044
6981
  outcome_set?: components["schemas"]["OutcomeSet"];
6045
6982
  /**
@@ -6264,6 +7201,11 @@ export interface components {
6264
7201
  * @example 3.0.0
6265
7202
  */
6266
7203
  api_version: string;
7204
+ /**
7205
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7206
+ * @example announcement_internal_name_taken
7207
+ */
7208
+ error_code?: string;
6267
7209
  /**
6268
7210
  * @description The human readable-status of the response
6269
7211
  * @example Success
@@ -6282,6 +7224,11 @@ export interface components {
6282
7224
  * @example 3.0.0
6283
7225
  */
6284
7226
  api_version: string;
7227
+ /**
7228
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7229
+ * @example announcement_internal_name_taken
7230
+ */
7231
+ error_code?: string;
6285
7232
  /**
6286
7233
  * @description The human readable-status of the response
6287
7234
  * @example Success
@@ -6316,6 +7263,11 @@ export interface components {
6316
7263
  * @example 3.0.0
6317
7264
  */
6318
7265
  api_version: string;
7266
+ /**
7267
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7268
+ * @example announcement_internal_name_taken
7269
+ */
7270
+ error_code?: string;
6319
7271
  /**
6320
7272
  * @description The human readable-status of the response
6321
7273
  * @example Success
@@ -6350,6 +7302,11 @@ export interface components {
6350
7302
  * @example 3.0.0
6351
7303
  */
6352
7304
  api_version: string;
7305
+ /**
7306
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7307
+ * @example announcement_internal_name_taken
7308
+ */
7309
+ error_code?: string;
6353
7310
  /**
6354
7311
  * @description The human readable-status of the response
6355
7312
  * @example Success
@@ -6368,6 +7325,11 @@ export interface components {
6368
7325
  * @example 3.0.0
6369
7326
  */
6370
7327
  api_version: string;
7328
+ /**
7329
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7330
+ * @example announcement_internal_name_taken
7331
+ */
7332
+ error_code?: string;
6371
7333
  /**
6372
7334
  * @description The human readable-status of the response
6373
7335
  * @example Success
@@ -6402,6 +7364,11 @@ export interface components {
6402
7364
  * @example 3.0.0
6403
7365
  */
6404
7366
  api_version: string;
7367
+ /**
7368
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7369
+ * @example announcement_internal_name_taken
7370
+ */
7371
+ error_code?: string;
6405
7372
  /**
6406
7373
  * @description The human readable-status of the response
6407
7374
  * @example Success
@@ -6437,6 +7404,11 @@ export interface components {
6437
7404
  * @example 3.0.0
6438
7405
  */
6439
7406
  api_version: string;
7407
+ /**
7408
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7409
+ * @example announcement_internal_name_taken
7410
+ */
7411
+ error_code?: string;
6440
7412
  /**
6441
7413
  * @description The human readable-status of the response
6442
7414
  * @example Success
@@ -6472,6 +7444,11 @@ export interface components {
6472
7444
  * @example 3.0.0
6473
7445
  */
6474
7446
  api_version: string;
7447
+ /**
7448
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7449
+ * @example announcement_internal_name_taken
7450
+ */
7451
+ error_code?: string;
6475
7452
  /**
6476
7453
  * @description The human readable-status of the response
6477
7454
  * @example Success
@@ -6491,6 +7468,11 @@ export interface components {
6491
7468
  * @example 3.0.0
6492
7469
  */
6493
7470
  api_version: string;
7471
+ /**
7472
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7473
+ * @example announcement_internal_name_taken
7474
+ */
7475
+ error_code?: string;
6494
7476
  /**
6495
7477
  * @description The human readable-status of the response
6496
7478
  * @example Success
@@ -6513,6 +7495,11 @@ export interface components {
6513
7495
  * @example 3.0.0
6514
7496
  */
6515
7497
  api_version: string;
7498
+ /**
7499
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7500
+ * @example announcement_internal_name_taken
7501
+ */
7502
+ error_code?: string;
6516
7503
  /**
6517
7504
  * @description The human readable-status of the response
6518
7505
  * @example Success
@@ -6547,6 +7534,11 @@ export interface components {
6547
7534
  * @example 3.0.0
6548
7535
  */
6549
7536
  api_version: string;
7537
+ /**
7538
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7539
+ * @example announcement_internal_name_taken
7540
+ */
7541
+ error_code?: string;
6550
7542
  /**
6551
7543
  * @description The human readable-status of the response
6552
7544
  * @example Success
@@ -6565,6 +7557,11 @@ export interface components {
6565
7557
  * @example 3.0.0
6566
7558
  */
6567
7559
  api_version: string;
7560
+ /**
7561
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7562
+ * @example announcement_internal_name_taken
7563
+ */
7564
+ error_code?: string;
6568
7565
  /**
6569
7566
  * @description The human readable-status of the response
6570
7567
  * @example Success
@@ -6583,6 +7580,11 @@ export interface components {
6583
7580
  * @example 3.0.0
6584
7581
  */
6585
7582
  api_version: string;
7583
+ /**
7584
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
7585
+ * @example announcement_internal_name_taken
7586
+ */
7587
+ error_code?: string;
6586
7588
  /**
6587
7589
  * @description The human readable-status of the response
6588
7590
  * @example Success
@@ -7394,6 +8396,12 @@ export interface components {
7394
8396
  * @example P
7395
8397
  */
7396
8398
  blockchain_status: components["schemas"]["TestResult"];
8399
+ /**
8400
+ * @description Which camera took the photo/video: `front` (the selfie camera) or `back`.
8401
+ * @example back
8402
+ * @enum {string}
8403
+ */
8404
+ camera_facing?: "front" | "back";
7397
8405
  /**
7398
8406
  * @description The status of a capture integrity test on this Truepic.
7399
8407
  * @example P
@@ -7749,6 +8757,11 @@ export interface components {
7749
8757
  };
7750
8758
  /** @description The core resource representing an inspection request */
7751
8759
  InspectionType: {
8760
+ /**
8761
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
8762
+ * @example test
8763
+ */
8764
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
7752
8765
  /**
7753
8766
  * Format: date-time
7754
8767
  * @description The date/time the resource was created
@@ -7821,10 +8834,10 @@ export interface components {
7821
8834
  */
7822
8835
  name: string;
7823
8836
  /**
7824
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
8837
+ * @description the id of the organization that this inspection type belongs to. References `organizations.id`. Null for legacy inspection types that were created without an owner.
7825
8838
  * @example 14
7826
8839
  */
7827
- organization_id: number;
8840
+ organization_id: number | null;
7828
8841
  /**
7829
8842
  * @description The id of the outcome set that is used by this inspection type. References `outcome_sets.id`
7830
8843
  * @example 539
@@ -7854,6 +8867,11 @@ export interface components {
7854
8867
  use_single_name_field: boolean;
7855
8868
  };
7856
8869
  InspectionTypeData: {
8870
+ /**
8871
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
8872
+ * @example test
8873
+ */
8874
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
7857
8875
  /**
7858
8876
  * Format: date-time
7859
8877
  * @description The date/time the resource was created
@@ -8838,6 +9856,112 @@ export interface components {
8838
9856
  */
8839
9857
  updated_at: string;
8840
9858
  };
9859
+ /** @description One announcement as an organization sees it. Every question that depends on the organization — which body copy applies, which settings-button label applies, what the primary CTA does — is already answered; the alternates are not sent. */
9860
+ OrganizationAnnouncement: {
9861
+ /**
9862
+ * @description The author-set display text for the additional link.
9863
+ * @example Learn more
9864
+ */
9865
+ additional_link_label: string | null;
9866
+ /**
9867
+ * @description The additional link's destination.
9868
+ * @example https://www.truepic.com/vision/ai-analysis
9869
+ */
9870
+ additional_link_url: string | null;
9871
+ /**
9872
+ * @description The badge to show alongside the announcement, if any.
9873
+ * @example beta
9874
+ */
9875
+ badge: components["schemas"]["AnnouncementBadge"] | unknown;
9876
+ /**
9877
+ * @description The body copy that applies to this organization — the alternate copy when the announced feature is already enabled for it and that copy is set, otherwise the default. Sanitized HTML for a release note; plain text for a feature announcement.
9878
+ * @example Let AI review inspections for you.
9879
+ */
9880
+ description: string;
9881
+ /**
9882
+ * @description The id of the resource.
9883
+ * @example 1
9884
+ */
9885
+ id: number;
9886
+ /**
9887
+ * @description The URL of the announcement image. Feature announcements only.
9888
+ * @example https://assets.truepic.com/staging/announcements/1756600000000-tpvision-ai-analysis.png
9889
+ */
9890
+ image_url: string | null;
9891
+ /**
9892
+ * @description The name used to identify the announcement internally, unique across all announcements. Never *displayed* to an organization, but it is sent on the organization-facing feed: the dashboard reports it as the announcement's identity to Mixpanel, since two announcements can share a title.
9893
+ * @example AI Analysis
9894
+ */
9895
+ internal_name: string;
9896
+ /**
9897
+ * @description The localStorage key that recorded "already seen" for this announcement before announcements moved into the API. Set only on the announcements migrated at cutover, so migrated content is not re-shown to users who had already dismissed it.
9898
+ * @example vision-ui-discover-features-promoted-last-viewed
9899
+ */
9900
+ legacy_seen_state_key: string | null;
9901
+ /** @description The primary call-to-action, or null when the announcement has no feature to act on. */
9902
+ primary_cta: components["schemas"]["OrganizationAnnouncementPrimaryCta"] | unknown;
9903
+ /**
9904
+ * @description The date/time from which the announcement is live, once it is no longer a draft. Always set — a future value means it is scheduled.
9905
+ * @example 2026-08-27T00:00:00.000Z
9906
+ */
9907
+ published_at: string;
9908
+ /**
9909
+ * @description The settings-button text that applies to this organization, resolved the same way. Null when there is no settings button.
9910
+ * @example Configure in settings
9911
+ */
9912
+ settings_button_label: string | null;
9913
+ /**
9914
+ * @description The secondary call-to-action slot: the dashboard path the outline button navigates to, stored without the organization slug, which is supplied client-side.
9915
+ * @example /account/settings/landing-pages
9916
+ */
9917
+ settings_path: string | null;
9918
+ /**
9919
+ * @description The headline shown to the organization.
9920
+ * @example Introducing AI Analysis!
9921
+ */
9922
+ title: string;
9923
+ /**
9924
+ * @description Which kind of announcement this is.
9925
+ * @example feature_announcement
9926
+ */
9927
+ type: components["schemas"]["AnnouncementType"];
9928
+ };
9929
+ /** @description The primary call-to-action, resolved for the calling organization. */
9930
+ OrganizationAnnouncementPrimaryCta: {
9931
+ /**
9932
+ * @description What the organization may do with it, from the `SUPPORTED_FEATURE_ACTIONS` config. Null means the config lists no action, so only a super admin can turn the feature on.
9933
+ * @example self_enable
9934
+ */
9935
+ action: components["schemas"]["FeatureAction"] | unknown;
9936
+ /**
9937
+ * @description Whether the feature is already enabled for the organization.
9938
+ * @example false
9939
+ */
9940
+ feature_enabled: boolean;
9941
+ /**
9942
+ * @description The feature the button acts on.
9943
+ * @example external_risk_network
9944
+ */
9945
+ feature_identifier: components["schemas"]["OrganizationEnabledFeatureType"];
9946
+ /**
9947
+ * @description When the organization requested access to the feature, if it has.
9948
+ * @example 2026-08-28T09:15:00.000Z
9949
+ */
9950
+ feature_requested_access_at: string | null;
9951
+ /**
9952
+ * @description Whether the organization has ever self-enabled the feature.
9953
+ * @example false
9954
+ */
9955
+ feature_self_enabled: boolean;
9956
+ /**
9957
+ * @description The features that have to be enabled alongside it, outermost first, from the feature hierarchy. Send these with the feature when acting on it.
9958
+ * @example [
9959
+ * "device_details",
9960
+ * "risk_network"
9961
+ * ]
9962
+ */
9963
+ required_features: components["schemas"]["OrganizationEnabledFeatureType"][];
9964
+ };
8841
9965
  /** @description A feature that an organization may have enabled. */
8842
9966
  OrganizationEnabledFeature: {
8843
9967
  /**
@@ -8889,7 +10013,7 @@ export interface components {
8889
10013
  updated_by_user_id: number | null;
8890
10014
  };
8891
10015
  /** @enum {string} */
8892
- 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" | "dashboard_user_feedback_forms" | "member_homepage" | "reuse_detection" | "restrict_members_to_inspection_details" | "ai_analysis_configuration" | "guided_capture" | "verisk_sso" | "enable_processing_status_for_inspections";
10016
+ 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" | "dashboard_user_feedback_forms" | "member_homepage" | "reuse_detection" | "restrict_members_to_inspection_details" | "ai_analysis_configuration" | "guided_capture" | "verisk_sso" | "enable_processing_status_for_inspections" | "disable_selfie_capture";
8893
10017
  /** @description A possible outcome for an inspection */
8894
10018
  Outcome: {
8895
10019
  /**
@@ -9415,6 +10539,11 @@ export interface components {
9415
10539
  */
9416
10540
  include_list: boolean;
9417
10541
  inspection_types: {
10542
+ /**
10543
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
10544
+ * @example test
10545
+ */
10546
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
9418
10547
  /**
9419
10548
  * Format: date-time
9420
10549
  * @description The date/time the resource was created
@@ -9580,10 +10709,10 @@ export interface components {
9580
10709
  */
9581
10710
  name: string;
9582
10711
  /**
9583
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
10712
+ * @description the id of the organization that this inspection type belongs to. References `organizations.id`. Null for legacy inspection types that were created without an owner.
9584
10713
  * @example 14
9585
10714
  */
9586
- organization_id: number;
10715
+ organization_id: number | null;
9587
10716
  /** @description The outcome set that is used by this inspection type. */
9588
10717
  outcome_set?: components["schemas"]["OutcomeSet"];
9589
10718
  /**
@@ -9866,6 +10995,57 @@ export interface components {
9866
10995
  */
9867
10996
  updated_at: string;
9868
10997
  };
10998
+ /** @description The response body for POST /announcements/asset/upload */
10999
+ PostAnnouncementAssetResult: {
11000
+ /**
11001
+ * @description The current version number of the Vision API
11002
+ * @example 3.0.0
11003
+ */
11004
+ api_version: string;
11005
+ /**
11006
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
11007
+ * @example announcement_internal_name_taken
11008
+ */
11009
+ error_code?: string;
11010
+ /**
11011
+ * @description The human readable-status of the response
11012
+ * @example Success
11013
+ */
11014
+ message: string;
11015
+ /**
11016
+ * @description The HTTP status code of the response
11017
+ * @example 200
11018
+ */
11019
+ response_code: number;
11020
+ result: {
11021
+ /** @description The URL to store on `announcements.image_url` */
11022
+ image_url: string;
11023
+ };
11024
+ };
11025
+ /** @description The response body for POST /announcements/manage/audience-preview */
11026
+ PostAnnouncementAudiencePreviewResult: {
11027
+ /**
11028
+ * @description The current version number of the Vision API
11029
+ * @example 3.0.0
11030
+ */
11031
+ api_version: string;
11032
+ /**
11033
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
11034
+ * @example announcement_internal_name_taken
11035
+ */
11036
+ error_code?: string;
11037
+ /**
11038
+ * @description The human readable-status of the response
11039
+ * @example Success
11040
+ */
11041
+ message: string;
11042
+ /**
11043
+ * @description The HTTP status code of the response
11044
+ * @example 200
11045
+ */
11046
+ response_code: number;
11047
+ result: components["schemas"]["AnnouncementAudiencePreview"];
11048
+ };
9869
11049
  /** @description The response body for POST /org-asset/{assetType}/upload */
9870
11050
  PostOrgAssetResult: {
9871
11051
  /**
@@ -9873,6 +11053,11 @@ export interface components {
9873
11053
  * @example 3.0.0
9874
11054
  */
9875
11055
  api_version: string;
11056
+ /**
11057
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
11058
+ * @example announcement_internal_name_taken
11059
+ */
11060
+ error_code?: string;
9876
11061
  /**
9877
11062
  * @description The human readable-status of the response
9878
11063
  * @example Success
@@ -9895,6 +11080,11 @@ export interface components {
9895
11080
  * @example 3.0.0
9896
11081
  */
9897
11082
  api_version: string;
11083
+ /**
11084
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
11085
+ * @example announcement_internal_name_taken
11086
+ */
11087
+ error_code?: string;
9898
11088
  /**
9899
11089
  * @description The human readable-status of the response
9900
11090
  * @example Success
@@ -9924,6 +11114,33 @@ export interface components {
9924
11114
  data?: Record<string, never>;
9925
11115
  };
9926
11116
  RecordWebsiteFormBearerActivityResult: components["schemas"]["ResponseData"];
11117
+ /**
11118
+ * @description Where the returned page of release notes sits in the whole set.
11119
+ *
11120
+ * Nested rather than on the envelope because only one of the three arrays is paged, but `pageCount` / `totalResults` are deliberately the same names `generate-response.ts` puts on a paginated envelope — the same two numbers should not have two spellings in one API.
11121
+ */
11122
+ ReleaseNotesPagination: {
11123
+ /**
11124
+ * @description The page number returned.
11125
+ * @example 1
11126
+ */
11127
+ number: number;
11128
+ /**
11129
+ * @description How many pages of release notes this organization has.
11130
+ * @example 3
11131
+ */
11132
+ pageCount: number;
11133
+ /**
11134
+ * @description The page size used.
11135
+ * @example 20
11136
+ */
11137
+ size: number;
11138
+ /**
11139
+ * @description How many release notes this organization has in total.
11140
+ * @example 47
11141
+ */
11142
+ totalResults: number;
11143
+ };
9927
11144
  /** @description The response body for DELETE /users/{userId} */
9928
11145
  RemoveUserResult: components["schemas"]["CreateUserResult"];
9929
11146
  /** @description The generic format for Vision API responses */
@@ -9933,6 +11150,11 @@ export interface components {
9933
11150
  * @example 3.0.0
9934
11151
  */
9935
11152
  api_version: string;
11153
+ /**
11154
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
11155
+ * @example announcement_internal_name_taken
11156
+ */
11157
+ error_code?: string;
9936
11158
  /**
9937
11159
  * @description The human readable-status of the response
9938
11160
  * @example Success
@@ -10048,6 +11270,11 @@ export interface components {
10048
11270
  * @example 3.0.0
10049
11271
  */
10050
11272
  api_version: string;
11273
+ /**
11274
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
11275
+ * @example announcement_internal_name_taken
11276
+ */
11277
+ error_code?: string;
10051
11278
  /**
10052
11279
  * @description The human readable-status of the response
10053
11280
  * @example Success
@@ -10080,6 +11307,8 @@ export interface components {
10080
11307
  };
10081
11308
  SerializedInspection: {
10082
11309
  ai_analysis_status?: components["schemas"]["AIAnalysisStatus"];
11310
+ /** @description VISION-3127: the AI Analysis test alongside the inspection. Absent unless the request sent `include_ai_analysis_test=true` *and* the caller's role and organization are entitled to see test data — an unentitled request gets the ordinary response with this omitted rather than an error, so its absence carries no information about why. Declared here so the generated schema describes the object the query parameter produces, not only the parameter. */
11311
+ ai_analysis_test?: components["schemas"]["AIAnalysisTestProjection"];
10083
11312
  ai_inspection_additional_details?: components["schemas"]["AIInspectionItemAdditionalDetailsResult"] | unknown;
10084
11313
  /** @description The reviewing member user's latest consolidated verdict feedback (all surfaces), surfaced on GET /inspections/{id}. Null when no feedback has been submitted. */
10085
11314
  ai_inspection_feedback?: components["schemas"]["AIInspectionFeedback"] | unknown;
@@ -10247,6 +11476,11 @@ export interface components {
10247
11476
  inspection_status_id: components["schemas"]["InspectionStatusId"];
10248
11477
  /** @description An inspection type with attached list and message template set data */
10249
11478
  inspection_type: {
11479
+ /**
11480
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
11481
+ * @example test
11482
+ */
11483
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
10250
11484
  /**
10251
11485
  * Format: date-time
10252
11486
  * @description The date/time the resource was created
@@ -10412,10 +11646,10 @@ export interface components {
10412
11646
  */
10413
11647
  name: string;
10414
11648
  /**
10415
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
11649
+ * @description the id of the organization that this inspection type belongs to. References `organizations.id`. Null for legacy inspection types that were created without an owner.
10416
11650
  * @example 14
10417
11651
  */
10418
- organization_id: number;
11652
+ organization_id: number | null;
10419
11653
  /** @description The outcome set that is used by this inspection type. */
10420
11654
  outcome_set?: components["schemas"]["OutcomeSet"];
10421
11655
  /**
@@ -10908,6 +12142,11 @@ export interface components {
10908
12142
  * @example 3.0.0
10909
12143
  */
10910
12144
  api_version: string;
12145
+ /**
12146
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
12147
+ * @example announcement_internal_name_taken
12148
+ */
12149
+ error_code?: string;
10911
12150
  /**
10912
12151
  * @description The ID of the newly created resource
10913
12152
  * @example 5
@@ -11373,6 +12612,16 @@ export interface components {
11373
12612
  * }
11374
12613
  */
11375
12614
  custom_headers?: Record<string, never> | unknown;
12615
+ /**
12616
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12617
+ *
12618
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12619
+ * @example [
12620
+ * "ACTION_INSPECTION_CREATED",
12621
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12622
+ * ]
12623
+ */
12624
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11376
12625
  /**
11377
12626
  * @description Whether or not the webhook should be disabled. If set to true, the webhook will be disabled and no longer send POST requests. If set to false, the webhook will be enabled and will send POST requests. If you omit this field, the webhook will not change its disabled state.
11378
12627
  * @example false
@@ -11444,6 +12693,16 @@ export interface components {
11444
12693
  * @example 2023-06-01 17:12:20.097233+00
11445
12694
  */
11446
12695
  disabled_at?: string | null;
12696
+ /**
12697
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12698
+ *
12699
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12700
+ * @example [
12701
+ * "ACTION_INSPECTION_CREATED",
12702
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12703
+ * ]
12704
+ */
12705
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11447
12706
  /**
11448
12707
  * @description Whether or not the webhook has an OAuth `client_secret` stored.
11449
12708
  * @example true
@@ -11646,6 +12905,16 @@ export interface components {
11646
12905
  * }
11647
12906
  */
11648
12907
  custom_headers?: Record<string, never> | unknown;
12908
+ /**
12909
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12910
+ *
12911
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12912
+ * @example [
12913
+ * "ACTION_INSPECTION_CREATED",
12914
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12915
+ * ]
12916
+ */
12917
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11649
12918
  /**
11650
12919
  * @description Whether or not the webhook should be disabled. If set to true, the webhook will be disabled and no longer send POST requests. If set to false, the webhook will be enabled and will send POST requests. If you omit this field, the webhook will not change its disabled state.
11651
12920
  * @example false
@@ -11712,6 +12981,16 @@ export interface components {
11712
12981
  * @example 2023-06-01 17:12:20.097233+00
11713
12982
  */
11714
12983
  disabled_at?: string | null;
12984
+ /**
12985
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12986
+ *
12987
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12988
+ * @example [
12989
+ * "ACTION_INSPECTION_CREATED",
12990
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12991
+ * ]
12992
+ */
12993
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11715
12994
  /**
11716
12995
  * @description Whether or not the webhook has an OAuth `client_secret` stored.
11717
12996
  * @example true
@@ -11773,11 +13052,49 @@ export interface components {
11773
13052
  */
11774
13053
  vision_api_version: components["schemas"]["VisionAPIVersion"];
11775
13054
  };
13055
+ TestProjectionAttempt: {
13056
+ completed_at: string | null;
13057
+ configuration_fingerprint: string | null;
13058
+ configuration_generation_id: number | null;
13059
+ created_at: string | null;
13060
+ error_code: string | null;
13061
+ failed_at: string | null;
13062
+ id: number;
13063
+ started_at: string | null;
13064
+ state: string;
13065
+ };
13066
+ TestProjectionResult: {
13067
+ completed_at: string | null;
13068
+ configuration_fingerprint: string | null;
13069
+ configuration_generation_id: number | null;
13070
+ /**
13071
+ * @description The extraction event behind this result.
13072
+ *
13073
+ * Named `extraction_event_id` rather than `event_id`: the v2/v3 terminology converter rewrites any key called `event_id` to `inspection_id` on every response, because v2 called inspections "events" — so a field named `event_id` could never reach a client under that name.
13074
+ */
13075
+ extraction_event_id?: number;
13076
+ is_stale: boolean;
13077
+ };
11776
13078
  /**
11777
13079
  * @description The possible results of a single test on a Truepic (blurriness, geo, ris, etc.)
11778
13080
  * @enum {string}
11779
13081
  */
11780
13082
  TestResult: "P" | "W" | "F" | "U" | "N";
13083
+ /**
13084
+ * @description Which result the established `ai_status`, `ai_status_details` and `ai_item_types` fields carry in this response: `test` when they carry the AI Analysis test, `ordinary` when they carry the inspection's ordinary result instead.
13085
+ *
13086
+ * Read this field rather than inferring the answer from `eligible` or from `inspection_type_lifecycle`. It names where those three fields came from, not whether they hold anything.
13087
+ *
13088
+ * An inspection with no analysis at all reports `ordinary`, returning the same empty response an ordinary reader would get. A first run in flight reports `test` with an empty body. A rerun in flight also reports `test`, but the earlier test's result is retained, so those fields keep carrying it until the rerun finishes or fails.
13089
+ *
13090
+ * For a run's own progress, read `ai_analysis_test.attempt.state`.
13091
+ *
13092
+ * It describes those three fields only. `alert`, `alert_count` and the PDF always describe the ordinary analysis whatever this says, because unpromoted tests are excluded from all three by design.
13093
+ * @enum {string}
13094
+ */
13095
+ TestResultsType: "test" | "ordinary";
13096
+ /** @enum {string} */
13097
+ TestUnavailableReasonValue: "inspection_not_ready_for_review" | "inspection_type_not_test" | "configuration_missing";
11781
13098
  TextMatchingExpectedValues: {
11782
13099
  /**
11783
13100
  * @description The text matching set to compare against.
@@ -12063,6 +13380,11 @@ export interface components {
12063
13380
  * @example 3.0.0
12064
13381
  */
12065
13382
  api_version: string;
13383
+ /**
13384
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
13385
+ * @example announcement_internal_name_taken
13386
+ */
13387
+ error_code?: string;
12066
13388
  /**
12067
13389
  * @description The human readable-status of the response
12068
13390
  * @example Success
@@ -12083,6 +13405,11 @@ export interface components {
12083
13405
  };
12084
13406
  /** @description Request Body for PUT /inspection-types/{inspectionTypeId} */
12085
13407
  UpdateInspectionTypeBody: {
13408
+ /**
13409
+ * @description Publication state of this type's AI Analysis configuration (VISION-3122). Null means the configuration has never been published; `'test'` means administrators can run manual tests but new inspections get no ordinary snapshot; `'live'` means eligible new inspections are snapshotted and run automatically.
13410
+ * @example test
13411
+ */
13412
+ ai_analysis_lifecycle?: components["schemas"]["AIAnalysisLifecycleValue"];
12086
13413
  /**
12087
13414
  * @description the id of the user who created this inspection type. References `users.id`
12088
13415
  * @example 2343
@@ -12214,6 +13541,11 @@ export interface components {
12214
13541
  */
12215
13542
  api_version: string;
12216
13543
  data: components["schemas"]["OrganizationEnabledFeature"][];
13544
+ /**
13545
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
13546
+ * @example announcement_internal_name_taken
13547
+ */
13548
+ error_code?: string;
12217
13549
  /**
12218
13550
  * @description The human readable-status of the response
12219
13551
  * @example Success
@@ -12296,6 +13628,11 @@ export interface components {
12296
13628
  * @example 3.0.0
12297
13629
  */
12298
13630
  api_version: string;
13631
+ /**
13632
+ * @description A stable, machine-readable name for a rejection, sent beside the message on the 4xx responses a client has to act on rather than only display. Absent on success, and on rejections with nothing to branch on — so treat a missing value as "no specific reason given" rather than as an error.
13633
+ * @example announcement_internal_name_taken
13634
+ */
13635
+ error_code?: string;
12299
13636
  /**
12300
13637
  * @description The human readable-status of the response
12301
13638
  * @example Success
@@ -12507,6 +13844,11 @@ export interface components {
12507
13844
  /** @description URI of the page or document the model relied on. One URI per source — multiple supporting URIs become multiple `web_lookup` entries. */
12508
13845
  uri: string;
12509
13846
  };
13847
+ /**
13848
+ * @description An event an outbound Vision webhook can be subscribed to via `enabled_events`.
13849
+ * @enum {string}
13850
+ */
13851
+ WebhookEventType: "ACTION_INSPECTION_CREATED" | "ACTION_INSPECTION_SCHEDULED" | "ACTION_INSPECTION_RESCHEDULED" | "ACTION_STATUS_STARTED" | "ACTION_STATUS_IN_PROGRESS" | "ACTION_STATUS_PROCESSING" | "ACTION_STATUS_READY_FOR_REVIEW" | "ACTION_INSPECTION_CLOSED" | "ACTION_INSPECTION_CANCELED" | "ACTION_PHOTO_VERIFICATION_PASSED" | "ACTION_PHOTO_VERIFICATION_FAILED" | "ACTION_PHOTO_VERIFICATION_WARN" | "ACTION_PHOTO_DELETED" | "ACTION_QUESTION_ANSWERED" | "ACTION_QUESTION_ANSWER_DELETED" | "ACTION_MESSAGE_WELCOME_TEXT" | "ACTION_MESSAGE_REMINDER_TEXT" | "ACTION_MESSAGE_FINISH_REMINDER_TEXT" | "ACTION_MESSAGE_AUTO_REMINDER_TEXT" | "ACTION_MESSAGE_AUTO_FINISH_REMINDER_TEXT" | "ACTION_MESSAGE_REQUEST_TEXT" | "ACTION_MESSAGE_INSPECTION_FINISHED_TEXT" | "ACTION_CONSUMER_REPLY" | "ACTION_MESSAGE_AUTO_REPLY_TEXT" | "ACTION_MESSAGE_AGENT_REPLY_TEXT" | "ACTION_MESSAGE_RECEIVED" | "ACTION_MESSAGE_FAILED" | "ACTION_MESSAGE_UNDELIVERED" | "ACTION_MESSAGE_TEXT_DROPPED_VIA_UNSUBSCRIBE" | "ACTION_MESSAGE_WELCOME_EMAIL" | "ACTION_MESSAGE_REMINDER_EMAIL" | "ACTION_MESSAGE_FINISH_REMINDER_EMAIL" | "ACTION_MESSAGE_AUTO_REMINDER_EMAIL" | "ACTION_MESSAGE_AUTO_FINISH_REMINDER_EMAIL" | "ACTION_MESSAGE_REQUEST_EMAIL" | "ACTION_MESSAGE_INSPECTION_FINISHED_EMAIL" | "ACTION_MESSAGE_AUTO_REPLY_EMAIL" | "ACTION_MESSAGE_EMAIL_REPLY" | "ACTION_MESSAGE_EMAIL_RECEIVED" | "ACTION_MESSAGE_EMAIL_OPENED" | "ACTION_MESSAGE_EMAIL_BOUNCED" | "ACTION_MESSAGE_EMAIL_DROPPED" | "ACTION_MESSAGE_EMAIL_DROPPED_VIA_UNSUBSCRIBE" | "ACTION_MESSAGE_EMAIL_SPAM_REPORTED" | "ACTION_EMAIL_UNSUBSCRIBED" | "ACTION_EMAIL_RESUBSCRIBED" | "ACTION_APP_OPENED" | "ACTION_PDF_READY" | "ACTION_PDF_FAILED" | "ACTION_AI_ANALYSIS_FAILED";
12510
13852
  /**
12511
13853
  * @description How Vision presents the client credentials on the token request.
12512
13854
  *
@@ -12715,6 +14057,29 @@ export interface components {
12715
14057
  };
12716
14058
  };
12717
14059
  responses: {
14060
+ /** @description The operation was refused. `code` is stable and intended for client logic; `details` depends on it. */
14061
+ AIAnalysisTestModeConflict: {
14062
+ headers: {
14063
+ [name: string]: unknown;
14064
+ };
14065
+ content: {
14066
+ /**
14067
+ * @example {
14068
+ * "error": {
14069
+ * "code": "test_run_in_progress",
14070
+ * "message": "A test is already running for this inspection.",
14071
+ * "details": {
14072
+ * "attempt": {
14073
+ * "id": 4711,
14074
+ * "state": "running"
14075
+ * }
14076
+ * }
14077
+ * }
14078
+ * }
14079
+ */
14080
+ "application/json": components["schemas"]["AIAnalysisTestModeErrorBody"];
14081
+ };
14082
+ };
12718
14083
  /** @description The request body couldn't be parsed. */
12719
14084
  ErrorBadRequest: {
12720
14085
  headers: {