@truepic/vision-api-types 3.86.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 +1602 -105
  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,113 +3545,572 @@ export interface components {
3404
3545
  photo_id?: number;
3405
3546
  test_key: string;
3406
3547
  };
3407
- /** @description One entry per model call in audit_json arrays on result tables. */
3408
- AuditEntry: {
3409
- /** @description ISO 8601 timestamp when this model call completed. */
3410
- completed_at: string;
3411
- /** @description Raw provider-side grounding metadata captured when a provider tool fired during this query (e.g. Gemini `google_search` / `url_context`, OpenAI `web_search`, per VISION-1850). Persisted verbatim — operators reviewing a flagged inspection need the full citation chain the provider returned, not just whatever the model summarized into the `sources[]` array. Absent when no provider tool fired. */
3412
- grounding_metadata?: {
3413
- [key: string]: unknown;
3414
- };
3415
- /** @description Discriminates this per-model-call entry from other audit_json entry shapes (e.g. `SuppressedExtractionAuditEntry`). Optional on read so rows persisted before this field existed validate; written going forward by `buildAuditFields`. Nothing branches on it today — it's a forward-looking discriminator only. */
3416
- kind?: string;
3417
- model_name: string;
3418
- prompt_id: number;
3419
- query_time_ms: number;
3420
- /** @description Model's free-form reasoning text alongside its terminal tool call (VISION-2075). Gemini 3.x preview surfaces a structured chain-of-thought as `text` parts that capture observations, source evaluation, and self-checks — much richer than the one-sentence `reasoning` field the model writes into its own output, and the only audit-time record of rejected first-attempt content when a retry succeeds. Absent on queriers that don't yet populate it. */
3421
- reasoning_text?: string;
3422
- /** @description Provider-reported reason the model stopped generating (VISION-2023). Surfaces truncation (`max_tokens`) and policy declines (`refusal`) per step/model so observability can spot them without grepping logs. Provider-specific values: Anthropic emits `end_turn`, `tool_use`, `max_tokens`, `refusal`, `pause_turn`; OpenAI emits `completed`, `incomplete`; Gemini emits raw `STOP`, `MAX_TOKENS`, etc. Absent on queriers that don't yet populate it. */
3423
- stop_reason?: string;
3424
- tokens: components["schemas"]["AuditEntryTokens"];
3425
- /** @description Per-tool-call audit records for any non-terminal tool invocations the model issued during this query (VISION-1965). One entry per invocation, in invocation order; shape is the tool's own `auditRecord` field from its `PipelineToolResult`. Absent / empty when the query didn't use any non-terminal tools. */
3426
- tool_calls?: {
3427
- [key: string]: unknown;
3428
- }[];
3429
- total_cost_usd: number;
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;
3430
3560
  };
3431
- AuditEntryTokens: {
3432
- cached?: number;
3433
- input: number;
3434
- output: number;
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;
3435
3585
  };
3436
3586
  /**
3437
- * @description One entry in ai_inspection_item_field_results.candidate_values. Populated when status='conflict'; never deduplicated.
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.
3438
3588
  *
3439
- * `value` is nullable: when a field disappears across runs (found in a prior run, `not_captured` in a later one), the null candidate represents the "missing on this side" vote so the comparison UI can render both outcomes against each other. (Appearance — `not_captured` then `found` — no longer produces a conflict or candidate; see VISION-2054.)
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.
3440
3590
  */
