@truepic/vision-api-types 3.87.0 → 3.88.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 +1386 -24
  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"][];
@@ -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 (VISION-3227). Null on TEMPLATE rows, which are the editable configuration rather than a snapshot, and on INSTANCE rows written before the generation model existed — see `scripts/backfill-ai-configuration-generations.ts`. */
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
@@ -3404,6 +3545,465 @@ export interface components {
3404
3545
  photo_id?: number;
3405
3546
  test_key: string;
3406
3547
  };
3548
+ /** @description An organization in a resolved audience. */
3549
+ AnnouncementAudienceOrganization: {
3550
+ /**
3551
+ * @description The id of the organization.
3552
+ * @example 1843
3553
+ */
3554
+ id: number;
3555
+ /**
3556
+ * @description The name of the organization.
3557
+ * @example Quality Capital
3558
+ */
3559
+ name: string | null;
3560
+ };
3561
+ /** @description Exactly who an audience reaches, for the confirmation screen. */
3562
+ AnnouncementAudiencePreview: {
3563
+ /**
3564
+ * @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.
3565
+ * @example 18
3566
+ */
3567
+ feature_enabled_organization_count: number | null;
3568
+ /**
3569
+ * @description How many active organizations the announcement resolves to. Always the whole audience, even when `organizations` is capped.
3570
+ * @example 42
3571
+ */
3572
+ organization_count: number;
3573
+ /** @description The first organizations in the audience, by name, capped at 100. */
3574
+ organizations: components["schemas"]["AnnouncementAudienceOrganization"][];
3575
+ /**
3576
+ * @description Whether the audience is larger than the returned `organizations`.
3577
+ * @example false
3578
+ */
3579
+ truncated: boolean;
3580
+ /**
3581
+ * @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.
3582
+ * @example 318
3583
+ */
3584
+ user_count: number;
3585
+ };
3586
+ /**
3587
+ * @description The request body for POST /announcements/manage/audience-preview — the targeting as the form currently holds it, rather than as it is stored.
3588
+ *
3589
+ * 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.
3590
+ */
3591
+ AnnouncementAudiencePreviewProps: {
3592
+ /**
3593
+ * @description Whether the audience starts global or is narrowed to industries. Defaults to `global`.
3594
+ * @example industries
3595
+ */
3596
+ audience_scope?: components["schemas"]["AnnouncementAudienceScope"];
3597
+ /**
3598
+ * @description The organizations to subtract from the resolved audience. Defaults to none.
3599
+ * @example [
3600
+ * 1843
3601
+ * ]
3602
+ */
3603
+ excluded_organization_ids?: number[];
3604
+ /**
3605
+ * @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.
3606
+ * @example ai_analysis_configuration
3607
+ */
3608
+ feature_identifier?: components["schemas"]["OrganizationEnabledFeatureType"] | unknown;
3609
+ /**
3610
+ * @description The industries to narrow to. Only meaningful under the `industries` scope. Defaults to none, and an `industries` scope with none resolves to nobody.
3611
+ * @example [
3612
+ * 3,
3613
+ * 7
3614
+ * ]
3615
+ */
3616
+ industry_ids?: number[];
3617
+ };
3618
+ /** @enum {string} */
3619
+ AnnouncementAudienceScope: "global" | "industries";
3620
+ /** @enum {string} */
3621
+ AnnouncementBadge: "new" | "beta";
3622
+ /** @description A row of the super-admin Manage table. */
3623
+ AnnouncementManageRow: {
3624
+ /**
3625
+ * @description How the audience starts out before exclusions are subtracted.
3626
+ * @example global
3627
+ */
3628
+ audience_scope: components["schemas"]["AnnouncementAudienceScope"];
3629
+ /**
3630
+ * @description A one-line description of who the announcement targets.
3631
+ * @example All organizations, excluding 3 organizations
3632
+ */
3633
+ audience_summary: string;
3634
+ /**
3635
+ * Format: date-time
3636
+ * @description The date/time the resource was created
3637
+ * @example 2020-05-01T21:44:40.000Z
3638
+ */
3639
+ created_at: string;
3640
+ /**
3641
+ * @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.
3642
+ * @example 2
3643
+ */
3644
+ excluded_organization_count: number;
3645
+ /**
3646
+ * @description The id of the resource.
3647
+ * @example 1
3648
+ */
3649
+ id: number;
3650
+ /**
3651
+ * @description The industries the audience is narrowed to, by name. Empty when `audience_scope` is `global`.
3652
+ * @example [
3653
+ * "Auto Warranty",
3654
+ * "Equipment Financing"
3655
+ * ]
3656
+ */
3657
+ industry_names: string[];
3658
+ /**
3659
+ * @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.
3660
+ * @example AI Analysis
3661
+ */
3662
+ internal_name: string;
3663
+ /**
3664
+ * @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.
3665
+ * @example true
3666
+ */
3667
+ is_draft: boolean;
3668
+ /**
3669
+ * @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.
3670
+ * @example 270
3671
+ */
3672
+ organization_count: number;
3673
+ /**
3674
+ * @description Whether the announcement should also be promoted as a modal. Feature announcements only.
3675
+ * @example false
3676
+ */
3677
+ promote_as_modal: boolean;
3678
+ /**
3679
+ * @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.
3680
+ * @example 2026-08-27T00:00:00.000Z
3681
+ */
3682
+ published_at: string;
3683
+ /**
3684
+ * @description The lifecycle status, derived from `is_draft`, `published_at` and `unpublished_at` rather than stored.
3685
+ * @example published
3686
+ */
3687
+ status: components["schemas"]["AnnouncementStatus"];
3688
+ /**
3689
+ * @description The headline shown to the organization.
3690
+ * @example Introducing AI Analysis!
3691
+ */
3692
+ title: string;
3693
+ /**
3694
+ * @description Which kind of announcement this is.
3695
+ * @example feature_announcement
3696
+ */
3697
+ type: components["schemas"]["AnnouncementType"];
3698
+ /**
3699
+ * @description The date/time the announcement was unpublished. Null while it is a draft, scheduled or published; republishing clears it.
3700
+ * @example 2026-10-01T12:00:00.000Z
3701
+ */
3702
+ unpublished_at: string | null;
3703
+ /**
3704
+ * Format: date-time
3705
+ * @description The date/time the resource was last updated
3706
+ * @example 2020-05-01T21:44:40.000Z
3707
+ */
3708
+ updated_at: string;
3709
+ };
3710
+ /**
3711
+ * @description The request body for creating or updating an announcement.
3712
+ *
3713
+ * `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.
3714
+ */
3715
+ AnnouncementProps: {
3716
+ /**
3717
+ * @description The author-set display text for the additional link.
3718
+ * @example Learn more
3719
+ */
3720
+ additional_link_label?: string | null;
3721
+ /**
3722
+ * @description The additional link's destination.
3723
+ * @example https://www.truepic.com/vision/ai-analysis
3724
+ */
3725
+ additional_link_url?: string | null;
3726
+ /**
3727
+ * @description How the audience starts out before exclusions are subtracted.
3728
+ * @example global
3729
+ */
3730
+ audience_scope?: components["schemas"]["AnnouncementAudienceScope"];
3731
+ /**
3732
+ * @description The badge to show alongside the announcement, if any.
3733
+ * @example beta
3734
+ */
3735
+ badge?: components["schemas"]["AnnouncementBadge"] | unknown;
3736
+ /**
3737
+ * @description The body copy. Plain text for feature announcements; a sanitized HTML subset for release notes.
3738
+ * @example Let AI review inspections for you.
3739
+ */
3740
+ description?: string;
3741
+ /**
3742
+ * @description Alternate body copy shown when the announced feature is already enabled for the organization. Null when there is no alternate copy.
3743
+ * @example AI Analysis is on for your organization.
3744
+ */
3745
+ description_when_enabled?: string | null;
3746
+ /**
3747
+ * @description The organizations to subtract from the resolved audience.
3748
+ * @example [
3749
+ * 1843
3750
+ * ]
3751
+ */
3752
+ excluded_organization_ids?: number[];
3753
+ /**
3754
+ * @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.
3755
+ * @example ai_analysis_configuration
3756
+ */
3757
+ feature_identifier?: components["schemas"]["OrganizationEnabledFeatureType"] | unknown;
3758
+ /**
3759
+ * @description The URL of the announcement image. Feature announcements only.
3760
+ * @example https://assets.truepic.com/staging/announcements/1756600000000-tpvision-ai-analysis.png
3761
+ */
3762
+ image_url?: string | null;
3763
+ /**
3764
+ * @description The industries to narrow the audience to. Only meaningful when `audience_scope` is `industries`.
3765
+ * @example [
3766
+ * 3,
3767
+ * 7
3768
+ * ]
3769
+ */
3770
+ industry_ids?: number[];
3771
+ /**
3772
+ * @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.
3773
+ * @example AI Analysis
3774
+ */
3775
+ internal_name?: string;
3776
+ /**
3777
+ * @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.
3778
+ * @example true
3779
+ */
3780
+ is_draft?: boolean;
3781
+ /**
3782
+ * @description Whether the announcement should also be promoted as a modal. Feature announcements only.
3783
+ * @example false
3784
+ */
3785
+ promote_as_modal?: boolean;
3786
+ /**
3787
+ * @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.
3788
+ * @example 2026-08-27T00:00:00.000Z
3789
+ */
3790
+ published_at?: string;
3791
+ /**
3792
+ * @description The author-set display text for the settings button.
3793
+ * @example Go to settings
3794
+ */
3795
+ settings_button_label?: string | null;
3796
+ /**
3797
+ * @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.
3798
+ * @example Manage settings
3799
+ */
3800
+ settings_button_label_enabled?: string | null;
3801
+ /**
3802
+ * @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.
3803
+ * @example /account/settings/landing-pages
3804
+ */
3805
+ settings_path?: string | null;
3806
+ /**
3807
+ * @description The headline shown to the organization.
3808
+ * @example Introducing AI Analysis!
3809
+ */
3810
+ title?: string;
3811
+ /**
3812
+ * @description Which kind of announcement this is.
3813
+ * @example feature_announcement
3814
+ */
3815
+ type?: components["schemas"]["AnnouncementType"];
3816
+ /**
3817
+ * @description The date/time the announcement was unpublished. Null while it is a draft, scheduled or published; republishing clears it.
3818
+ * @example 2026-10-01T12:00:00.000Z
3819
+ */
3820
+ unpublished_at?: string | null;
3821
+ };
3822
+ /** @description An announcement with its derived status and audience ids — what the edit form repopulates from. */
3823
+ AnnouncementRecord: {
3824
+ /**
3825
+ * @description The author-set display text for the additional link.
3826
+ * @example Learn more
3827
+ */
3828
+ additional_link_label: string | null;
3829
+ /**
3830
+ * @description The additional link's destination.
3831
+ * @example https://www.truepic.com/vision/ai-analysis
3832
+ */
3833
+ additional_link_url: string | null;
3834
+ /**
3835
+ * @description How the audience starts out before exclusions are subtracted.
3836
+ * @example global
3837
+ */
3838
+ audience_scope: components["schemas"]["AnnouncementAudienceScope"];
3839
+ /**
3840
+ * @description The badge to show alongside the announcement, if any.
3841
+ * @example beta
3842
+ */
3843
+ badge: components["schemas"]["AnnouncementBadge"] | unknown;
3844
+ /**
3845
+ * Format: date-time
3846
+ * @description The date/time the resource was created
3847
+ * @example 2020-05-01T21:44:40.000Z
3848
+ */
3849
+ created_at: string;
3850
+ /**
3851
+ * @description The id of the user who created the announcement.
3852
+ * @example 512
3853
+ */
3854
+ created_by_user_id: number | null;
3855
+ /**
3856
+ * @description The body copy. Plain text for feature announcements; a sanitized HTML subset for release notes.
3857
+ * @example Let AI review inspections for you.
3858
+ */
3859
+ description: string;
3860
+ /**
3861
+ * @description Alternate body copy shown when the announced feature is already enabled for the organization. Null when there is no alternate copy.
3862
+ * @example AI Analysis is on for your organization.
3863
+ */
3864
+ description_when_enabled: string | null;
3865
+ /**
3866
+ * @description The organizations subtracted from the resolved audience.
3867
+ * @example [
3868
+ * 1843
3869
+ * ]
3870
+ */
3871
+ excluded_organization_ids: number[];
3872
+ /**
3873
+ * @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.
3874
+ * @example ai_analysis_configuration
3875
+ */
3876
+ feature_identifier: components["schemas"]["OrganizationEnabledFeatureType"] | unknown;
3877
+ /**
3878
+ * @description The id of the resource.
3879
+ * @example 1
3880
+ */
3881
+ id: number;
3882
+ /**
3883
+ * @description The URL of the announcement image. Feature announcements only.
3884
+ * @example https://assets.truepic.com/staging/announcements/1756600000000-tpvision-ai-analysis.png
3885
+ */
3886
+ image_url: string | null;
3887
+ /**
3888
+ * @description The industries the audience is narrowed to. Empty unless `audience_scope` is `industries`.
3889
+ * @example [
3890
+ * 3,
3891
+ * 7
3892
+ * ]
3893
+ */
3894
+ industry_ids: number[];
3895
+ /**
3896
+ * @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.
3897
+ * @example AI Analysis
3898
+ */
3899
+ internal_name: string;
3900
+ /**
3901
+ * @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.
3902
+ * @example true
3903
+ */
3904
+ is_draft: boolean;
3905
+ /**
3906
+ * @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.
3907
+ * @example vision-ui-discover-features-promoted-last-viewed
3908
+ */
3909
+ legacy_seen_state_key: string | null;
3910
+ /**
3911
+ * @description Whether the announcement should also be promoted as a modal. Feature announcements only.
3912
+ * @example false
3913
+ */
3914
+ promote_as_modal: boolean;
3915
+ /**
3916
+ * @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.
3917
+ * @example 2026-08-27T00:00:00.000Z
3918
+ */
3919
+ published_at: string;
3920
+ /**
3921
+ * @description The author-set display text for the settings button.
3922
+ * @example Go to settings
3923
+ */
3924
+ settings_button_label: string | null;
3925
+ /**
3926
+ * @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.
3927
+ * @example Manage settings
3928
+ */
3929
+ settings_button_label_enabled: string | null;
3930
+ /**
3931
+ * @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.
3932
+ * @example /account/settings/landing-pages
3933
+ */
3934
+ settings_path: string | null;
3935
+ /**
3936
+ * @description The lifecycle status, derived rather than stored.
3937
+ * @example scheduled
3938
+ */
3939
+ status: components["schemas"]["AnnouncementStatus"];
3940
+ /**
3941
+ * @description The headline shown to the organization.
3942
+ * @example Introducing AI Analysis!
3943
+ */
3944
+ title: string;
3945
+ /**
3946
+ * @description Which kind of announcement this is.
3947
+ * @example feature_announcement
3948
+ */
3949
+ type: components["schemas"]["AnnouncementType"];
3950
+ /**
3951
+ * @description The date/time the announcement was unpublished. Null while it is a draft, scheduled or published; republishing clears it.
3952
+ * @example 2026-10-01T12:00:00.000Z
3953
+ */
3954
+ unpublished_at: string | null;
3955
+ /**
3956
+ * @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.
3957
+ * @example Nick Brown
3958
+ */
3959
+ unpublished_by: string | null;
3960
+ /**
3961
+ * @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.
3962
+ * @example 512
3963
+ */
3964
+ unpublished_by_user_id: number | null;
3965
+ /**
3966
+ * Format: date-time
3967
+ * @description The date/time the resource was last updated
3968
+ * @example 2020-05-01T21:44:40.000Z
3969
+ */
3970
+ updated_at: string;
3971
+ /**
3972
+ * @description The id of the user who last updated the announcement.
3973
+ * @example 512
3974
+ */
3975
+ updated_by_user_id: number | null;
3976
+ };
3977
+ /** @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. */
3978
+ AnnouncementRowAudience: {
3979
+ /**
3980
+ * @description A one-line description of who the announcement targets.
3981
+ * @example All organizations, excluding 3 organizations
3982
+ */
3983
+ audience_summary: string;
3984
+ /**
3985
+ * @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.
3986
+ * @example 2
3987
+ */
3988
+ excluded_organization_count: number;
3989
+ /**
3990
+ * @description The industries the audience is narrowed to, by name. Empty when `audience_scope` is `global`.
3991
+ * @example [
3992
+ * "Auto Warranty",
3993
+ * "Equipment Financing"
3994
+ * ]
3995
+ */
3996
+ industry_names: string[];
3997
+ /**
3998
+ * @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.
3999
+ * @example 270
4000
+ */
4001
+ organization_count: number;
4002
+ };
4003
+ /** @enum {string} */
4004
+ AnnouncementStatus: "draft" | "scheduled" | "published" | "unpublished";
4005
+ /** @enum {string} */
4006
+ AnnouncementType: "feature_announcement" | "release_note";
3407
4007
  /** @description One entry per model call in audit_json arrays on result tables. */