3441
- CandidateValue: {
3442
- confidence: number;
3443
- reasoning: string;
3444
- sources: components["schemas"]["Source"][];
3445
- value: string | string[] | unknown;
3446
- };
3447
- /** @description The request body for PUT /inspections/{inspectionId}/inspection-type */
3448
- ChangeInspectionTypeBody: {
3591
+ AnnouncementAudiencePreviewProps: {
3449
3592
  /**
3450
- * @description The id of the inspection type this inspection is for.
3451
- * @example 12
3593
+ * @description Whether the audience starts global or is narrowed to industries. Defaults to `global`.
3594
+ * @example industries
3452
3595
  */
3453
- inspection_type_id: number;
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[];
3454
3617
  };
3455
- /** @description One entry in ai_inspection_item_additional_details_results.considerations_observations. */
3456
- ConsiderationsObservationEntry: {
3457
- confidence: number;
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
+ */
3458
3649
  id: number;
3459
- /** @description id from ai_inspection_item_results (same event); null when attribution is ambiguous. */
3460
- item_id: number | null;
3461
- observation: string;
3462
- sources: components["schemas"]["Source"][];
3463
- };
3464
- ContentAnalysisDetails: {
3465
3650
  /**
3466
- * @description The expected result of the content analysis test. Will be an object specifying a min and mix on the vehicle odometer for ODOMETER tests. Will be a string representing the expected VIN number on the vehicle for VIN tests. Will be a string representing the expected DOT TIN on the vehicle tire for DOT TIN tests.
3467
- * @example DG1FGA21D4TD173601
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
+ * ]
3468
3656
  */
3469
- expected?: components["schemas"]["ContentAnalysisExpectedValue"];
3657
+ industry_names: string[];
3470
3658
  /**
3471
- * @description Whether or not an `expected` criteria needs to be entered at the time the inspection is sent.
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.
3472
3665
  * @example true
3473
3666
  */
3474
- expected_required?: boolean;
3667
+ is_draft: boolean;
3475
3668
  /**
3476
- * @description The type of the content analysis test.
3477
- * @example VIN
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
3478
3671
  */
3479
- type: components["schemas"]["ContentAnalysisType"];
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;
3480
3709
  };
3481
- ContentAnalysisExpectedValue: string | unknown | components["schemas"]["OdometerExpectedValue"] | components["schemas"]["TextMatchingExpectedValues"] | components["schemas"]["CustomFieldMatchingExpectedValues"];
3482
- ContentAnalysisResultDetails: {
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: {
3483
3716
  /**
3484
- * @description The expected result of the content analysis test. Will be an object specifying a min and mix on the vehicle odometer for ODOMETER tests. Will be a string representing the expected VIN number on the vehicle for VIN tests. Will be a string representing the expected DOT TIN on the vehicle tire for DOT TIN tests.
3485
- * @example DG1FGA21D4TD173601
3717
+ * @description The author-set display text for the additional link.
3718
+ * @example Learn more
3486
3719
  */
3487
- expected?: components["schemas"]["ContentAnalysisExpectedValue"];
3720
+ additional_link_label?: string | null;
3488
3721
  /**
3489
- * @description Whether or not an `expected` criteria needs to be entered at the time the inspection is sent.
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.
3490
3778
  * @example true
3491
3779
  */
3492
- expected_required?: boolean;
3493
- /** @description The result of the content analysis test. Will be a number representing the number on the vehicle odometer for ODOMETER tests. Will be a string representing the VIN number on the vehicle for VIN tests. Will be a string representing the DOT TIN on the vehicle tire for DOT TIN tests. Will be a 2D array of matched strings per each text matching set for TEXT_MATCHING tests. Will be an array of matched strings for CUSTOM_FIELD_MATCHING tests. */
3494
- result: number | string | unknown | string[][] | string[];
3495
- /** @description Additional detailed result data, depending on the content analysis type */
3496
- result_details?: {
3497
- /** @description Decoded components */
3498
- components: {
3499
- /** @description Check digit validation */
3500
- checkDigit?: {
3501
- /** @description Actual check digit from the VIN */
3502
- actual: string;
3503
- /** @description Expected check digit based on calculation */
3504
- expected?: string;
3505
- /** @description Whether the check digit is valid */
3506
- isValid: boolean;
3507
- /** @description Position in the VIN (typically 9) */
3508
- position: number;
3509
- };
3510
- /** @description Engine specifications */
3511
- engine?: {
3512
- /** @description Number of cylinders */
3513
- cylinders?: string;
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";
4007
+ /** @description One entry per model call in audit_json arrays on result tables. */
4008
+ AuditEntry: {
4009
+ /** @description ISO 8601 timestamp when this model call completed. */
4010
+ completed_at: string;
4011
+ /** @description Raw provider-side grounding metadata captured when a provider tool fired during this query (e.g. Gemini `google_search` / `url_context`, OpenAI `web_search`, per VISION-1850). Persisted verbatim — operators reviewing a flagged inspection need the full citation chain the provider returned, not just whatever the model summarized into the `sources[]` array. Absent when no provider tool fired. */
4012
+ grounding_metadata?: {
4013
+ [key: string]: unknown;
4014
+ };
4015
+ /** @description Discriminates this per-model-call entry from other audit_json entry shapes (e.g. `SuppressedExtractionAuditEntry`). Optional on read so rows persisted before this field existed validate; written going forward by `buildAuditFields`. Nothing branches on it today — it's a forward-looking discriminator only. */
4016
+ kind?: string;
4017
+ model_name: string;
4018
+ prompt_id: number;
4019
+ query_time_ms: number;
4020
+ /** @description Model's free-form reasoning text alongside its terminal tool call (VISION-2075). Gemini 3.x preview surfaces a structured chain-of-thought as `text` parts that capture observations, source evaluation, and self-checks — much richer than the one-sentence `reasoning` field the model writes into its own output, and the only audit-time record of rejected first-attempt content when a retry succeeds. Absent on queriers that don't yet populate it. */
4021
+ reasoning_text?: string;
4022
+ /** @description Provider-reported reason the model stopped generating (VISION-2023). Surfaces truncation (`max_tokens`) and policy declines (`refusal`) per step/model so observability can spot them without grepping logs. Provider-specific values: Anthropic emits `end_turn`, `tool_use`, `max_tokens`, `refusal`, `pause_turn`; OpenAI emits `completed`, `incomplete`; Gemini emits raw `STOP`, `MAX_TOKENS`, etc. Absent on queriers that don't yet populate it. */
4023
+ stop_reason?: string;
4024
+ tokens: components["schemas"]["AuditEntryTokens"];
4025
+ /** @description Per-tool-call audit records for any non-terminal tool invocations the model issued during this query (VISION-1965). One entry per invocation, in invocation order; shape is the tool's own `auditRecord` field from its `PipelineToolResult`. Absent / empty when the query didn't use any non-terminal tools. */
4026
+ tool_calls?: {
4027
+ [key: string]: unknown;
4028
+ }[];
4029
+ total_cost_usd: number;
4030
+ };
4031
+ AuditEntryTokens: {
4032
+ cached?: number;
4033
+ input: number;
4034
+ output: number;
4035
+ };
4036
+ /**
4037
+ * @description One entry in ai_inspection_item_field_results.candidate_values. Populated when status='conflict'; never deduplicated.
4038
+ *
4039
+ * `value` is nullable: when a field disappears across runs (found in a prior run, `not_captured` in a later one), the null candidate represents the "missing on this side" vote so the comparison UI can render both outcomes against each other. (Appearance — `not_captured` then `found` — no longer produces a conflict or candidate; see VISION-2054.)
4040
+ */
4041
+ CandidateValue: {
4042
+ confidence: number;
4043
+ reasoning: string;
4044
+ sources: components["schemas"]["Source"][];
4045
+ value: string | string[] | unknown;
4046
+ };
4047
+ /** @description The request body for PUT /inspections/{inspectionId}/inspection-type */
4048
+ ChangeInspectionTypeBody: {
4049
+ /**
4050
+ * @description The id of the inspection type this inspection is for.
4051
+ * @example 12
4052
+ */
4053
+ inspection_type_id: number;
4054
+ };
4055
+ /** @description One entry in ai_inspection_item_additional_details_results.considerations_observations. */
4056
+ ConsiderationsObservationEntry: {
4057
+ confidence: number;
4058
+ id: number;
4059
+ /** @description id from ai_inspection_item_results (same event); null when attribution is ambiguous. */
4060
+ item_id: number | null;
4061
+ observation: string;
4062
+ sources: components["schemas"]["Source"][];
4063
+ };
4064
+ ContentAnalysisDetails: {
4065
+ /**
4066
+ * @description The expected result of the content analysis test. Will be an object specifying a min and mix on the vehicle odometer for ODOMETER tests. Will be a string representing the expected VIN number on the vehicle for VIN tests. Will be a string representing the expected DOT TIN on the vehicle tire for DOT TIN tests.
4067
+ * @example DG1FGA21D4TD173601
4068
+ */
4069
+ expected?: components["schemas"]["ContentAnalysisExpectedValue"];
4070
+ /**
4071
+ * @description Whether or not an `expected` criteria needs to be entered at the time the inspection is sent.
4072
+ * @example true
4073
+ */
4074
+ expected_required?: boolean;
4075
+ /**
4076
+ * @description The type of the content analysis test.
4077
+ * @example VIN
4078
+ */
4079
+ type: components["schemas"]["ContentAnalysisType"];
4080
+ };
4081
+ ContentAnalysisExpectedValue: string | unknown | components["schemas"]["OdometerExpectedValue"] | components["schemas"]["TextMatchingExpectedValues"] | components["schemas"]["CustomFieldMatchingExpectedValues"];
4082
+ ContentAnalysisResultDetails: {
4083
+ /**
4084
+ * @description The expected result of the content analysis test. Will be an object specifying a min and mix on the vehicle odometer for ODOMETER tests. Will be a string representing the expected VIN number on the vehicle for VIN tests. Will be a string representing the expected DOT TIN on the vehicle tire for DOT TIN tests.
4085
+ * @example DG1FGA21D4TD173601
4086
+ */
4087
+ expected?: components["schemas"]["ContentAnalysisExpectedValue"];
4088
+ /**
4089
+ * @description Whether or not an `expected` criteria needs to be entered at the time the inspection is sent.
4090
+ * @example true
4091
+ */
4092
+ expected_required?: boolean;
4093
+ /** @description The result of the content analysis test. Will be a number representing the number on the vehicle odometer for ODOMETER tests. Will be a string representing the VIN number on the vehicle for VIN tests. Will be a string representing the DOT TIN on the vehicle tire for DOT TIN tests. Will be a 2D array of matched strings per each text matching set for TEXT_MATCHING tests. Will be an array of matched strings for CUSTOM_FIELD_MATCHING tests. */
4094
+ result: number | string | unknown | string[][] | string[];
4095
+ /** @description Additional detailed result data, depending on the content analysis type */
4096
+ result_details?: {
4097
+ /** @description Decoded components */
4098
+ components: {
4099
+ /** @description Check digit validation */
4100
+ checkDigit?: {
4101
+ /** @description Actual check digit from the VIN */
4102
+ actual: string;
4103
+ /** @description Expected check digit based on calculation */
4104
+ expected?: string;
4105
+ /** @description Whether the check digit is valid */
4106
+ isValid: boolean;
4107
+ /** @description Position in the VIN (typically 9) */
4108
+ position: number;
4109
+ };
4110
+ /** @description Engine specifications */
4111
+ engine?: {
4112
+ /** @description Number of cylinders */
4113
+ cylinders?: string;
3514
4114
  /** @description Engine displacement in liters */
3515
4115
  displacement?: string;
3516
4116
  /** @description Fuel type */
@@ -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
@@ -4466,7 +5091,7 @@ export interface components {
4466
5091
  /** @enum {string} */
4467
5092
  DeviceFlagType: "rooted_device" | "spoofed_location" | "falsified_time" | "incorrect_location" | "picture_of_photo" | "bad_photo" | "deleted_photos" | "bad_answer" | "other";
4468
5093
  /** @enum {string} */
4469
- DeviceValidationStatus: "VALID" | "REQUEST_ID_MISMATCH" | "REQUEST_ID_MISSING" | "FETCH_FROM_FINGERPRINT_FAILED" | "TIMESTAMP_TOO_FAR_IN_PAST" | "TIMESTAMP_TOO_FAR_IN_FUTURE" | "TIMESTAMP_MISSING" | "TIMESTAMP_INVALID" | "NO_FINGERPRINT_DATA" | "INVALID_FINGERPRINT_DATA" | "DECRYPT_FINGERPRINT_FAIL" | "FINGERPRINT_CONFIDENCE_LOW";
5094
+ DeviceValidationStatus: "VALID" | "REQUEST_ID_MISMATCH" | "REQUEST_ID_MISSING" | "FETCH_FROM_FINGERPRINT_FAILED" | "TIMESTAMP_TOO_FAR_IN_PAST" | "TIMESTAMP_TOO_FAR_IN_FUTURE" | "TIMESTAMP_MISSING" | "TIMESTAMP_INVALID" | "NO_FINGERPRINT_DATA" | "FINGERPRINT_NOT_COLLECTED" | "FINGERPRINT_SKIPPED" | "FINGERPRINT_NO_API_KEY" | "FINGERPRINT_NO_INSPECTION_ID" | "FINGERPRINT_BLOCKED" | "FINGERPRINT_REQUEST_FAILED" | "INVALID_FINGERPRINT_DATA" | "DECRYPT_FINGERPRINT_FAIL" | "FINGERPRINT_CONFIDENCE_LOW";
4470
5095
  DiscrepanciesOutputParams: {
4471
5096
  issue_description: string;
4472
5097
  related_item_ids: number[];
@@ -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
@@ -5698,6 +6526,11 @@ export interface components {
5698
6526
  * @example 3.0.0
5699
6527
  */
5700
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;
5701
6534
  /**
5702
6535
  * @description The human readable-status of the response
5703
6536
  * @example Success
@@ -5710,6 +6543,39 @@ export interface components {
5710
6543
  response_code: number;
5711
6544
  result: components["schemas"]["Operation"];
5712
6545
  };
6546
+ /** @description The response body for GET /announcements */
6547
+ GetOrganizationAnnouncementsResult: {
6548
+ /**
6549
+ * @description The current version number of the Vision API
6550
+ * @example 3.0.0
6551
+ */
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;
6558
+ /**
6559
+ * @description The human readable-status of the response
6560
+ * @example Success
6561
+ */
6562
+ message: string;
6563
+ /**
6564
+ * @description The HTTP status code of the response
6565
+ * @example 200
6566
+ */
6567
+ response_code: number;
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
+ };
6578
+ };
5713
6579
  /** @description The response body for GET /inspections/bearer/support */
5714
6580
  GetSupportByBearerResult: {
5715
6581
  /**
@@ -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
  /**
@@ -6072,6 +7006,13 @@ export interface components {
6072
7006
  * @example 2020-05-01T21:44:40.000Z
6073
7007
  */
6074
7008
  updated_at: string;
7009
+ /** @description The use case assigned to this inspection type (populated for super admins only). */
7010
+ use_case?: components["schemas"]["UseCase"];
7011
+ /**
7012
+ * @description The use case assigned to this inspection type by a super admin. References `use_cases.id`.
7013
+ * @default null
7014
+ */
7015
+ use_case_id: number | null;
6075
7016
  /**
6076
7017
  * @description When true, there is only one name for the user to fill out rather than a separate first name and last name field
6077
7018
  * @example true
@@ -6257,6 +7198,11 @@ export interface components {
6257
7198
  * @example 3.0.0
6258
7199
  */
6259
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;
6260
7206
  /**
6261
7207
  * @description The human readable-status of the response
6262
7208
  * @example Success
@@ -6275,6 +7221,11 @@ export interface components {
6275
7221
  * @example 3.0.0
6276
7222
  */
6277
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;
6278
7229
  /**
6279
7230
  * @description The human readable-status of the response
6280
7231
  * @example Success
@@ -6309,6 +7260,11 @@ export interface components {
6309
7260
  * @example 3.0.0
6310
7261
  */
6311
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;
6312
7268
  /**
6313
7269
  * @description The human readable-status of the response
6314
7270
  * @example Success
@@ -6343,6 +7299,11 @@ export interface components {
6343
7299
  * @example 3.0.0
6344
7300
  */
6345
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;
6346
7307
  /**
6347
7308
  * @description The human readable-status of the response
6348
7309
  * @example Success
@@ -6361,6 +7322,11 @@ export interface components {
6361
7322
  * @example 3.0.0
6362
7323
  */
6363
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;
6364
7330
  /**
6365
7331
  * @description The human readable-status of the response
6366
7332
  * @example Success
@@ -6395,6 +7361,11 @@ export interface components {
6395
7361
  * @example 3.0.0
6396
7362
  */
6397
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;
6398
7369
  /**
6399
7370
  * @description The human readable-status of the response
6400
7371
  * @example Success
@@ -6430,6 +7401,11 @@ export interface components {
6430
7401
  * @example 3.0.0
6431
7402
  */
6432
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;
6433
7409
  /**
6434
7410
  * @description The human readable-status of the response
6435
7411
  * @example Success
@@ -6465,6 +7441,11 @@ export interface components {
6465
7441
  * @example 3.0.0
6466
7442
  */
6467
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;
6468
7449
  /**
6469
7450
  * @description The human readable-status of the response
6470
7451
  * @example Success
@@ -6484,6 +7465,11 @@ export interface components {
6484
7465
  * @example 3.0.0
6485
7466
  */
6486
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;
6487
7473
  /**
6488
7474
  * @description The human readable-status of the response
6489
7475
  * @example Success
@@ -6506,6 +7492,11 @@ export interface components {
6506
7492
  * @example 3.0.0
6507
7493
  */
6508
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;
6509
7500
  /**
6510
7501
  * @description The human readable-status of the response
6511
7502
  * @example Success
@@ -6540,6 +7531,11 @@ export interface components {
6540
7531
  * @example 3.0.0
6541
7532
  */
6542
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;
6543
7539
  /**
6544
7540
  * @description The human readable-status of the response
6545
7541
  * @example Success
@@ -6557,7 +7553,12 @@ export interface components {
6557
7553
  * @description The current version number of the Vision API
6558
7554
  * @example 3.0.0
6559
7555
  */
6560
- api_version: string;
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;
6561
7562
  /**
6562
7563
  * @description The human readable-status of the response
6563
7564
  * @example Success
@@ -6576,6 +7577,11 @@ export interface components {
6576
7577
  * @example 3.0.0
6577
7578
  */
6578
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;
6579
7585
  /**
6580
7586
  * @description The human readable-status of the response
6581
7587
  * @example Success
@@ -7387,6 +8393,12 @@ export interface components {
7387
8393
  * @example P
7388
8394
  */
7389
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";
7390
8402
  /**
7391
8403
  * @description The status of a capture integrity test on this Truepic.
7392
8404
  * @example P
@@ -7742,6 +8754,11 @@ export interface components {
7742
8754
  };
7743
8755
  /** @description The core resource representing an inspection request */
7744
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"];
7745
8762
  /**
7746
8763
  * Format: date-time
7747
8764
  * @description The date/time the resource was created
@@ -7814,10 +8831,10 @@ export interface components {
7814
8831
  */
7815
8832
  name: string;
7816
8833
  /**
7817
- * @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.
7818
8835
  * @example 14
7819
8836
  */
7820
- organization_id: number;
8837
+ organization_id: number | null;
7821
8838
  /**
7822
8839
  * @description The id of the outcome set that is used by this inspection type. References `outcome_sets.id`
7823
8840
  * @example 539
@@ -7835,6 +8852,11 @@ export interface components {
7835
8852
  * @example 2020-05-01T21:44:40.000Z
7836
8853
  */
7837
8854
  updated_at: string;
8855
+ /**
8856
+ * @description The use case assigned to this inspection type by a super admin. References `use_cases.id`.
8857
+ * @default null
8858
+ */
8859
+ use_case_id: number | null;
7838
8860
  /**
7839
8861
  * @description When true, there is only one name for the user to fill out rather than a separate first name and last name field
7840
8862
  * @example true
@@ -7842,6 +8864,11 @@ export interface components {
7842
8864
  use_single_name_field: boolean;
7843
8865
  };
7844
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"];
7845
8872
  /**
7846
8873
  * Format: date-time
7847
8874
  * @description The date/time the resource was created
@@ -8589,6 +9616,68 @@ export interface components {
8589
9616
  */
8590
9617
  updated_at: string;
8591
9618
  };
9619
+ /**
9620
+ * @description Evidence about the device taking an action, collected by the inspection app and recorded against the resulting activity log entry.
9621
+ *
9622
+ * Sent as the `metadata` property of the request body, with `fp.request_id` and `fp.sealed_result` always sent together. Endpoints without a request body instead accept the Fingerprint request ID on its own, via the `truepic-fp-request-id` header — one or the other, never both.
9623
+ */
9624
+ Metadata: {
9625
+ /** @description The Fingerprint identification result for the device. */
9626
+ fp?: {
9627
+ /**
9628
+ * @description The ID of the Fingerprint request the sealed result was issued for.
9629
+ * @example 1712345678901.AbCdEf
9630
+ */
9631
+ request_id: string;
9632
+ /** @description The sealed (encrypted) Fingerprint identification result, as issued by the Fingerprint client. Opaque to the caller. */
9633
+ sealed_result: string;
9634
+ };
9635
+ /**
9636
+ * @description The reason the client couldn't collect Fingerprint data, sent instead of `fp`. Known values are `skipped`, `no_api_key`, `no_inspection_id`, `blocked`, and `request_failed`; anything else is recorded as if no reason was sent. Endpoints without a request body instead accept it via the `truepic-fp-reason` header.
9637
+ * @example request_failed
9638
+ */
9639
+ fp_reason?: string;
9640
+ /** @description The location the device reported when the action was taken. */
9641
+ gps?: {
9642
+ /**
9643
+ * @description The radius of uncertainty around the location, in meters.
9644
+ * @example 5
9645
+ */
9646
+ accuracy: number;
9647
+ /**
9648
+ * @description The altitude of the location, in meters above sea level.
9649
+ * @example 17
9650
+ */
9651
+ altitude: number;
9652
+ /**
9653
+ * @description The latitude of the location, in degrees.
9654
+ * @example 43.0502488
9655
+ */
9656
+ latitude: number;
9657
+ /**
9658
+ * @description The longitude of the location, in degrees.
9659
+ * @example -77.5873941
9660
+ */
9661
+ longitude: number;
9662
+ /**
9663
+ * @description The reason the location is considered spoofed. `0` means the location is not spoofed.
9664
+ * @example 0
9665
+ */
9666
+ reason: number;
9667
+ /**
9668
+ * @description Where the location came from. `system` is the operating system and is most typical, `accessory` is a connected device such as Apple CarPlay, and `software` means it was mocked or simulated.
9669
+ * @example system
9670
+ * @enum {string|null}
9671
+ */
9672
+ source?: "accessory" | "software" | "system" | null;
9673
+ /**
9674
+ * Format: datetime
9675
+ * @description When the device reported the location.
9676
+ * @example 2025-04-14T12:05:51.007Z
9677
+ */
9678
+ timestamp: string;
9679
+ };
9680
+ };
8592
9681
  /** @enum {string} */
8593
9682
  ObjectDetectionAutomotiveObject: "tire" | "vin_plate" | "dashboard" | "license_plate" | "odometer" | "document";
8594
9683
  /**
@@ -8725,6 +9814,11 @@ export interface components {
8725
9814
  * @example 1413
8726
9815
  */
8727
9816
  created_by_user_id: number;
9817
+ /**
9818
+ * @description The default use case assigned to this organization by a super admin.
9819
+ * @default null
9820
+ */
9821
+ default_use_case_id: number | null;
8728
9822
  /**
8729
9823
  * @description The id of the resource.
8730
9824
  * @example 1843
@@ -8759,6 +9853,112 @@ export interface components {
8759
9853
  */
8760
9854
  updated_at: string;
8761
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
+ };
8762
9962
  /** @description A feature that an organization may have enabled. */
8763
9963
  OrganizationEnabledFeature: {
8764
9964
  /**
@@ -8810,7 +10010,7 @@ export interface components {
8810
10010
  updated_by_user_id: number | null;
8811
10011
  };
8812
10012
  /** @enum {string} */
8813
- 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";
8814
10014
  /** @description A possible outcome for an inspection */
8815
10015
  Outcome: {
8816
10016
  /**
@@ -9336,6 +10536,11 @@ export interface components {
9336
10536
  */
9337
10537
  include_list: boolean;
9338
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"];
9339
10544
  /**
9340
10545
  * Format: date-time
9341
10546
  * @description The date/time the resource was created
@@ -9501,10 +10706,10 @@ export interface components {
9501
10706
  */
9502
10707
  name: string;
9503
10708
  /**
9504
- * @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.
9505
10710
  * @example 14
9506
10711
  */
9507
- organization_id: number;
10712
+ organization_id: number | null;
9508
10713
  /** @description The outcome set that is used by this inspection type. */
9509
10714
  outcome_set?: components["schemas"]["OutcomeSet"];
9510
10715
  /**
@@ -9537,6 +10742,13 @@ export interface components {
9537
10742
  * @example 2020-05-01T21:44:40.000Z
9538
10743
  */
9539
10744
  updated_at: string;
10745
+ /** @description The use case assigned to this inspection type (populated for super admins only). */
10746
+ use_case?: components["schemas"]["UseCase"];
10747
+ /**
10748
+ * @description The use case assigned to this inspection type by a super admin. References `use_cases.id`.
10749
+ * @default null
10750
+ */
10751
+ use_case_id: number | null;
9540
10752
  /**
9541
10753
  * @description When true, there is only one name for the user to fill out rather than a separate first name and last name field
9542
10754
  * @example true
@@ -9780,6 +10992,57 @@ export interface components {
9780
10992
  */
9781
10993
  updated_at: string;
9782
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
+ };
9783
11046
  /** @description The response body for POST /org-asset/{assetType}/upload */
9784
11047
  PostOrgAssetResult: {
9785
11048
  /**
@@ -9787,6 +11050,11 @@ export interface components {
9787
11050
  * @example 3.0.0
9788
11051
  */
9789
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;
9790
11058
  /**
9791
11059
  * @description The human readable-status of the response
9792
11060
  * @example Success
@@ -9809,6 +11077,11 @@ export interface components {
9809
11077
  * @example 3.0.0
9810
11078
  */
9811
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;
9812
11085
  /**
9813
11086
  * @description The human readable-status of the response
9814
11087
  * @example Success
@@ -9838,6 +11111,33 @@ export interface components {
9838
11111
  data?: Record<string, never>;
9839
11112
  };
9840
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
+ };
9841
11141
  /** @description The response body for DELETE /users/{userId} */
9842
11142
  RemoveUserResult: components["schemas"]["CreateUserResult"];
9843
11143
  /** @description The generic format for Vision API responses */
@@ -9847,6 +11147,11 @@ export interface components {
9847
11147
  * @example 3.0.0
9848
11148
  */
9849
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;
9850
11155
  /**
9851
11156
  * @description The human readable-status of the response
9852
11157
  * @example Success
@@ -9962,6 +11267,11 @@ export interface components {
9962
11267
  * @example 3.0.0
9963
11268
  */
9964
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;
9965
11275
  /**
9966
11276
  * @description The human readable-status of the response
9967
11277
  * @example Success
@@ -9994,6 +11304,8 @@ export interface components {
9994
11304
  };
9995
11305
  SerializedInspection: {
9996
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"];
9997
11309
  ai_inspection_additional_details?: components["schemas"]["AIInspectionItemAdditionalDetailsResult"] | unknown;
9998
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. */
9999
11311
  ai_inspection_feedback?: components["schemas"]["AIInspectionFeedback"] | unknown;
@@ -10161,6 +11473,11 @@ export interface components {
10161
11473
  inspection_status_id: components["schemas"]["InspectionStatusId"];
10162
11474
  /** @description An inspection type with attached list and message template set data */
10163
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"];
10164
11481
  /**
10165
11482
  * Format: date-time
10166
11483
  * @description The date/time the resource was created
@@ -10326,10 +11643,10 @@ export interface components {
10326
11643
  */
10327
11644
  name: string;
10328
11645
  /**
10329
- * @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.
10330
11647
  * @example 14
10331
11648
  */
10332
- organization_id: number;
11649
+ organization_id: number | null;
10333
11650
  /** @description The outcome set that is used by this inspection type. */
10334
11651
  outcome_set?: components["schemas"]["OutcomeSet"];
10335
11652
  /**
@@ -10362,6 +11679,13 @@ export interface components {
10362
11679
  * @example 2020-05-01T21:44:40.000Z
10363
11680
  */
10364
11681
  updated_at: string;
11682
+ /** @description The use case assigned to this inspection type (populated for super admins only). */
11683
+ use_case?: components["schemas"]["UseCase"];
11684
+ /**
11685
+ * @description The use case assigned to this inspection type by a super admin. References `use_cases.id`.
11686
+ * @default null
11687
+ */
11688
+ use_case_id: number | null;
10365
11689
  /**
10366
11690
  * @description When true, there is only one name for the user to fill out rather than a separate first name and last name field
10367
11691
  * @example true
@@ -10815,6 +12139,11 @@ export interface components {
10815
12139
  * @example 3.0.0
10816
12140
  */
10817
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;
10818
12147
  /**
10819
12148
  * @description The ID of the newly created resource
10820
12149
  * @example 5
@@ -11280,6 +12609,16 @@ export interface components {
11280
12609
  * }
11281
12610
  */
11282
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;
11283
12622
  /**
11284
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.
11285
12624
  * @example false
@@ -11351,6 +12690,16 @@ export interface components {
11351
12690
  * @example 2023-06-01 17:12:20.097233+00
11352
12691
  */
11353
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;
11354
12703
  /**
11355
12704
  * @description Whether or not the webhook has an OAuth `client_secret` stored.
11356
12705
  * @example true
@@ -11553,6 +12902,16 @@ export interface components {
11553
12902
  * }
11554
12903
  */
11555
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;
11556
12915
  /**
11557
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.
11558
12917
  * @example false
@@ -11619,6 +12978,16 @@ export interface components {
11619
12978
  * @example 2023-06-01 17:12:20.097233+00
11620
12979
  */
11621
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;
11622
12991
  /**
11623
12992
  * @description Whether or not the webhook has an OAuth `client_secret` stored.
11624
12993
  * @example true
@@ -11680,11 +13049,49 @@ export interface components {
11680
13049
  */
11681
13050
  vision_api_version: components["schemas"]["VisionAPIVersion"];
11682
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
+ };
11683
13075
  /**
11684
13076
  * @description The possible results of a single test on a Truepic (blurriness, geo, ris, etc.)
11685
13077
  * @enum {string}
11686
13078
  */
11687
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";
11688
13095
  TextMatchingExpectedValues: {
11689
13096
  /**
11690
13097
  * @description The text matching set to compare against.
@@ -11970,6 +13377,11 @@ export interface components {
11970
13377
  * @example 3.0.0
11971
13378
  */
11972
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;
11973
13385
  /**
11974
13386
  * @description The human readable-status of the response
11975
13387
  * @example Success
@@ -11990,6 +13402,11 @@ export interface components {
11990
13402
  };
11991
13403
  /** @description Request Body for PUT /inspection-types/{inspectionTypeId} */
11992
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"];
11993
13410
  /**
11994
13411
  * @description the id of the user who created this inspection type. References `users.id`
11995
13412
  * @example 2343
@@ -12121,6 +13538,11 @@ export interface components {
12121
13538
  */
12122
13539
  api_version: string;
12123
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;
12124
13546
  /**
12125
13547
  * @description The human readable-status of the response
12126
13548
  * @example Success
@@ -12203,6 +13625,11 @@ export interface components {
12203
13625
  * @example 3.0.0
12204
13626
  */
12205
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;
12206
13633
  /**
12207
13634
  * @description The human readable-status of the response
12208
13635
  * @example Success
@@ -12284,6 +13711,36 @@ export interface components {
12284
13711
  */
12285
13712
  team_id?: number;
12286
13713
  };
13714
+ /** @description A seeded use case belonging to an industry. */
13715
+ UseCase: {
13716
+ /**
13717
+ * Format: date-time
13718
+ * @description The date/time the resource was created
13719
+ * @example 2020-05-01T21:44:40.000Z
13720
+ */
13721
+ created_at: string;
13722
+ /**
13723
+ * @description The id of the resource.
13724
+ * @example 1
13725
+ */
13726
+ id: number;
13727
+ /**
13728
+ * @description The id of the industry this use case belongs to.
13729
+ * @example 3
13730
+ */
13731
+ industry_id: number;
13732
+ /**
13733
+ * @description The name of the use case.
13734
+ * @example Claims Processing
13735
+ */
13736
+ name: string;
13737
+ /**
13738
+ * Format: date-time
13739
+ * @description The date/time the resource was last updated
13740
+ * @example 2020-05-01T21:44:40.000Z
13741
+ */
13742
+ updated_at: string;
13743
+ };
12287
13744
  /** @description A user of Vision. This could be a Vision website user or mobile app user. */
12288
13745
  User: {
12289
13746
  /**
@@ -12384,6 +13841,11 @@ export interface components {
12384
13841
  /** @description URI of the page or document the model relied on. One URI per source — multiple supporting URIs become multiple `web_lookup` entries. */
12385
13842
  uri: string;
12386
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";
12387
13849
  /**
12388
13850
  * @description How Vision presents the client credentials on the token request.
12389
13851
  *
@@ -12592,6 +14054,29 @@ export interface components {
12592
14054
  };
12593
14055
  };
12594
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
+ };
12595
14080
  /** @description The request body couldn't be parsed. */
12596
14081
  ErrorBadRequest: {
12597
14082
  headers: {
@@ -12704,6 +14189,18 @@ export interface components {
12704
14189
  userId: number;
12705
14190
  /** @description The unique alphanumeric identifier of the photo/video. */
12706
14191
  verificationCode: string;
14192
+ /**
14193
+ * @description The ID of the Fingerprint request identifying the device taking the action.
14194
+ *
14195
+ * Used by endpoints that have no request body to carry a `metadata` property. Recorded against the resulting activity log entry.
14196
+ */
14197
+ metadataFingerprintRequestId: string;
14198
+ /**
14199
+ * @description The reason the client could not collect Fingerprint data, sent instead of `truepic-fp-request-id`.
14200
+ *
14201
+ * Used by endpoints that have no request body to carry a `metadata` property. Recorded against the resulting activity log entry.
14202
+ */
14203
+ metadataFingerprintReason: string;
12707
14204
  /**
12708
14205
  * @description Pagination to limit the number of results returned.
12709
14206
  *