3408
4008
  AuditEntry: {
3409
4009
  /** @description ISO 8601 timestamp when this model call completed. */
@@ -3851,6 +4451,11 @@ export interface components {
3851
4451
  * @description The date the API credentials and bot were created.
3852
4452
  */
3853
4453
  created_at: string;
4454
+ /**
4455
+ * @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.
4456
+ * @example announcement_internal_name_taken
4457
+ */
4458
+ error_code?: string;
3854
4459
  /**
3855
4460
  * @description The human readable-status of the response
3856
4461
  * @example Success
@@ -4015,6 +4620,11 @@ export interface components {
4015
4620
  * @example 3.0.0
4016
4621
  */
4017
4622
  api_version: string;
4623
+ /**
4624
+ * @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.
4625
+ * @example announcement_internal_name_taken
4626
+ */
4627
+ error_code?: string;
4018
4628
  /**
4019
4629
  * @description The human readable-status of the response
4020
4630
  * @example Success
@@ -4029,6 +4639,11 @@ export interface components {
4029
4639
  };
4030
4640
  /** @description Request Body for POST /inspection-types */
4031
4641
  CreateInspectionTypeBody: {
4642
+ /**
4643
+ * @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.
4644
+ * @example test
4645
+ */
4646
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
4032
4647
  /**
4033
4648
  * @description the id of the user who created this inspection type. References `users.id`
4034
4649
  * @example 2343
@@ -4302,6 +4917,11 @@ export interface components {
4302
4917
  * @example 3.0.0
4303
4918
  */
4304
4919
  api_version: string;
4920
+ /**
4921
+ * @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.
4922
+ * @example announcement_internal_name_taken
4923
+ */
4924
+ error_code?: string;
4305
4925
  /**
4306
4926
  * @description The human readable-status of the response
4307
4927
  * @example Success
@@ -4339,6 +4959,11 @@ export interface components {
4339
4959
  * @example 3.0.0
4340
4960
  */
4341
4961
  api_version: string;
4962
+ /**
4963
+ * @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.
4964
+ * @example announcement_internal_name_taken
4965
+ */
4966
+ error_code?: string;
4342
4967
  /**
4343
4968
  * @description The human readable-status of the response
4344
4969
  * @example Success
@@ -4550,6 +5175,8 @@ export interface components {
4550
5175
  */
4551
5176
  tz: string;
4552
5177
  };
5178
+ /** @enum {string} */
5179
+ FeatureAction: "self_enable" | "request_access";
4553
5180
  /** @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
5181
  FieldResultAuditEntry: components["schemas"]["AuditEntry"] | components["schemas"]["SuppressedExtractionAuditEntry"];
4555
5182
  /**
@@ -4568,6 +5195,132 @@ export interface components {
4568
5195
  };
4569
5196
  /** @description The response body for GET /auth/auth0 */
4570
5197
  GetAPICredentialsResult: components["schemas"]["CreateAPICredentialsResult"];
5198
+ /** @description The response body for GET /announcements/manage/audience-options */
5199
+ GetAnnouncementAudienceOptionsResult: {
5200
+ /**
5201
+ * @description The current version number of the Vision API
5202
+ * @example 3.0.0
5203
+ */
5204
+ api_version: string;
5205
+ /**
5206
+ * @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.
5207
+ * @example announcement_internal_name_taken
5208
+ */
5209
+ error_code?: string;
5210
+ /**
5211
+ * @description The human readable-status of the response
5212
+ * @example Success
5213
+ */
5214
+ message: string;
5215
+ /**
5216
+ * @description The HTTP status code of the response
5217
+ * @example 200
5218
+ */
5219
+ response_code: number;
5220
+ result: {
5221
+ /** @description Every industry an audience can be narrowed to, by name. */
5222
+ industries: {
5223
+ id: number;
5224
+ name: string;
5225
+ }[];
5226
+ /** @description Every active organization, so the authoring form can offer them as exclusions. Id and name only — the picker needs nothing else. */
5227
+ organizations: components["schemas"]["AnnouncementAudienceOrganization"][];
5228
+ /**
5229
+ * @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.
5230
+ * @example 272
5231
+ */
5232
+ total_organization_count: number;
5233
+ };
5234
+ };
5235
+ /** @description The response body for GET /announcements/manage/{announcementID}/audience-preview */
5236
+ GetAnnouncementAudiencePreviewResult: {
5237
+ /**
5238
+ * @description The current version number of the Vision API
5239
+ * @example 3.0.0
5240
+ */
5241
+ api_version: string;
5242
+ /**
5243
+ * @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.
5244
+ * @example announcement_internal_name_taken
5245
+ */
5246
+ error_code?: string;
5247
+ /**
5248
+ * @description The human readable-status of the response
5249
+ * @example Success
5250
+ */
5251
+ message: string;
5252
+ /**
5253
+ * @description The HTTP status code of the response
5254
+ * @example 200
5255
+ */
5256
+ response_code: number;
5257
+ result: components["schemas"]["AnnouncementAudiencePreview"];
5258
+ };
5259
+ /** @description The response body for GET /announcements/manage/{announcementID} */
5260
+ GetAnnouncementResult: {
5261
+ /**
5262
+ * @description The current version number of the Vision API
5263
+ * @example 3.0.0
5264
+ */
5265
+ api_version: string;
5266
+ /**
5267
+ * @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.
5268
+ * @example announcement_internal_name_taken
5269
+ */
5270
+ error_code?: string;
5271
+ /**
5272
+ * @description The human readable-status of the response
5273
+ * @example Success
5274
+ */
5275
+ message: string;
5276
+ /**
5277
+ * @description The HTTP status code of the response
5278
+ * @example 200
5279
+ */
5280
+ response_code: number;
5281
+ /** @description The full announcement, including its audience and derived status */
5282
+ result: components["schemas"]["AnnouncementRecord"];
5283
+ };
5284
+ /** @description The response body for GET /announcements/manage */
5285
+ GetAnnouncementsResult: {
5286
+ /**
5287
+ * @description The current version number of the Vision API
5288
+ * @example 3.0.0
5289
+ */
5290
+ api_version: string;
5291
+ /**
5292
+ * @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.
5293
+ * @example announcement_internal_name_taken
5294
+ */
5295
+ error_code?: string;
5296
+ /**
5297
+ * @description The human readable-status of the response
5298
+ * @example Success
5299
+ */
5300
+ message: string;
5301
+ /**
5302
+ * @description The total number of pages for the given query
5303
+ * @example 12
5304
+ */
5305
+ pageCount: number;
5306
+ /**
5307
+ * @description The HTTP status code of the response
5308
+ * @example 200
5309
+ */
5310
+ response_code: number;
5311
+ /** @description A paginated list of announcements for the Manage table */
5312
+ result: components["schemas"]["AnnouncementManageRow"][];
5313
+ /**
5314
+ * @description The total number of results for the given page
5315
+ * @example 25
5316
+ */
5317
+ total: number;
5318
+ /**
5319
+ * @description The total number of results for the given query
5320
+ * @example 251
5321
+ */
5322
+ totalResults: number;
5323
+ };
4571
5324
  /** @description Response Body for GET /inspections/bearer */
4572
5325
  GetBearerInspectionResult: {
4573
5326
  /**
@@ -4575,6 +5328,11 @@ export interface components {
4575
5328
  * @example 3.0.0
4576
5329
  */
4577
5330
  api_version: string;
5331
+ /**
5332
+ * @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.
5333
+ * @example announcement_internal_name_taken
5334
+ */
5335
+ error_code?: string;
4578
5336
  /**
4579
5337
  * @description The human readable-status of the response
4580
5338
  * @example Success
@@ -4886,6 +5644,11 @@ export interface components {
4886
5644
  * @example 3.0.0
4887
5645
  */
4888
5646
  api_version: string;
5647
+ /**
5648
+ * @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.
5649
+ * @example announcement_internal_name_taken
5650
+ */
5651
+ error_code?: string;
4889
5652
  /**
4890
5653
  * @description The human readable-status of the response
4891
5654
  * @example Success
@@ -4905,6 +5668,11 @@ export interface components {
4905
5668
  * @example 3.0.0
4906
5669
  */
4907
5670
  api_version: string;
5671
+ /**
5672
+ * @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.
5673
+ * @example announcement_internal_name_taken
5674
+ */
5675
+ error_code?: string;
4908
5676
  /**
4909
5677
  * @description The human readable-status of the response
4910
5678
  * @example Success
@@ -4940,6 +5708,11 @@ export interface components {
4940
5708
  * @example 3.0.0
4941
5709
  */
4942
5710
  api_version: string;
5711
+ /**
5712
+ * @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.
5713
+ * @example announcement_internal_name_taken
5714
+ */
5715
+ error_code?: string;
4943
5716
  /**
4944
5717
  * @description The human readable-status of the response
4945
5718
  * @example Success
@@ -4959,6 +5732,11 @@ export interface components {
4959
5732
  * @example 3.0.0
4960
5733
  */
4961
5734
  api_version: string;
5735
+ /**
5736
+ * @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.
5737
+ * @example announcement_internal_name_taken
5738
+ */
5739
+ error_code?: string;
4962
5740
  /**
4963
5741
  * @description The human readable-status of the response
4964
5742
  * @example Success
@@ -4970,6 +5748,11 @@ export interface components {
4970
5748
  */
4971
5749
  response_code: number;
4972
5750
  result: {
5751
+ /**
5752
+ * @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.
5753
+ * @example test
5754
+ */
5755
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
4973
5756
  /**
4974
5757
  * Format: date-time
4975
5758
  * @description The date/time the resource was created
@@ -5168,6 +5951,11 @@ export interface components {
5168
5951
  * @example 3.0.0
5169
5952
  */
5170
5953
  api_version: string;
5954
+ /**
5955
+ * @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.
5956
+ * @example announcement_internal_name_taken
5957
+ */
5958
+ error_code?: string;
5171
5959
  /**
5172
5960
  * @description The human readable-status of the response
5173
5961
  * @example Success
@@ -5202,6 +5990,11 @@ export interface components {
5202
5990
  * @example 3.0.0
5203
5991
  */
5204
5992
  api_version: string;
5993
+ /**
5994
+ * @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.
5995
+ * @example announcement_internal_name_taken
5996
+ */
5997
+ error_code?: string;
5205
5998
  /**
5206
5999
  * @description The human readable-status of the response
5207
6000
  * @example Success
@@ -5236,6 +6029,11 @@ export interface components {
5236
6029
  * @example 3.0.0
5237
6030
  */
5238
6031
  api_version: string;
6032
+ /**
6033
+ * @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.
6034
+ * @example announcement_internal_name_taken
6035
+ */
6036
+ error_code?: string;
5239
6037
  /**
5240
6038
  * @description The human readable-status of the response
5241
6039
  * @example Success
@@ -5254,6 +6052,11 @@ export interface components {
5254
6052
  * @example 3.0.0
5255
6053
  */
5256
6054
  api_version: string;
6055
+ /**
6056
+ * @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.
6057
+ * @example announcement_internal_name_taken
6058
+ */
6059
+ error_code?: string;
5257
6060
  /**
5258
6061
  * @description The human readable-status of the response
5259
6062
  * @example Success
@@ -5272,6 +6075,11 @@ export interface components {
5272
6075
  * @example 3.0.0
5273
6076
  */
5274
6077
  api_version: string;
6078
+ /**
6079
+ * @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.
6080
+ * @example announcement_internal_name_taken
6081
+ */
6082
+ error_code?: string;
5275
6083
  /**
5276
6084
  * @description The human readable-status of the response
5277
6085
  * @example Success
@@ -5306,6 +6114,11 @@ export interface components {
5306
6114
  * @example 3.0.0
5307
6115
  */
5308
6116
  api_version: string;
6117
+ /**
6118
+ * @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.
6119
+ * @example announcement_internal_name_taken
6120
+ */
6121
+ error_code?: string;
5309
6122
  /**
5310
6123
  * @description The human readable-status of the response
5311
6124
  * @example Success
@@ -5391,6 +6204,11 @@ export interface components {
5391
6204
  * @example 3.0.0
5392
6205
  */
5393
6206
  api_version: string;
6207
+ /**
6208
+ * @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.
6209
+ * @example announcement_internal_name_taken
6210
+ */
6211
+ error_code?: string;
5394
6212
  /**
5395
6213
  * @description The human readable-status of the response
5396
6214
  * @example Success
@@ -5645,6 +6463,11 @@ export interface components {
5645
6463
  * @example 3.0.0
5646
6464
  */
5647
6465
  api_version: string;
6466
+ /**
6467
+ * @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.
6468
+ * @example announcement_internal_name_taken
6469
+ */
6470
+ error_code?: string;
5648
6471
  /**
5649
6472
  * @description The human readable-status of the response
5650
6473
  * @example Success
@@ -5664,6 +6487,11 @@ export interface components {
5664
6487
  * @example 3.0.0
5665
6488
  */
5666
6489
  api_version: string;
6490
+ /**
6491
+ * @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.
6492
+ * @example announcement_internal_name_taken
6493
+ */
6494
+ error_code?: string;
5667
6495
  /**
5668
6496
  * @description The human readable-status of the response
5669
6497
  * @example Success
@@ -5686,18 +6514,47 @@ export interface components {
5686
6514
  */
5687
6515
  total: number;
5688
6516
  /**
5689
- * @description The total number of results for the given query
5690
- * @example 251
6517
+ * @description The total number of results for the given query
6518
+ * @example 251
6519
+ */
6520
+ totalResults: number;
6521
+ };
6522
+ /** @description The response body for GET /operations/{operationId} */
6523
+ GetOperationResult: {
6524
+ /**
6525
+ * @description The current version number of the Vision API
6526
+ * @example 3.0.0
6527
+ */
6528
+ api_version: string;
6529
+ /**
6530
+ * @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.
6531
+ * @example announcement_internal_name_taken
6532
+ */
6533
+ error_code?: string;
6534
+ /**
6535
+ * @description The human readable-status of the response
6536
+ * @example Success
6537
+ */
6538
+ message: string;
6539
+ /**
6540
+ * @description The HTTP status code of the response
6541
+ * @example 200
5691
6542
  */
5692
- totalResults: number;
6543
+ response_code: number;
6544
+ result: components["schemas"]["Operation"];
5693
6545
  };
5694
- /** @description The response body for GET /operations/{operationId} */
5695
- GetOperationResult: {
6546
+ /** @description The response body for GET /announcements */
6547
+ GetOrganizationAnnouncementsResult: {
5696
6548
  /**
5697
6549
  * @description The current version number of the Vision API
5698
6550
  * @example 3.0.0
5699
6551
  */
5700
6552
  api_version: string;
6553
+ /**
6554
+ * @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.
6555
+ * @example announcement_internal_name_taken
6556
+ */
6557
+ error_code?: string;
5701
6558
  /**
5702
6559
  * @description The human readable-status of the response
5703
6560
  * @example Success
@@ -5708,7 +6565,16 @@ export interface components {
5708
6565
  * @example 200
5709
6566
  */
5710
6567
  response_code: number;
5711
- result: components["schemas"]["Operation"];
6568
+ result: {
6569
+ /** @description Every Discover Features card the organization is eligible for, newest publish date first. Not paginated — the page renders all of them. */
6570
+ feature_announcements: components["schemas"]["OrganizationAnnouncement"][];
6571
+ /** @description The feature announcements promoted as a modal — a subset of `feature_announcements`, in the same order. */
6572
+ promoted: components["schemas"]["OrganizationAnnouncement"][];
6573
+ /** @description One page of release notes, newest publish date first. */
6574
+ release_notes: components["schemas"]["OrganizationAnnouncement"][];
6575
+ /** @description Where `release_notes` sits in the whole set, for a "load more" control. */
6576
+ release_notes_pagination: components["schemas"]["ReleaseNotesPagination"];
6577
+ };
5712
6578
  };
5713
6579
  /** @description The response body for GET /inspections/bearer/support */
5714
6580
  GetSupportByBearerResult: {
@@ -5717,6 +6583,11 @@ export interface components {
5717
6583
  * @example 3.0.0
5718
6584
  */
5719
6585
  api_version: string;
6586
+ /**
6587
+ * @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.
6588
+ * @example announcement_internal_name_taken
6589
+ */
6590
+ error_code?: string;
5720
6591
  /**
5721
6592
  * @description The human readable-status of the response
5722
6593
  * @example Success
@@ -5736,6 +6607,59 @@ export interface components {
5736
6607
  user_jwt: string;
5737
6608
  };
5738
6609
  };
6610
+ /**
6611
+ * @description The response body for GET /supported-feature-actions.
6612
+ *
6613
+ * 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.
6614
+ */
6615
+ GetSupportedFeatureActionsResult: {
6616
+ /**
6617
+ * @description The current version number of the Vision API
6618
+ * @example 3.0.0
6619
+ */
6620
+ api_version: string;
6621
+ /**
6622
+ * @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.
6623
+ * @example announcement_internal_name_taken
6624
+ */
6625
+ error_code?: string;
6626
+ /**
6627
+ * @description The human readable-status of the response
6628
+ * @example Success
6629
+ */
6630
+ message: string;
6631
+ /**
6632
+ * @description The HTTP status code of the response
6633
+ * @example 200
6634
+ */
6635
+ response_code: number;
6636
+ /** @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. */
6637
+ result: {
6638
+ ai_analysis?: components["schemas"]["FeatureAction"];
6639
+ ai_analysis_configuration?: components["schemas"]["FeatureAction"];
6640
+ ask_for_app_review?: components["schemas"]["FeatureAction"];
6641
+ content_analysis_dot_tin?: components["schemas"]["FeatureAction"];
6642
+ content_analysis_odometer?: components["schemas"]["FeatureAction"];
6643
+ content_analysis_text_matching?: components["schemas"]["FeatureAction"];
6644
+ content_analysis_vin?: components["schemas"]["FeatureAction"];
6645
+ dashboard_user_feedback_forms?: components["schemas"]["FeatureAction"];
6646
+ device_details?: components["schemas"]["FeatureAction"];
6647
+ disable_selfie_capture?: components["schemas"]["FeatureAction"];
6648
+ enable_processing_status_for_inspections?: components["schemas"]["FeatureAction"];
6649
+ external_risk_network?: components["schemas"]["FeatureAction"];
6650
+ guided_capture?: components["schemas"]["FeatureAction"];
6651
+ inspection_device_insights?: components["schemas"]["FeatureAction"];
6652
+ landing_pages?: components["schemas"]["FeatureAction"];
6653
+ member_homepage?: components["schemas"]["FeatureAction"];
6654
+ object_detection_auto?: components["schemas"]["FeatureAction"];
6655
+ object_detection_jewelry?: components["schemas"]["FeatureAction"];
6656
+ object_detection_real_estate?: components["schemas"]["FeatureAction"];
6657
+ restrict_members_to_inspection_details?: components["schemas"]["FeatureAction"];
6658
+ reuse_detection?: components["schemas"]["FeatureAction"];
6659
+ risk_network?: components["schemas"]["FeatureAction"];
6660
+ verisk_sso?: components["schemas"]["FeatureAction"];
6661
+ };
6662
+ };
5739
6663
  /** @description The response body for the GET /teams/{teamId} endpoint */
5740
6664
  GetTeamResult: {
5741
6665
  /**
@@ -5743,6 +6667,11 @@ export interface components {
5743
6667
  * @example 3.0.0
5744
6668
  */
5745
6669
  api_version: string;
6670
+ /**
6671
+ * @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.
6672
+ * @example announcement_internal_name_taken
6673
+ */
6674
+ error_code?: string;
5746
6675
  /**
5747
6676
  * @description The human readable-status of the response
5748
6677
  * @example Success
@@ -5871,6 +6800,11 @@ export interface components {
5871
6800
  */
5872
6801
  include_list: boolean;
5873
6802
  inspection_types: {
6803
+ /**
6804
+ * @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.
6805
+ * @example test
6806
+ */
6807
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
5874
6808
  /**
5875
6809
  * Format: date-time
5876
6810
  * @description The date/time the resource was created
@@ -6036,10 +6970,10 @@ export interface components {
6036
6970
  */
6037
6971
  name: string;
6038
6972
  /**
6039
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
6973
+ * @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
6974
  * @example 14
6041
6975
  */
6042
- organization_id: number;
6976
+ organization_id: number | null;
6043
6977
  /** @description The outcome set that is used by this inspection type. */
6044
6978
  outcome_set?: components["schemas"]["OutcomeSet"];
6045
6979
  /**
@@ -6264,6 +7198,11 @@ export interface components {
6264
7198
  * @example 3.0.0
6265
7199
  */
6266
7200
  api_version: string;
7201
+ /**
7202
+ * @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.
7203
+ * @example announcement_internal_name_taken
7204
+ */
7205
+ error_code?: string;
6267
7206
  /**
6268
7207
  * @description The human readable-status of the response
6269
7208
  * @example Success
@@ -6282,6 +7221,11 @@ export interface components {
6282
7221
  * @example 3.0.0
6283
7222
  */
6284
7223
  api_version: string;
7224
+ /**
7225
+ * @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.
7226
+ * @example announcement_internal_name_taken
7227
+ */
7228
+ error_code?: string;
6285
7229
  /**
6286
7230
  * @description The human readable-status of the response
6287
7231
  * @example Success
@@ -6316,6 +7260,11 @@ export interface components {
6316
7260
  * @example 3.0.0
6317
7261
  */
6318
7262
  api_version: string;
7263
+ /**
7264
+ * @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.
7265
+ * @example announcement_internal_name_taken
7266
+ */
7267
+ error_code?: string;
6319
7268
  /**
6320
7269
  * @description The human readable-status of the response
6321
7270
  * @example Success
@@ -6350,6 +7299,11 @@ export interface components {
6350
7299
  * @example 3.0.0
6351
7300
  */
6352
7301
  api_version: string;
7302
+ /**
7303
+ * @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.
7304
+ * @example announcement_internal_name_taken
7305
+ */
7306
+ error_code?: string;
6353
7307
  /**
6354
7308
  * @description The human readable-status of the response
6355
7309
  * @example Success
@@ -6368,6 +7322,11 @@ export interface components {
6368
7322
  * @example 3.0.0
6369
7323
  */
6370
7324
  api_version: string;
7325
+ /**
7326
+ * @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.
7327
+ * @example announcement_internal_name_taken
7328
+ */
7329
+ error_code?: string;
6371
7330
  /**
6372
7331
  * @description The human readable-status of the response
6373
7332
  * @example Success
@@ -6402,6 +7361,11 @@ export interface components {
6402
7361
  * @example 3.0.0
6403
7362
  */
6404
7363
  api_version: string;
7364
+ /**
7365
+ * @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.
7366
+ * @example announcement_internal_name_taken
7367
+ */
7368
+ error_code?: string;
6405
7369
  /**
6406
7370
  * @description The human readable-status of the response
6407
7371
  * @example Success
@@ -6437,6 +7401,11 @@ export interface components {
6437
7401
  * @example 3.0.0
6438
7402
  */
6439
7403
  api_version: string;
7404
+ /**
7405
+ * @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.
7406
+ * @example announcement_internal_name_taken
7407
+ */
7408
+ error_code?: string;
6440
7409
  /**
6441
7410
  * @description The human readable-status of the response
6442
7411
  * @example Success
@@ -6472,6 +7441,11 @@ export interface components {
6472
7441
  * @example 3.0.0
6473
7442
  */
6474
7443
  api_version: string;
7444
+ /**
7445
+ * @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.
7446
+ * @example announcement_internal_name_taken
7447
+ */
7448
+ error_code?: string;
6475
7449
  /**
6476
7450
  * @description The human readable-status of the response
6477
7451
  * @example Success
@@ -6491,6 +7465,11 @@ export interface components {
6491
7465
  * @example 3.0.0
6492
7466
  */
6493
7467
  api_version: string;
7468
+ /**
7469
+ * @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.
7470
+ * @example announcement_internal_name_taken
7471
+ */
7472
+ error_code?: string;
6494
7473
  /**
6495
7474
  * @description The human readable-status of the response
6496
7475
  * @example Success
@@ -6513,6 +7492,11 @@ export interface components {
6513
7492
  * @example 3.0.0
6514
7493
  */
6515
7494
  api_version: string;
7495
+ /**
7496
+ * @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.
7497
+ * @example announcement_internal_name_taken
7498
+ */
7499
+ error_code?: string;
6516
7500
  /**
6517
7501
  * @description The human readable-status of the response
6518
7502
  * @example Success
@@ -6547,6 +7531,11 @@ export interface components {
6547
7531
  * @example 3.0.0
6548
7532
  */
6549
7533
  api_version: string;
7534
+ /**
7535
+ * @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.
7536
+ * @example announcement_internal_name_taken
7537
+ */
7538
+ error_code?: string;
6550
7539
  /**
6551
7540
  * @description The human readable-status of the response
6552
7541
  * @example Success
@@ -6565,6 +7554,11 @@ export interface components {
6565
7554
  * @example 3.0.0
6566
7555
  */
6567
7556
  api_version: string;
7557
+ /**
7558
+ * @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.
7559
+ * @example announcement_internal_name_taken
7560
+ */
7561
+ error_code?: string;
6568
7562
  /**
6569
7563
  * @description The human readable-status of the response
6570
7564
  * @example Success
@@ -6583,6 +7577,11 @@ export interface components {
6583
7577
  * @example 3.0.0
6584
7578
  */
6585
7579
  api_version: string;
7580
+ /**
7581
+ * @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.
7582
+ * @example announcement_internal_name_taken
7583
+ */
7584
+ error_code?: string;
6586
7585
  /**
6587
7586
  * @description The human readable-status of the response
6588
7587
  * @example Success
@@ -7394,6 +8393,12 @@ export interface components {
7394
8393
  * @example P
7395
8394
  */
7396
8395
  blockchain_status: components["schemas"]["TestResult"];
8396
+ /**
8397
+ * @description Which camera took the photo/video: `front` (the selfie camera) or `back`.
8398
+ * @example back
8399
+ * @enum {string}
8400
+ */
8401
+ camera_facing?: "front" | "back";
7397
8402
  /**
7398
8403
  * @description The status of a capture integrity test on this Truepic.
7399
8404
  * @example P
@@ -7749,6 +8754,11 @@ export interface components {
7749
8754
  };
7750
8755
  /** @description The core resource representing an inspection request */
7751
8756
  InspectionType: {
8757
+ /**
8758
+ * @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.
8759
+ * @example test
8760
+ */
8761
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
7752
8762
  /**
7753
8763
  * Format: date-time
7754
8764
  * @description The date/time the resource was created
@@ -7821,10 +8831,10 @@ export interface components {
7821
8831
  */
7822
8832
  name: string;
7823
8833
  /**
7824
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
8834
+ * @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
8835
  * @example 14
7826
8836
  */
7827
- organization_id: number;
8837
+ organization_id: number | null;
7828
8838
  /**
7829
8839
  * @description The id of the outcome set that is used by this inspection type. References `outcome_sets.id`
7830
8840
  * @example 539
@@ -7854,6 +8864,11 @@ export interface components {
7854
8864
  use_single_name_field: boolean;
7855
8865
  };
7856
8866
  InspectionTypeData: {
8867
+ /**
8868
+ * @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.
8869
+ * @example test
8870
+ */
8871
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
7857
8872
  /**
7858
8873
  * Format: date-time
7859
8874
  * @description The date/time the resource was created
@@ -8838,6 +9853,112 @@ export interface components {
8838
9853
  */
8839
9854
  updated_at: string;
8840
9855
  };
9856
+ /** @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. */
9857
+ OrganizationAnnouncement: {
9858
+ /**
9859
+ * @description The author-set display text for the additional link.
9860
+ * @example Learn more
9861
+ */
9862
+ additional_link_label: string | null;
9863
+ /**
9864
+ * @description The additional link's destination.
9865
+ * @example https://www.truepic.com/vision/ai-analysis
9866
+ */
9867
+ additional_link_url: string | null;
9868
+ /**
9869
+ * @description The badge to show alongside the announcement, if any.
9870
+ * @example beta
9871
+ */
9872
+ badge: components["schemas"]["AnnouncementBadge"] | unknown;
9873
+ /**
9874
+ * @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.
9875
+ * @example Let AI review inspections for you.
9876
+ */
9877
+ description: string;
9878
+ /**
9879
+ * @description The id of the resource.
9880
+ * @example 1
9881
+ */
9882
+ id: number;
9883
+ /**
9884
+ * @description The URL of the announcement image. Feature announcements only.
9885
+ * @example https://assets.truepic.com/staging/announcements/1756600000000-tpvision-ai-analysis.png
9886
+ */
9887
+ image_url: string | null;
9888
+ /**
9889
+ * @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.
9890
+ * @example AI Analysis
9891
+ */
9892
+ internal_name: string;
9893
+ /**
9894
+ * @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.
9895
+ * @example vision-ui-discover-features-promoted-last-viewed
9896
+ */
9897
+ legacy_seen_state_key: string | null;
9898
+ /** @description The primary call-to-action, or null when the announcement has no feature to act on. */
9899
+ primary_cta: components["schemas"]["OrganizationAnnouncementPrimaryCta"] | unknown;
9900
+ /**
9901
+ * @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.
9902
+ * @example 2026-08-27T00:00:00.000Z
9903
+ */
9904
+ published_at: string;
9905
+ /**
9906
+ * @description The settings-button text that applies to this organization, resolved the same way. Null when there is no settings button.
9907
+ * @example Configure in settings
9908
+ */
9909
+ settings_button_label: string | null;
9910
+ /**
9911
+ * @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.
9912
+ * @example /account/settings/landing-pages
9913
+ */
9914
+ settings_path: string | null;
9915
+ /**
9916
+ * @description The headline shown to the organization.
9917
+ * @example Introducing AI Analysis!
9918
+ */
9919
+ title: string;
9920
+ /**
9921
+ * @description Which kind of announcement this is.
9922
+ * @example feature_announcement
9923
+ */
9924
+ type: components["schemas"]["AnnouncementType"];
9925
+ };
9926
+ /** @description The primary call-to-action, resolved for the calling organization. */
9927
+ OrganizationAnnouncementPrimaryCta: {
9928
+ /**
9929
+ * @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.
9930
+ * @example self_enable
9931
+ */
9932
+ action: components["schemas"]["FeatureAction"] | unknown;
9933
+ /**
9934
+ * @description Whether the feature is already enabled for the organization.
9935
+ * @example false
9936
+ */
9937
+ feature_enabled: boolean;
9938
+ /**
9939
+ * @description The feature the button acts on.
9940
+ * @example external_risk_network
9941
+ */
9942
+ feature_identifier: components["schemas"]["OrganizationEnabledFeatureType"];
9943
+ /**
9944
+ * @description When the organization requested access to the feature, if it has.
9945
+ * @example 2026-08-28T09:15:00.000Z
9946
+ */
9947
+ feature_requested_access_at: string | null;
9948
+ /**
9949
+ * @description Whether the organization has ever self-enabled the feature.
9950
+ * @example false
9951
+ */
9952
+ feature_self_enabled: boolean;
9953
+ /**
9954
+ * @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.
9955
+ * @example [
9956
+ * "device_details",
9957
+ * "risk_network"
9958
+ * ]
9959
+ */
9960
+ required_features: components["schemas"]["OrganizationEnabledFeatureType"][];
9961
+ };
8841
9962
  /** @description A feature that an organization may have enabled. */
8842
9963
  OrganizationEnabledFeature: {
8843
9964
  /**
@@ -8889,7 +10010,7 @@ export interface components {
8889
10010
  updated_by_user_id: number | null;
8890
10011
  };
8891
10012
  /** @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";
10013
+ 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
10014
  /** @description A possible outcome for an inspection */
8894
10015
  Outcome: {
8895
10016
  /**
@@ -9415,6 +10536,11 @@ export interface components {
9415
10536
  */
9416
10537
  include_list: boolean;
9417
10538
  inspection_types: {
10539
+ /**
10540
+ * @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.
10541
+ * @example test
10542
+ */
10543
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
9418
10544
  /**
9419
10545
  * Format: date-time
9420
10546
  * @description The date/time the resource was created
@@ -9580,10 +10706,10 @@ export interface components {
9580
10706
  */
9581
10707
  name: string;
9582
10708
  /**
9583
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
10709
+ * @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
10710
  * @example 14
9585
10711
  */
9586
- organization_id: number;
10712
+ organization_id: number | null;
9587
10713
  /** @description The outcome set that is used by this inspection type. */
9588
10714
  outcome_set?: components["schemas"]["OutcomeSet"];
9589
10715
  /**
@@ -9866,6 +10992,57 @@ export interface components {
9866
10992
  */
9867
10993
  updated_at: string;
9868
10994
  };
10995
+ /** @description The response body for POST /announcements/asset/upload */
10996
+ PostAnnouncementAssetResult: {
10997
+ /**
10998
+ * @description The current version number of the Vision API
10999
+ * @example 3.0.0
11000
+ */
11001
+ api_version: string;
11002
+ /**
11003
+ * @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.
11004
+ * @example announcement_internal_name_taken
11005
+ */
11006
+ error_code?: string;
11007
+ /**
11008
+ * @description The human readable-status of the response
11009
+ * @example Success
11010
+ */
11011
+ message: string;
11012
+ /**
11013
+ * @description The HTTP status code of the response
11014
+ * @example 200
11015
+ */
11016
+ response_code: number;
11017
+ result: {
11018
+ /** @description The URL to store on `announcements.image_url` */
11019
+ image_url: string;
11020
+ };
11021
+ };
11022
+ /** @description The response body for POST /announcements/manage/audience-preview */
11023
+ PostAnnouncementAudiencePreviewResult: {
11024
+ /**
11025
+ * @description The current version number of the Vision API
11026
+ * @example 3.0.0
11027
+ */
11028
+ api_version: string;
11029
+ /**
11030
+ * @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.
11031
+ * @example announcement_internal_name_taken
11032
+ */
11033
+ error_code?: string;
11034
+ /**
11035
+ * @description The human readable-status of the response
11036
+ * @example Success
11037
+ */
11038
+ message: string;
11039
+ /**
11040
+ * @description The HTTP status code of the response
11041
+ * @example 200
11042
+ */
11043
+ response_code: number;
11044
+ result: components["schemas"]["AnnouncementAudiencePreview"];
11045
+ };
9869
11046
  /** @description The response body for POST /org-asset/{assetType}/upload */
9870
11047
  PostOrgAssetResult: {
9871
11048
  /**
@@ -9873,6 +11050,11 @@ export interface components {
9873
11050
  * @example 3.0.0
9874
11051
  */
9875
11052
  api_version: string;
11053
+ /**
11054
+ * @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.
11055
+ * @example announcement_internal_name_taken
11056
+ */
11057
+ error_code?: string;
9876
11058
  /**
9877
11059
  * @description The human readable-status of the response
9878
11060
  * @example Success
@@ -9895,6 +11077,11 @@ export interface components {
9895
11077
  * @example 3.0.0
9896
11078
  */
9897
11079
  api_version: string;
11080
+ /**
11081
+ * @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.
11082
+ * @example announcement_internal_name_taken
11083
+ */
11084
+ error_code?: string;
9898
11085
  /**
9899
11086
  * @description The human readable-status of the response
9900
11087
  * @example Success
@@ -9924,6 +11111,33 @@ export interface components {
9924
11111
  data?: Record<string, never>;
9925
11112
  };
9926
11113
  RecordWebsiteFormBearerActivityResult: components["schemas"]["ResponseData"];
11114
+ /**
11115
+ * @description Where the returned page of release notes sits in the whole set.
11116
+ *
11117
+ * 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.
11118
+ */
11119
+ ReleaseNotesPagination: {
11120
+ /**
11121
+ * @description The page number returned.
11122
+ * @example 1
11123
+ */
11124
+ number: number;
11125
+ /**
11126
+ * @description How many pages of release notes this organization has.
11127
+ * @example 3
11128
+ */
11129
+ pageCount: number;
11130
+ /**
11131
+ * @description The page size used.
11132
+ * @example 20
11133
+ */
11134
+ size: number;
11135
+ /**
11136
+ * @description How many release notes this organization has in total.
11137
+ * @example 47
11138
+ */
11139
+ totalResults: number;
11140
+ };
9927
11141
  /** @description The response body for DELETE /users/{userId} */
9928
11142
  RemoveUserResult: components["schemas"]["CreateUserResult"];
9929
11143
  /** @description The generic format for Vision API responses */
@@ -9933,6 +11147,11 @@ export interface components {
9933
11147
  * @example 3.0.0
9934
11148
  */
9935
11149
  api_version: string;
11150
+ /**
11151
+ * @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.
11152
+ * @example announcement_internal_name_taken
11153
+ */
11154
+ error_code?: string;
9936
11155
  /**
9937
11156
  * @description The human readable-status of the response
9938
11157
  * @example Success
@@ -10048,6 +11267,11 @@ export interface components {
10048
11267
  * @example 3.0.0
10049
11268
  */
10050
11269
  api_version: string;
11270
+ /**
11271
+ * @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.
11272
+ * @example announcement_internal_name_taken
11273
+ */
11274
+ error_code?: string;
10051
11275
  /**
10052
11276
  * @description The human readable-status of the response
10053
11277
  * @example Success
@@ -10080,6 +11304,8 @@ export interface components {
10080
11304
  };
10081
11305
  SerializedInspection: {
10082
11306
  ai_analysis_status?: components["schemas"]["AIAnalysisStatus"];
11307
+ /** @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. */
11308
+ ai_analysis_test?: components["schemas"]["AIAnalysisTestProjection"];
10083
11309
  ai_inspection_additional_details?: components["schemas"]["AIInspectionItemAdditionalDetailsResult"] | unknown;
10084
11310
  /** @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
11311
  ai_inspection_feedback?: components["schemas"]["AIInspectionFeedback"] | unknown;
@@ -10247,6 +11473,11 @@ export interface components {
10247
11473
  inspection_status_id: components["schemas"]["InspectionStatusId"];
10248
11474
  /** @description An inspection type with attached list and message template set data */
10249
11475
  inspection_type: {
11476
+ /**
11477
+ * @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.
11478
+ * @example test
11479
+ */
11480
+ ai_analysis_lifecycle: components["schemas"]["AIAnalysisLifecycleValue"];
10250
11481
  /**
10251
11482
  * Format: date-time
10252
11483
  * @description The date/time the resource was created
@@ -10412,10 +11643,10 @@ export interface components {
10412
11643
  */
10413
11644
  name: string;
10414
11645
  /**
10415
- * @description the id of the organization that this inspection type belongs to. References `organizations.id`.
11646
+ * @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
11647
  * @example 14
10417
11648
  */
10418
- organization_id: number;
11649
+ organization_id: number | null;
10419
11650
  /** @description The outcome set that is used by this inspection type. */
10420
11651
  outcome_set?: components["schemas"]["OutcomeSet"];
10421
11652
  /**
@@ -10908,6 +12139,11 @@ export interface components {
10908
12139
  * @example 3.0.0
10909
12140
  */
10910
12141
  api_version: string;
12142
+ /**
12143
+ * @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.
12144
+ * @example announcement_internal_name_taken
12145
+ */
12146
+ error_code?: string;
10911
12147
  /**
10912
12148
  * @description The ID of the newly created resource
10913
12149
  * @example 5
@@ -11373,6 +12609,16 @@ export interface components {
11373
12609
  * }
11374
12610
  */
11375
12611
  custom_headers?: Record<string, never> | unknown;
12612
+ /**
12613
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12614
+ *
12615
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12616
+ * @example [
12617
+ * "ACTION_INSPECTION_CREATED",
12618
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12619
+ * ]
12620
+ */
12621
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11376
12622
  /**
11377
12623
  * @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
12624
  * @example false
@@ -11444,6 +12690,16 @@ export interface components {
11444
12690
  * @example 2023-06-01 17:12:20.097233+00
11445
12691
  */
11446
12692
  disabled_at?: string | null;
12693
+ /**
12694
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12695
+ *
12696
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12697
+ * @example [
12698
+ * "ACTION_INSPECTION_CREATED",
12699
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12700
+ * ]
12701
+ */
12702
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11447
12703
  /**
11448
12704
  * @description Whether or not the webhook has an OAuth `client_secret` stored.
11449
12705
  * @example true
@@ -11646,6 +12902,16 @@ export interface components {
11646
12902
  * }
11647
12903
  */
11648
12904
  custom_headers?: Record<string, never> | unknown;
12905
+ /**
12906
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12907
+ *
12908
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12909
+ * @example [
12910
+ * "ACTION_INSPECTION_CREATED",
12911
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12912
+ * ]
12913
+ */
12914
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11649
12915
  /**
11650
12916
  * @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
12917
  * @example false
@@ -11712,6 +12978,16 @@ export interface components {
11712
12978
  * @example 2023-06-01 17:12:20.097233+00
11713
12979
  */
11714
12980
  disabled_at?: string | null;
12981
+ /**
12982
+ * @description The events this webhook receives. Null — the default, and what every webhook created before this field existed holds — means every event.
12983
+ *
12984
+ * A `v2` webhook reads these back in their v2 spelling (`ACTION_INSPECTION_CREATED` for `ACTION_INSPECTION_CREATED`), and either spelling is accepted on write.
12985
+ * @example [
12986
+ * "ACTION_INSPECTION_CREATED",
12987
+ * "ACTION_STATUS_READY_FOR_REVIEW"
12988
+ * ]
12989
+ */
12990
+ enabled_events?: components["schemas"]["WebhookEventType"][] | unknown;
11715
12991
  /**
11716
12992
  * @description Whether or not the webhook has an OAuth `client_secret` stored.
11717
12993
  * @example true
@@ -11773,11 +13049,49 @@ export interface components {
11773
13049
  */
11774
13050
  vision_api_version: components["schemas"]["VisionAPIVersion"];
11775
13051
  };
13052
+ TestProjectionAttempt: {
13053
+ completed_at: string | null;
13054
+ configuration_fingerprint: string | null;
13055
+ configuration_generation_id: number | null;
13056
+ created_at: string | null;
13057
+ error_code: string | null;
13058
+ failed_at: string | null;
13059
+ id: number;
13060
+ started_at: string | null;
13061
+ state: string;
13062
+ };
13063
+ TestProjectionResult: {
13064
+ completed_at: string | null;
13065
+ configuration_fingerprint: string | null;
13066
+ configuration_generation_id: number | null;
13067
+ /**
13068
+ * @description The extraction event behind this result.
13069
+ *
13070
+ * 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.
13071
+ */
13072
+ extraction_event_id?: number;
13073
+ is_stale: boolean;
13074
+ };
11776
13075
  /**
11777
13076
  * @description The possible results of a single test on a Truepic (blurriness, geo, ris, etc.)
11778
13077
  * @enum {string}
11779
13078
  */
11780
13079
  TestResult: "P" | "W" | "F" | "U" | "N";
13080
+ /**
13081
+ * @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.
13082
+ *
13083
+ * 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.
13084
+ *
13085
+ * 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.
13086
+ *
13087
+ * For a run's own progress, read `ai_analysis_test.attempt.state`.
13088
+ *
13089
+ * 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.
13090
+ * @enum {string}
13091
+ */
13092
+ TestResultsType: "test" | "ordinary";
13093
+ /** @enum {string} */
13094
+ TestUnavailableReasonValue: "inspection_not_ready_for_review" | "inspection_type_not_test" | "configuration_missing";
11781
13095
  TextMatchingExpectedValues: {
11782
13096
  /**
11783
13097
  * @description The text matching set to compare against.
@@ -12063,6 +13377,11 @@ export interface components {
12063
13377
  * @example 3.0.0
12064
13378
  */
12065
13379
  api_version: string;
13380
+ /**
13381
+ * @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.
13382
+ * @example announcement_internal_name_taken
13383
+ */
13384
+ error_code?: string;
12066
13385
  /**
12067
13386
  * @description The human readable-status of the response
12068
13387
  * @example Success
@@ -12083,6 +13402,11 @@ export interface components {
12083
13402
  };
12084
13403
  /** @description Request Body for PUT /inspection-types/{inspectionTypeId} */
12085
13404
  UpdateInspectionTypeBody: {
13405
+ /**
13406
+ * @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.
13407
+ * @example test
13408
+ */
13409
+ ai_analysis_lifecycle?: components["schemas"]["AIAnalysisLifecycleValue"];
12086
13410
  /**
12087
13411
  * @description the id of the user who created this inspection type. References `users.id`
12088
13412
  * @example 2343
@@ -12214,6 +13538,11 @@ export interface components {
12214
13538
  */
12215
13539
  api_version: string;
12216
13540
  data: components["schemas"]["OrganizationEnabledFeature"][];
13541
+ /**
13542
+ * @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.
13543
+ * @example announcement_internal_name_taken
13544
+ */
13545
+ error_code?: string;
12217
13546
  /**
12218
13547
  * @description The human readable-status of the response
12219
13548
  * @example Success
@@ -12296,6 +13625,11 @@ export interface components {
12296
13625
  * @example 3.0.0
12297
13626
  */
12298
13627
  api_version: string;
13628
+ /**
13629
+ * @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.
13630
+ * @example announcement_internal_name_taken
13631
+ */
13632
+ error_code?: string;
12299
13633
  /**
12300
13634
  * @description The human readable-status of the response
12301
13635
  * @example Success
@@ -12507,6 +13841,11 @@ export interface components {
12507
13841
  /** @description URI of the page or document the model relied on. One URI per source — multiple supporting URIs become multiple `web_lookup` entries. */
12508
13842
  uri: string;
12509
13843
  };
13844
+ /**
13845
+ * @description An event an outbound Vision webhook can be subscribed to via `enabled_events`.
13846
+ * @enum {string}
13847
+ */
13848
+ 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
13849
  /**
12511
13850
  * @description How Vision presents the client credentials on the token request.
12512
13851
  *
@@ -12715,6 +14054,29 @@ export interface components {
12715
14054
  };
12716
14055
  };
12717
14056
  responses: {
14057
+ /** @description The operation was refused. `code` is stable and intended for client logic; `details` depends on it. */
14058
+ AIAnalysisTestModeConflict: {
14059
+ headers: {
14060
+ [name: string]: unknown;
14061
+ };
14062
+ content: {
14063
+ /**
14064
+ * @example {
14065
+ * "error": {
14066
+ * "code": "test_run_in_progress",
14067
+ * "message": "A test is already running for this inspection.",
14068
+ * "details": {
14069
+ * "attempt": {
14070
+ * "id": 4711,
14071
+ * "state": "running"
14072
+ * }
14073
+ * }
14074
+ * }
14075
+ * }
14076
+ */
14077
+ "application/json": components["schemas"]["AIAnalysisTestModeErrorBody"];
14078
+ };
14079
+ };
12718
14080
  /** @description The request body couldn't be parsed. */
12719
14081
  ErrorBadRequest: {
12720
14082
  headers: {