@dsptch-work/api-client 0.31.0 → 0.33.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.
@@ -189,12 +189,24 @@ export type Problem = {
189
189
  *
190
190
  * ## 409
191
191
  *
192
+ * ### already_subscribed
193
+ *
194
+ * **Already Subscribed**
195
+ *
196
+ * The user already holds this subscription, with other delivery methods than the request names. Subscribing again never changes a held subscription: delete it, then subscribe with the delivery methods you want.
197
+ *
192
198
  * ### already_terminated
193
199
  *
194
200
  * **Termination Already Scheduled**
195
201
  *
196
202
  * The resource's timeline already ends at a scheduled termination, and scheduling a second one would silently move it. Moving an end is two steps on purpose: cancel the standing termination, then schedule the one you want.
197
203
  *
204
+ * ### authorization_revoked
205
+ *
206
+ * **Authorization Revoked**
207
+ *
208
+ * The assessor grant is revoked. A revoked grant keeps its row as history and cannot be changed or revoked again. To make the user an assessor again, grant them anew.
209
+ *
198
210
  * ### import_in_progress
199
211
  *
200
212
  * **Import In Progress**
@@ -375,14 +387,20 @@ export type Problem = {
375
387
  *
376
388
  * ## 503
377
389
  *
390
+ * ### database_timeout
391
+ *
392
+ * **Database Timeout**
393
+ *
394
+ * A database statement behind the request ran past the server's time limit and was stopped before it finished. The request may be fine as sent — resend it after the `Retry-After` window, and if it keeps timing out, ask for less at once, such as a narrower filter or a smaller page.
395
+ *
378
396
  * ### write_contended
379
397
  *
380
398
  * **Write Contended**
381
399
  *
382
- * Another write to the same resource held it for longer than this request was willing to wait, so nothing was applied. The request itself is fine — resend it unchanged after the `Retry-After` window.
400
+ * Another write to the same resource held it for longer than this request was willing to wait, or collided with it, so nothing was applied. The request itself is fine — resend it unchanged after the `Retry-After` window.
383
401
  *
384
402
  */
385
- export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'malformed_body' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'forbidden_key' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_terminated' | 'import_in_progress' | 'pay_schedule_already_exists' | 'product_archived' | 'recorded_since_termination' | 'span_beyond_timeline_end' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'interval_too_wide' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error' | 'write_contended';
403
+ export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'malformed_body' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'forbidden_key' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_subscribed' | 'already_terminated' | 'authorization_revoked' | 'import_in_progress' | 'pay_schedule_already_exists' | 'product_archived' | 'recorded_since_termination' | 'span_beyond_timeline_end' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'interval_too_wide' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error' | 'database_timeout' | 'write_contended';
386
404
  export type ApiKeyScopeResponseObject = {
387
405
  resource: string;
388
406
  action: 'read' | 'create' | 'update' | 'delete';
@@ -490,6 +508,95 @@ export type DirectUploadResponseObject = {
490
508
  };
491
509
  };
492
510
  };
511
+ /**
512
+ * One assessor-registry grant for one standard. Department scope is informational. revoked_at is null while the grant is active.
513
+ */
514
+ export type CompetencyAssessorAuthorizationResponseObject = {
515
+ /**
516
+ * ID of the authorization.
517
+ */
518
+ id: string;
519
+ /**
520
+ * ID of the user who holds the grant.
521
+ */
522
+ user_id: string;
523
+ /**
524
+ * ID of the standard this grant covers.
525
+ */
526
+ competencies_standard_id: string;
527
+ /**
528
+ * ID of the department the grant is noted against; null when it is company-wide. Department does not restrict which assessments the user may touch.
529
+ */
530
+ companies_department_id: string | null;
531
+ /**
532
+ * Role of the grant: authorized_assessor collects field evidence, qualified_assessor decides assessments.
533
+ */
534
+ kind: 'authorized_assessor' | 'qualified_assessor';
535
+ /**
536
+ * ID of the user who recorded the grant.
537
+ */
538
+ granted_by_user_id: string;
539
+ /**
540
+ * When the grant was recorded.
541
+ */
542
+ granted_at: string;
543
+ /**
544
+ * When the grant was revoked; null while it is active.
545
+ */
546
+ revoked_at: string | null;
547
+ /**
548
+ * active until the grant is revoked, then revoked. The same words are filter[state] values on the list endpoint, which also accepts all.
549
+ */
550
+ state: 'active' | 'revoked';
551
+ /**
552
+ * When the authorization row was created.
553
+ */
554
+ created_at: string;
555
+ /**
556
+ * When the authorization row was last updated.
557
+ */
558
+ updated_at: string;
559
+ };
560
+ /**
561
+ * Grant an assessor role for one standard. A user key grants as its user. A company key names the grantor. An active grant of the same kind for the same user and standard is unique.
562
+ */
563
+ export type CompetencyAssessorAuthorizationParameters = {
564
+ /**
565
+ * ID of the user who receives the grant. Required.
566
+ */
567
+ user_id: string;
568
+ /**
569
+ * Role to grant: authorized_assessor or qualified_assessor. Required.
570
+ */
571
+ kind: 'authorized_assessor' | 'qualified_assessor';
572
+ /**
573
+ * ID of the standard this grant covers. Required. Changing it means revoke and regrant.
574
+ */
575
+ competencies_standard_id: string;
576
+ /**
577
+ * ID of the department the grant is noted against; optional, null to leave it company-wide. A blank ID answers 422.
578
+ */
579
+ companies_department_id?: string | null;
580
+ /**
581
+ * ID of the admin or safety manager recording the grant. Required for a company key. A user key grants as itself and must omit it.
582
+ */
583
+ granted_by_user_id?: string;
584
+ };
585
+ /**
586
+ * Update the department note on an active grant. Kind, user, standard, and grantor are fixed. A revoked grant answers 409 authorization_revoked.
587
+ */
588
+ export type CompetencyAssessorAuthorizationUpdateParameters = {
589
+ /**
590
+ * ID of the department the grant is noted against; omit to leave it unchanged, or send null to clear it. A blank ID answers 422.
591
+ */
592
+ companies_department_id?: string | null;
593
+ };
594
+ /**
595
+ * Revoke an active grant. The body takes no fields; send an empty object or no body. Revocation sets revoked_at and keeps the row; revoking it again answers 409 authorization_revoked.
596
+ */
597
+ export type CompetencyAssessorAuthorizationRevocationParameters = {
598
+ [key: string]: never;
599
+ };
493
600
  /**
494
601
  * A durable standing. The candidate passed the standard at level_sort_order. There is no level id, so the standing survives the next revision. This API does not create or update qualifications.
495
602
  */
@@ -1059,23 +1166,23 @@ export type ApprenticeshipAllocationResponseObject = {
1059
1166
  */
1060
1167
  export type ApprenticeshipAllocationCreateParameters = {
1061
1168
  /**
1062
- * Work process category to categorize the allocation under; optional, omit for an uncategorized allocation.
1169
+ * Time card to link the allocation to, scoped to the apprentice's own cards; optional, omit or send null for a standalone allocation. A blank string answers 422. Cannot be changed after creation.
1063
1170
  */
1064
- apprenticeship_work_process_category_id?: string;
1171
+ timekeeping_time_card_id?: string | null;
1065
1172
  /**
1066
- * Time card to link the allocation to, scoped to the apprentice's own cards; optional, omit for a standalone allocation. Cannot be changed after creation.
1173
+ * Work process category to categorize the allocation under; optional, omit or send null for an uncategorized allocation. A blank string answers 422.
1067
1174
  */
1068
- timekeeping_time_card_id?: string;
1175
+ apprenticeship_work_process_category_id?: string | null;
1069
1176
  /**
1070
- * Minutes of credited hours. Required, must be positive, and (when linked to a time card) cannot push the card's categorized total past its overtime-eligible minutes.
1177
+ * Minutes of credited hours, as an integer. Required, so omission answers 400; must be positive, and (when linked to a time card) cannot push the card's categorized total past its overtime-eligible minutes.
1071
1178
  */
1072
1179
  minutes: number;
1073
1180
  /**
1074
- * Free-text note on the allocation; optional.
1181
+ * Free-text note on the allocation; optional, null for none.
1075
1182
  */
1076
- description?: string;
1183
+ description?: string | null;
1077
1184
  /**
1078
- * Effective timestamp for the credited hours, as ISO 8601 with an explicit UTC offset or Z. Optional for a standalone allocation, defaulting to now; must equal the linked time card's pay-period start when one is supplied. The employer-local date must be today or earlier.
1185
+ * Effective timestamp for the credited hours, as ISO 8601 with an explicit UTC offset or Z. Optional for a standalone allocation, defaulting to now, and null is rejected; must equal the linked time card's pay-period start when one is supplied. The employer-local date must be today or earlier.
1079
1186
  */
1080
1187
  allocated_at?: string;
1081
1188
  };
@@ -1084,7 +1191,7 @@ export type ApprenticeshipAllocationCreateParameters = {
1084
1191
  */
1085
1192
  export type ApprenticeshipAllocationUpdateParameters = {
1086
1193
  /**
1087
- * Work process category to recategorize the allocation under; optional, null to make it uncategorized.
1194
+ * Work process category to recategorize the allocation under; optional, null to make it uncategorized. A blank string answers 422.
1088
1195
  */
1089
1196
  apprenticeship_work_process_category_id?: string | null;
1090
1197
  /**
@@ -1101,7 +1208,7 @@ export type ApprenticeshipAllocationUpdateParameters = {
1101
1208
  allocated_at?: string;
1102
1209
  };
1103
1210
  /**
1104
- * Enroll a user as an apprentice under an employer in a program; the employing program-employer record is derived from the enrolling company and the program in the URL path. Apprentices cannot be updated through the API, only created.
1211
+ * Enroll a user as an apprentice under an employer in a program; the employing program-employer record is derived from the enrolling company and the program in the URL path. Apprentices cannot be updated through the API, only created. Omitting a required field answers 400; a null for a non-nullable field, a blank ID, a wrong JSON type, an unlisted status, or a date that is not a YYYY-MM-DD calendar date answers 422.
1105
1212
  */
1106
1213
  export type ApprenticeshipApprenticeParameters = {
1107
1214
  /**
@@ -1138,7 +1245,7 @@ export type ApprenticeshipApprenticeParameters = {
1138
1245
  operative_end_date?: string | null;
1139
1246
  };
1140
1247
  /**
1141
- * Create an apprenticeship program sponsored by your company; the sponsor is always your company and is never taken from the request body.
1248
+ * Create an apprenticeship program sponsored by your company; the sponsor is always your company and is never taken from the request body. Omitting program_number answers 400; a null for a non-nullable field, a wrong JSON type, or an unlisted registration_agency_type answers 422.
1142
1249
  */
1143
1250
  export type ApprenticeshipProgramParameters = {
1144
1251
  /**
@@ -1163,7 +1270,7 @@ export type ApprenticeshipProgramParameters = {
1163
1270
  registration_agency_type?: 'federal' | 'regional' | null;
1164
1271
  };
1165
1272
  /**
1166
- * Update an apprenticeship program sponsored by your company. Send only the fields to change; the sponsor is fixed to your company.
1273
+ * Update an apprenticeship program sponsored by your company. Send only the fields to change; the sponsor is fixed to your company. A null for a non-nullable field, a wrong JSON type, or an unlisted registration_agency_type answers 422.
1167
1274
  */
1168
1275
  export type ApprenticeshipProgramUpdateParameters = {
1169
1276
  /**
@@ -1188,7 +1295,7 @@ export type ApprenticeshipProgramUpdateParameters = {
1188
1295
  registration_agency_type?: 'federal' | 'regional' | null;
1189
1296
  };
1190
1297
  /**
1191
- * Create an occupation (trade) within a sponsored program; the program is taken from the URL path.
1298
+ * Create an occupation (trade) within a sponsored program; the program is taken from the URL path. Omitting a required field answers 400; a null for a non-nullable field, a wrong JSON type, or an unlisted occupation_type answers 422.
1192
1299
  */
1193
1300
  export type ApprenticeshipOccupationParameters = {
1194
1301
  /**
@@ -1229,7 +1336,7 @@ export type ApprenticeshipOccupationParameters = {
1229
1336
  num_journeyworkers: number;
1230
1337
  };
1231
1338
  /**
1232
- * Update an occupation (trade) within a sponsored program. Send only the fields to change; the program is taken from the URL path.
1339
+ * Update an occupation (trade) within a sponsored program. Send only the fields to change; the program is taken from the URL path. A null for a non-nullable field, a wrong JSON type, or an unlisted occupation_type answers 422.
1233
1340
  */
1234
1341
  export type ApprenticeshipOccupationUpdateParameters = {
1235
1342
  /**
@@ -1848,6 +1955,10 @@ export type PeopleEmploymentCreateParameters = {
1848
1955
  * Request body for creating one employment boundary. effective_date is required and is interpreted at midnight in the credential company's time zone. Today and past dates must fall inside the family's latest version, before its termination; future dates retain scheduling behavior. Send at least one value to change; omitted values carry forward from the version immediately before the new boundary.
1849
1956
  */
1850
1957
  export type PeopleEmploymentScheduledChangeCreateParameters = {
1958
+ /**
1959
+ * Company-local date when the new boundary takes effect. Today and past dates must fall inside the latest version, before termination. Required.
1960
+ */
1961
+ effective_date: string;
1851
1962
  /**
1852
1963
  * How the employment is paid: hourly or salary. Omit to carry forward the preceding version.
1853
1964
  */
@@ -1896,10 +2007,6 @@ export type PeopleEmploymentScheduledChangeCreateParameters = {
1896
2007
  * Department ID in the credential company. Omit to carry forward the preceding version, or send null to clear it. A submitted value applies to this and all later versions.
1897
2008
  */
1898
2009
  companies_department_id?: string | null;
1899
- /**
1900
- * Company-local date when the new boundary takes effect. Today and past dates must fall inside the latest version, before termination. Required.
1901
- */
1902
- effective_date: string;
1903
2010
  };
1904
2011
  /**
1905
2012
  * Request body for changing values at one exact employment boundary. Today and past dates must name the latest version's start; future exact boundaries remain editable. Send only the fields to change; omitted values remain as recorded at that boundary. The boundary date cannot move.
@@ -1961,7 +2068,7 @@ export type PeopleEmploymentGenesisParameters = {
1961
2068
  /**
1962
2069
  * The timeline's new start, as a calendar date (`YYYY-MM-DD`). Required. Moving it earlier extends the first version back to it. Moving it later drops every version whose coverage ended at or before it and truncates the one spanning it, so what those versions said stops being readable. Refused with `422` when the employment has no finite start or the new start would fall at or after a scheduled termination.
1963
2070
  */
1964
- effective_date?: string;
2071
+ effective_date: string;
1965
2072
  };
1966
2073
  /**
1967
2074
  * Parameters for scheduling when an employment stint stops being valid.
@@ -2613,7 +2720,7 @@ export type PerDiemResponseObject = {
2613
2720
  /**
2614
2721
  * Whether the per diem is currently active and available to use.
2615
2722
  */
2616
- active: boolean | null;
2723
+ active: boolean;
2617
2724
  /**
2618
2725
  * IDs of the work types this per diem applies to.
2619
2726
  */
@@ -2632,84 +2739,84 @@ export type PerDiemResponseObject = {
2632
2739
  updated_at: string;
2633
2740
  };
2634
2741
  /**
2635
- * Request body for creating a per diem. name, currency, and rate_cents are required.
2742
+ * Request body for creating a per diem. Send fields in JSON; the per diem belongs to the company that owns the API key. name, currency, and rate_cents are required.
2636
2743
  */
2637
2744
  export type PerDiemParameters = {
2638
2745
  /**
2639
- * Human-readable name, e.g. "Travel Meals". Required.
2746
+ * Human-readable name, e.g. "Travel Meals". Omission answers 400; supplied null or a wrong type answers 422. Blank names fail model validation with 422.
2640
2747
  */
2641
2748
  name: string;
2642
2749
  /**
2643
- * Optional free-text notes about the per diem.
2750
+ * Optional free-text notes about the per diem; null leaves them unset. Nonstring values other than null answer 422.
2644
2751
  */
2645
2752
  description?: string | null;
2646
2753
  /**
2647
- * Allowance amount in cents, as a string (e.g. "7500" is $75.00). Required.
2754
+ * Allowance amount in cents, as a string (e.g. "7500" is $75.00). Omission answers 400; null or a JSON number answers 422.
2648
2755
  */
2649
2756
  rate_cents: string;
2650
2757
  /**
2651
- * ISO 4217 currency code, e.g. "USD". Required.
2758
+ * ISO 4217 currency code, e.g. "USD". Omission answers 400; supplied null or a wrong type answers 422.
2652
2759
  */
2653
2760
  currency: string;
2654
2761
  /**
2655
- * Whether the allowance is treated as taxable income.
2762
+ * Whether the allowance is treated as taxable income. Null or a non-boolean answers 422.
2656
2763
  */
2657
2764
  taxable?: boolean;
2658
2765
  /**
2659
- * Whether this should become the company default per diem.
2766
+ * Whether this should become the company default per diem. Non-boolean values other than null answer 422.
2660
2767
  */
2661
- default?: boolean | null;
2768
+ default?: boolean;
2662
2769
  /**
2663
- * Whether the per diem is active and available to use.
2770
+ * Whether the per diem is active and available to use. Null or a non-boolean answers 422.
2664
2771
  */
2665
- active?: boolean | null;
2772
+ active?: boolean;
2666
2773
  /**
2667
- * IDs of the work types this per diem applies to. Each must be shared or the company's own.
2774
+ * Unique nonblank IDs of the work types this per diem applies to; each must be shared or the company's own. Providing this replaces the entire set; an empty array clears it. Omit to attach none or leave the set unchanged on update. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422. An unavailable work type answers 404.
2668
2775
  */
2669
2776
  work_type_ids?: Array<string>;
2670
2777
  /**
2671
- * IDs of the timecodes this per diem applies to. Each must belong to the company.
2778
+ * Unique nonblank IDs of the timecodes this per diem applies to; each must belong to the company. Providing this replaces the entire set; an empty array clears it. Omit to attach none or leave the set unchanged on update. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422. An unavailable timecode answers 404.
2672
2779
  */
2673
2780
  timekeeping_timecode_ids?: Array<string>;
2674
2781
  };
2675
2782
  /**
2676
- * Request body for updating a per diem. Send only the fields to change.
2783
+ * Request body for updating a per diem. Send only fields to change in JSON; omitted fields remain unchanged.
2677
2784
  */
2678
2785
  export type PerDiemUpdateParameters = {
2679
2786
  /**
2680
- * Human-readable name, e.g. "Travel Meals". Omit to leave it unchanged.
2787
+ * Human-readable name, e.g. "Travel Meals"; omit to leave it unchanged. Supplied null, a wrong type, or a blank name answers 422.
2681
2788
  */
2682
2789
  name?: string;
2683
2790
  /**
2684
- * Optional free-text notes; omit to leave them unchanged, or send null to clear them.
2791
+ * Optional free-text notes; omit to leave them unchanged, or send null to clear them. Nonstring values other than null answer 422.
2685
2792
  */
2686
2793
  description?: string | null;
2687
2794
  /**
2688
- * Allowance amount in cents, as a string (e.g. "7500" is $75.00). Omit to leave it unchanged.
2795
+ * Allowance amount in cents, as a string (e.g. "7500" is $75.00); omit to leave it unchanged. Null or a JSON number answers 422.
2689
2796
  */
2690
2797
  rate_cents?: string;
2691
2798
  /**
2692
- * ISO 4217 currency code, e.g. "USD". Omit to leave it unchanged.
2799
+ * ISO 4217 currency code, e.g. "USD"; omit to leave it unchanged. Supplied null or a wrong type answers 422.
2693
2800
  */
2694
2801
  currency?: string;
2695
2802
  /**
2696
- * Whether the allowance is treated as taxable income. Omit to leave it unchanged.
2803
+ * Whether the allowance is treated as taxable income; omit to leave it unchanged. Null or a non-boolean answers 422.
2697
2804
  */
2698
2805
  taxable?: boolean;
2699
2806
  /**
2700
- * Whether this should become the company default per diem. Omit to leave it unchanged.
2807
+ * Whether this should become the company default per diem; omit to leave it unchanged. Non-boolean values other than null answer 422.
2701
2808
  */
2702
- default?: boolean | null;
2809
+ default?: boolean;
2703
2810
  /**
2704
- * Whether the per diem is active and available to use. Omit to leave it unchanged.
2811
+ * Whether the per diem is active and available to use; omit to leave it unchanged. Null or a non-boolean answers 422.
2705
2812
  */
2706
- active?: boolean | null;
2813
+ active?: boolean;
2707
2814
  /**
2708
- * Complete set of work type IDs this per diem applies to. Each must be shared or the company's own. Omit to leave it unchanged.
2815
+ * Unique nonblank IDs of the work types this per diem applies to; each must be shared or the company's own. Providing this replaces the entire set; an empty array clears it. Omit to attach none or leave the set unchanged on update. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422. An unavailable work type answers 404.
2709
2816
  */
2710
2817
  work_type_ids?: Array<string>;
2711
2818
  /**
2712
- * Complete set of timecode IDs this per diem applies to. Each must belong to the company. Omit to leave it unchanged.
2819
+ * Unique nonblank IDs of the timecodes this per diem applies to; each must belong to the company. Providing this replaces the entire set; an empty array clears it. Omit to attach none or leave the set unchanged on update. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422. An unavailable timecode answers 404.
2713
2820
  */
2714
2821
  timekeeping_timecode_ids?: Array<string>;
2715
2822
  };
@@ -3099,9 +3206,9 @@ export type TimeCardPerDiemParameters = {
3099
3206
  */
3100
3207
  approver_user_id: string;
3101
3208
  /**
3102
- * Optional ID of the catalog per diem to record; its rate, currency, and taxable flag are copied onto the entry.
3209
+ * Optional ID of the catalog per diem to record; its rate, currency, and taxable flag are copied onto the entry. Omit it or send null to record no catalog per diem, at a zero rate.
3103
3210
  */
3104
- per_diem_id?: string;
3211
+ per_diem_id?: string | null;
3105
3212
  };
3106
3213
  /**
3107
3214
  * Request body for updating a per diem recorded on a time card. Send only the fields to change; the time card comes from the URL path.
@@ -3116,9 +3223,9 @@ export type TimeCardPerDiemUpdateParameters = {
3116
3223
  */
3117
3224
  approver_user_id?: string;
3118
3225
  /**
3119
- * ID of the catalog per diem to record; its rate, currency, and taxable flag are copied onto the entry. Omit to leave it unchanged.
3226
+ * ID of the catalog per diem to record; its rate, currency, and taxable flag are copied onto the entry. Send null to remove it, which records a zero rate. Omit to leave it unchanged.
3120
3227
  */
3121
- per_diem_id?: string;
3228
+ per_diem_id?: string | null;
3122
3229
  };
3123
3230
  /**
3124
3231
  * A holiday on a pay schedule's holiday calendar — a fixed (month + day) or floating (nth weekday of a month) date that gets holiday-pay treatment when a time entry's timecode opts into holiday handling.
@@ -3430,7 +3537,7 @@ export type PayPeriodConfigHistoryVersionObject = {
3430
3537
  corrections: Array<PayPeriodConfigHistoryCorrectionObject>;
3431
3538
  };
3432
3539
  /**
3433
- * Create a holiday on a pay schedule. name, holiday_type, and month are required; mday is required for fixed holidays and wday + week for floating holidays.
3540
+ * Create a holiday on a pay schedule. name is required. Send date alone for a fixed holiday on that date, or holiday_type and month with mday (fixed) or wday + week (floating).
3434
3541
  */
3435
3542
  export type HolidayParameters = {
3436
3543
  /**
@@ -3438,17 +3545,17 @@ export type HolidayParameters = {
3438
3545
  */
3439
3546
  name: string;
3440
3547
  /**
3441
- * Calendar date (YYYY-MM-DD) the holiday falls on; optional — when omitted it is computed from month/mday/year (fixed) or month/week/wday/year (floating), and it cannot be in the past.
3548
+ * Calendar date (YYYY-MM-DD) the holiday falls on; it cannot be in the past. Sent without holiday_type, it makes a fixed holiday and sets month, mday, and year. When omitted it is computed from month/mday/year (fixed) or month/week/wday/year (floating).
3442
3549
  */
3443
3550
  date?: string;
3444
3551
  /**
3445
- * `fixed` holidays fall on a set `month` + day-of-month (`mday`); `floating` holidays are the `week`-th `wday` of the `month`.
3552
+ * `fixed` holidays fall on a set `month` + day-of-month (`mday`); `floating` holidays are the `week`-th `wday` of the `month`. Required unless `date` is sent.
3446
3553
  */
3447
- holiday_type: 'fixed' | 'floating';
3554
+ holiday_type?: 'fixed' | 'floating';
3448
3555
  /**
3449
- * Month 1-12; required for both holiday types.
3556
+ * Month 1-12; required unless `date` is sent.
3450
3557
  */
3451
- month: number;
3558
+ month?: number;
3452
3559
  /**
3453
3560
  * Day of month; required for `fixed` holidays.
3454
3561
  */
@@ -3657,7 +3764,7 @@ export type PwaCompanyUserDetailsParameters = {
3657
3764
  */
3658
3765
  city?: string | null;
3659
3766
  /**
3660
- * Home address two-letter US state code; required together with address1 when any home-address field is set.
3767
+ * Home address two-letter US state code; any other value is rejected. Required together with address1 when any home-address field is set.
3661
3768
  */
3662
3769
  state?: string | null;
3663
3770
  /**
@@ -3746,7 +3853,7 @@ export type PwaCompanyUserDetailsUpdateParameters = {
3746
3853
  */
3747
3854
  city?: string | null;
3748
3855
  /**
3749
- * Home address two-letter US state code; required together with address1 when any home-address field is set.
3856
+ * Home address two-letter US state code; any other value is rejected. Required together with address1 when any home-address field is set.
3750
3857
  */
3751
3858
  state?: string | null;
3752
3859
  /**
@@ -3856,7 +3963,7 @@ export type PwaTradeResponseObject = {
3856
3963
  */
3857
3964
  export type PwaTradeParameters = {
3858
3965
  /**
3859
- * Display name of the craft to create, e.g. "Electrician".
3966
+ * Display name of the craft to create, e.g. "Electrician". Omission answers 400; supplied null or a wrong type answers 422, and a blank name fails model validation with 422.
3860
3967
  */
3861
3968
  name: string;
3862
3969
  };
@@ -3912,22 +4019,22 @@ export type PwaTradeApprenticeshipOccupationResponseObject = {
3912
4019
  */
3913
4020
  export type PwaTradeApprenticeshipOccupationCreateParameters = {
3914
4021
  /**
3915
- * ID of the registered apprenticeship occupation to decide on. Create-only — a decision is replaced rather than re-pointed to a different occupation.
4022
+ * ID of the registered apprenticeship occupation to decide on, in a program your company employs into. An occupation outside the programs your company sponsors or employs into answers 404; one in a program it only sponsors answers 403. Create-only — a decision is replaced rather than re-pointed to a different occupation.
3916
4023
  */
3917
4024
  apprenticeship_occupation_id: string;
3918
4025
  /**
3919
- * The verdict to record; defaults to in_scope when omitted or null.
4026
+ * The verdict to record; defaults to in_scope when omitted. Null or a value outside the list answers 422.
3920
4027
  */
3921
- scope_status?: 'in_scope' | 'out_of_scope' | null;
4028
+ scope_status?: 'in_scope' | 'out_of_scope';
3922
4029
  };
3923
4030
  /**
3924
4031
  * Parameters for flipping an existing apprentice-scope decision's verdict.
3925
4032
  */
3926
4033
  export type PwaTradeApprenticeshipOccupationUpdateParameters = {
3927
4034
  /**
3928
- * The verdict to record. Null states nothing, so it leaves the decision's current verdict standing.
4035
+ * The verdict to record; omit it to leave the current verdict standing. Null or a value outside the list answers 422.
3929
4036
  */
3930
- scope_status?: 'in_scope' | 'out_of_scope' | null;
4037
+ scope_status?: 'in_scope' | 'out_of_scope';
3931
4038
  };
3932
4039
  /**
3933
4040
  * A job — the primary unit of work in DSPTCH. Workers fill its positions and track time against it; it optionally tracks Prevailing Wage / Apprenticeship (PWA) compliance and optionally belongs to a project. There is no delete endpoint — cancel or complete a job through its status instead.
@@ -4635,7 +4742,7 @@ export type UserResponseObject = {
4635
4742
  /**
4636
4743
  * How the worker is paid: hourly or salary.
4637
4744
  */
4638
- compensation_type: string | null;
4745
+ compensation_type: 'hourly' | 'salary' | null;
4639
4746
  /**
4640
4747
  * Base pay rate, formatted as a currency string in the company's currency. Present for company keys, company administrators, and the employed person, and omitted otherwise; null when authorized but unset.
4641
4748
  */
@@ -4844,7 +4951,7 @@ export type UserUpdateParameters = {
4844
4951
  */
4845
4952
  dol_apprentice_no?: string | null;
4846
4953
  /**
4847
- * Signed ID of a direct-upload blob to attach as the profile picture. Obtain it by first uploading the image to POST /api/v1/direct_uploads.
4954
+ * Signed ID of a direct-upload blob to attach as the profile picture. Obtain it by first uploading the image to POST /api/v1/direct_uploads. Omit it to keep the current picture, or send null to remove it; a blank string answers 422.
4848
4955
  */
4849
4956
  avatar_signed_id?: string | null;
4850
4957
  };
@@ -4921,15 +5028,15 @@ export type UserParameters = ({
4921
5028
  */
4922
5029
  roles?: Array<string> | null;
4923
5030
  /**
4924
- * Signed ID of a direct-upload blob to attach as the profile picture. Obtain it by first uploading the image to POST /api/v1/direct_uploads.
5031
+ * Signed ID of a direct-upload blob to attach as the profile picture. Obtain it by first uploading the image to POST /api/v1/direct_uploads. Null creates the worker without one; a blank string answers 422.
4925
5032
  */
4926
- avatar_signed_id?: string;
5033
+ avatar_signed_id?: string | null;
4927
5034
  /**
4928
- * Id of the internal user recorded as the creator of the worker's invite, and named to the recipient as the person inviting them; must be a member of your company. Ignored when skip_invite is set.
5035
+ * Id of the internal user recorded as the creator of the worker's invite, and named to the recipient as the person inviting them. A user key always records its own user and answers 403 if the body names one; a company key must name a user your company can see, or the request answers 404. Ignored when skip_invite is set.
4929
5036
  */
4930
5037
  created_by_user_id?: string;
4931
5038
  /**
4932
- * Id of the internal user recorded as having last sent the worker's invite, and named as the sender on that person's in-app notification; must be a member of your company. Null, and ignored, when skip_invite is set.
5039
+ * Id of the internal user recorded as having last sent the worker's invite, and named as the sender on that person's in-app notification. Read like created_by_user_id. Null, and ignored, when skip_invite is set.
4933
5040
  */
4934
5041
  last_sent_by_user_id?: string | null;
4935
5042
  /**
@@ -5035,7 +5142,7 @@ export type UserParameters = ({
5035
5142
  */
5036
5143
  city?: string | null;
5037
5144
  /**
5038
- * Home address two-letter US state code.
5145
+ * Home address two-letter US state code; any other value is rejected.
5039
5146
  */
5040
5147
  state?: string | null;
5041
5148
  /**
@@ -5800,63 +5907,69 @@ export type CompanyResponseObject = {
5800
5907
  created_at: string;
5801
5908
  updated_at: string;
5802
5909
  };
5803
- export type CompanyParameters = ({
5804
- name: string;
5805
- } | {
5806
- legal_name: string | null;
5807
- } | {
5808
- description: string | null;
5809
- } | {
5810
- address: string | null;
5811
- } | {
5812
- website: string | null;
5813
- } | {
5814
- phone_number: string | null;
5815
- } | {
5816
- email: string | null;
5817
- } | {
5910
+ /**
5911
+ * Request body for updating your own company's public profile. Send only fields to change in JSON; omitted fields remain unchanged. A value of the wrong JSON type, or null for a field that does not take it, answers 422. Other company settings are edited in the web app.
5912
+ */
5913
+ export type CompanyParameters = {
5818
5914
  /**
5819
- * Brand color as a hex string (e.g. "#312e81").
5915
+ * Company display name, unique across companies. Null, a wrong type, or a blank name answers 422.
5820
5916
  */
5821
- color_hex: string;
5822
- } | {
5823
- tagline: string | null;
5824
- } | {
5825
- founding_year: number | null;
5826
- } | {
5827
- corporate_structure: 'corporation' | 'llc' | 'partnership' | 'sole_proprietorship' | 's_corporation' | null;
5828
- } | {
5829
- employee_count_range: 'one_to_ten' | 'eleven_to_fifty' | 'fifty_one_to_two_hundred' | 'two_hundred_one_to_five_hundred' | 'five_hundred_one_to_one_thousand' | 'one_thousand_one_to_five_thousand' | 'five_thousand_one_to_ten_thousand' | 'ten_thousand_one_plus' | null;
5830
- } | {
5831
- revenue_range: 'zero_to_one_million' | 'one_to_ten_million' | 'ten_to_twenty_five_million' | 'twenty_five_to_fifty_million' | 'fifty_to_one_hundred_million' | 'one_hundred_to_two_fifty_million' | 'two_fifty_to_five_hundred_million' | 'five_hundred_to_one_billion' | 'one_billion_to_ten_billion' | 'ten_billion_plus' | null;
5832
- } | {
5917
+ name?: string;
5833
5918
  /**
5834
- * North American Industry Classification System code.
5919
+ * Registered legal name; send null to clear it.
5835
5920
  */
5836
- naics_code: string | null;
5837
- } | {
5838
- linkedin_url: string | null;
5839
- }) & {
5840
- name?: string;
5841
5921
  legal_name?: string | null;
5922
+ /**
5923
+ * Free-text company description; send null to clear it.
5924
+ */
5842
5925
  description?: string | null;
5926
+ /**
5927
+ * Company mailing address; send null to clear it.
5928
+ */
5843
5929
  address?: string | null;
5930
+ /**
5931
+ * Company website URL; send null to clear it.
5932
+ */
5844
5933
  website?: string | null;
5934
+ /**
5935
+ * Company contact phone number; send null to clear it.
5936
+ */
5845
5937
  phone_number?: string | null;
5938
+ /**
5939
+ * Company contact email address; send null to clear it.
5940
+ */
5846
5941
  email?: string | null;
5847
5942
  /**
5848
- * Brand color as a hex string (e.g. "#312e81").
5943
+ * Brand color as a hex string (e.g. "#312e81"). Null answers 422.
5849
5944
  */
5850
5945
  color_hex?: string;
5946
+ /**
5947
+ * Short company tagline; send null to clear it.
5948
+ */
5851
5949
  tagline?: string | null;
5950
+ /**
5951
+ * Year the company was founded, as a JSON integer; send null to clear it.
5952
+ */
5852
5953
  founding_year?: number | null;
5954
+ /**
5955
+ * Legal organizational structure; send null to clear it.
5956
+ */
5853
5957
  corporate_structure?: 'corporation' | 'llc' | 'partnership' | 'sole_proprietorship' | 's_corporation' | null;
5958
+ /**
5959
+ * Company employee-count range; send null to clear it.
5960
+ */
5854
5961
  employee_count_range?: 'one_to_ten' | 'eleven_to_fifty' | 'fifty_one_to_two_hundred' | 'two_hundred_one_to_five_hundred' | 'five_hundred_one_to_one_thousand' | 'one_thousand_one_to_five_thousand' | 'five_thousand_one_to_ten_thousand' | 'ten_thousand_one_plus' | null;
5962
+ /**
5963
+ * Company revenue range; send null to clear it.
5964
+ */
5855
5965
  revenue_range?: 'zero_to_one_million' | 'one_to_ten_million' | 'ten_to_twenty_five_million' | 'twenty_five_to_fifty_million' | 'fifty_to_one_hundred_million' | 'one_hundred_to_two_fifty_million' | 'two_fifty_to_five_hundred_million' | 'five_hundred_to_one_billion' | 'one_billion_to_ten_billion' | 'ten_billion_plus' | null;
5856
5966
  /**
5857
- * North American Industry Classification System code.
5967
+ * North American Industry Classification System code; send null to clear it.
5858
5968
  */
5859
5969
  naics_code?: string | null;
5970
+ /**
5971
+ * Company LinkedIn profile URL; send null to clear it.
5972
+ */
5860
5973
  linkedin_url?: string | null;
5861
5974
  };
5862
5975
  /**
@@ -5891,7 +6004,7 @@ export type CustomFieldConfigsResponseObject = {
5891
6004
  /**
5892
6005
  * The kind of record the field attaches to: one of apprenticeship_apprentice, company, job, or user_company.
5893
6006
  */
5894
- model_type: string;
6007
+ model_type: 'apprenticeship_apprentice' | 'company' | 'job' | 'user_company';
5895
6008
  /**
5896
6009
  * Whether the field is shown.
5897
6010
  */
@@ -5910,44 +6023,40 @@ export type CustomFieldConfigsResponseObject = {
5910
6023
  updated_at: string;
5911
6024
  };
5912
6025
  /**
5913
- * Request body for creating a custom field definition. `name` and `model_type` are required.
6026
+ * Request body for creating a custom field definition; it belongs to the company that owns the API key. `name` and `model_type` are required, and omitting either answers 400.
5914
6027
  */
5915
6028
  export type CustomFieldConfigParameters = {
5916
6029
  /**
5917
- * Name of the custom field; required and unique per company and model type.
6030
+ * Name of the custom field, unique per company and model type. Null or a wrong type answers 422, and a blank name fails model validation with 422.
5918
6031
  */
5919
6032
  name: string;
5920
6033
  /**
5921
- * Optional description of the custom field.
6034
+ * Optional description of the custom field; null leaves it unset. A nonstring value other than null answers 422.
5922
6035
  */
5923
6036
  description?: string | null;
5924
6037
  /**
5925
- * The kind of record the field attaches to: one of apprenticeship_apprentice, company, job, or user_company. Required.
6038
+ * The kind of record the field attaches to: one of apprenticeship_apprentice, company, job, or user_company. It cannot change after creation. Any other value, or null, answers 422.
5926
6039
  */
5927
6040
  model_type: 'apprenticeship_apprentice' | 'company' | 'job' | 'user_company';
5928
6041
  /**
5929
- * Whether the field is shown.
6042
+ * Whether the field is shown, as a JSON boolean; defaults to false when omitted. Null or a nonboolean value answers 422.
5930
6043
  */
5931
6044
  visible?: boolean;
5932
6045
  };
5933
6046
  /**
5934
- * Request body for updating a custom field definition. Every field is optional; omit a field to preserve its current value. The resulting definition's name must remain unique for its company and model type.
6047
+ * Request body for updating a custom field definition. Every field is optional; omit a field to preserve its current value. `model_type` is fixed at creation, so sending it answers 400. The resulting definition's name must remain unique for its company and model type.
5935
6048
  */
5936
6049
  export type CustomFieldConfigUpdateParameters = {
5937
6050
  /**
5938
- * Name of the custom field; omit to preserve the current value. The resulting name must remain present and unique per company and model type.
6051
+ * Name of the custom field; omit to preserve the current value. Null, a wrong type, or a blank name answers 422, as does a name already used for the same model type.
5939
6052
  */
5940
6053
  name?: string;
5941
6054
  /**
5942
- * Optional description of the custom field.
6055
+ * Optional description of the custom field; omit to preserve it, or send null to clear it. A nonstring value other than null answers 422.
5943
6056
  */
5944
6057
  description?: string | null;
5945
6058
  /**
5946
- * The kind of record the field attaches to: one of apprenticeship_apprentice, company, job, or user_company. Omit to preserve the current value.
5947
- */
5948
- model_type?: 'apprenticeship_apprentice' | 'company' | 'job' | 'user_company';
5949
- /**
5950
- * Whether the field is shown.
6059
+ * Whether the field is shown, as a JSON boolean; omit to preserve the current value. Null or a nonboolean value answers 422.
5951
6060
  */
5952
6061
  visible?: boolean;
5953
6062
  };
@@ -6044,7 +6153,7 @@ export type UserCompanyScheduledChange = {
6044
6153
  /**
6045
6154
  * How the worker is paid: hourly or salary.
6046
6155
  */
6047
- compensation_type: string;
6156
+ compensation_type: 'hourly' | 'salary';
6048
6157
  /**
6049
6158
  * Whether the worker is eligible for overtime pay in this version.
6050
6159
  */
@@ -6916,9 +7025,9 @@ export type ManagerTimeCardApprovalParameters = {
6916
7025
  */
6917
7026
  export type WorkerTimeCardApprovalParameters = {
6918
7027
  /**
6919
- * Approval decision: pending or approved. A worker cannot decline their own card.
7028
+ * Approval decision: pending or approved. The enum lists every status a response can carry, but a worker cannot decline their own card: declined answers 422.
6920
7029
  */
6921
- status: 'pending' | 'approved';
7030
+ status: 'pending' | 'approved' | 'declined';
6922
7031
  };
6923
7032
  /**
6924
7033
  * A page of time cards, with pagination metadata and navigation links.
@@ -7810,11 +7919,11 @@ export type ProjectSiteResponseObject = {
7810
7919
  */
7811
7920
  export type ProjectSiteParameters = {
7812
7921
  /**
7813
- * ID of a site visible to the API key. The site must be public or private to the project's owning company. Duplicate (project, site) pairs are rejected.
7922
+ * ID of a site visible to the API key. The site must be public or private to the project's owning company. Duplicate (project, site) pairs are rejected. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422.
7814
7923
  */
7815
7924
  site_id: string;
7816
7925
  /**
7817
- * Optional complete set of feature IDs on that site to scope to this project. Omit to attach the site with no features. Each feature must belong to the site.
7926
+ * Optional complete set of unique nonblank feature IDs on that site to scope to this project. Omit to attach the site with no features. Each feature must belong to the site. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422.
7818
7927
  */
7819
7928
  feature_ids?: Array<string>;
7820
7929
  };
@@ -7823,7 +7932,7 @@ export type ProjectSiteParameters = {
7823
7932
  */
7824
7933
  export type ProjectSiteUpdateParameters = {
7825
7934
  /**
7826
- * Complete desired set of feature IDs on the linked site. Send an empty array to clear the set. Omit to leave the current set unchanged. Each feature must belong to the site.
7935
+ * Complete desired set of unique nonblank feature IDs on the linked site. Send an empty array to clear the set. Omit to leave the current set unchanged. Each feature must belong to the site. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422.
7827
7936
  */
7828
7937
  feature_ids?: Array<string>;
7829
7938
  };
@@ -8012,7 +8121,7 @@ export type FeatureResponseObject = {
8012
8121
  updated_at: string;
8013
8122
  };
8014
8123
  /**
8015
- * A billing metric — the count of distinct prevailing-wage/apprenticeship (PWA) tracked workers on a project in a given month, aggregated for the billed company. One row per project per month.
8124
+ * A billing metric — the count of distinct prevailing-wage/apprenticeship (PWA) tracked workers on one billable unit in a given month, aggregated for the billed company. A billable unit is a project (one row per project per month, counting workers once across every job in the project tree) or a job outside any project (one row per job per month). Exactly one of `project_id` and `job_id` is set.
8016
8125
  */
8017
8126
  export type BillingPwaUserCountByProjectByMonthResponseObject = {
8018
8127
  /**
@@ -8028,15 +8137,23 @@ export type BillingPwaUserCountByProjectByMonthResponseObject = {
8028
8137
  */
8029
8138
  month: number;
8030
8139
  /**
8031
- * ID of the project the count is for.
8140
+ * ID of the project the count is for. `null` when the row is for a job outside any project.
8032
8141
  */
8033
- project_id: string;
8142
+ project_id: string | null;
8143
+ /**
8144
+ * Name of the project the count is for. `null` when the row is for a job outside any project.
8145
+ */
8146
+ project_name: string | null;
8147
+ /**
8148
+ * ID of the job the count is for. `null` when the row is for a project.
8149
+ */
8150
+ job_id: string | null;
8034
8151
  /**
8035
- * Name of the project the count is for.
8152
+ * Name of the job the count is for. `null` when the row is for a project.
8036
8153
  */
8037
- project_name: string;
8154
+ job_name: string | null;
8038
8155
  /**
8039
- * Distinct workers with PWA-tracked time on the project that month.
8156
+ * Distinct workers with PWA-tracked time on the project or job that month.
8040
8157
  */
8041
8158
  user_count: number;
8042
8159
  };
@@ -8280,7 +8397,7 @@ export type ComplianceCheckParameters = {
8280
8397
  */
8281
8398
  assignee_user_ids?: Array<string>;
8282
8399
  /**
8283
- * Adds a document to the check. Upload the file to /api/v1/direct_uploads naming the `compliance.checks` resource, then send the signed id it returns. Requires a user-scoped API key, because the document records who uploaded it; a company-scoped key is refused. The check re-evaluates unless this same request also sets `status`. Refused when the check's requirement does not ask for a document.
8400
+ * Adds a document to the check. Upload the file to /api/v1/direct_uploads naming the `compliance.checks` resource, then send the signed id it returns. Requires a user-scoped API key, because the document records who uploaded it; a company-scoped key is refused. The check re-evaluates unless this same request also sets `status`. Refused when the check's requirement does not ask for a document. A document always holds a file, so null and a blank string answer 422.
8284
8401
  */
8285
8402
  file_signed_id?: string;
8286
8403
  };
@@ -9062,11 +9179,11 @@ export type JobSitesResponseObject = {
9062
9179
  */
9063
9180
  export type JobSiteParameters = {
9064
9181
  /**
9065
- * Id of the Site to attach. Must be visible to the key and belong to the job's provider company (or be public). Duplicate (job, site) pairs are rejected.
9182
+ * Id of the Site to attach. Must be visible to the key and belong to the job's provider company (or be public). Duplicate (job, site) pairs are rejected. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422.
9066
9183
  */
9067
9184
  site_id: string;
9068
9185
  /**
9069
- * Ids of features to select on this join. Each feature must belong to the named site. Omit to attach the site with no features.
9186
+ * Unique nonblank ids of features to select on this join. Each feature must belong to the named site. Omit to attach the site with no features. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422.
9070
9187
  */
9071
9188
  feature_ids?: Array<string>;
9072
9189
  };
@@ -9075,7 +9192,7 @@ export type JobSiteParameters = {
9075
9192
  */
9076
9193
  export type JobSiteUpdateParameters = {
9077
9194
  /**
9078
- * Replacement set of feature ids on this join. An empty array clears every feature. Omit the field to leave the current set unchanged.
9195
+ * Replacement set of unique nonblank feature ids on this join. An empty array clears every feature. Omit the field to leave the current set unchanged. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422.
9079
9196
  */
9080
9197
  feature_ids?: Array<string>;
9081
9198
  };
@@ -9810,11 +9927,11 @@ export type PositionResponseObject = {
9810
9927
  skill_level: string | null;
9811
9928
  };
9812
9929
  /**
9813
- * Start of the position's scheduled window (ISO 8601); null when unscheduled.
9930
+ * Start of the position's scheduled window (ISO 8601) as stored, the beginning of its first day in the job's tz_name; null when unscheduled.
9814
9931
  */
9815
9932
  start_time: string | null;
9816
9933
  /**
9817
- * End of the position's scheduled window (ISO 8601); null when unscheduled.
9934
+ * End of the position's scheduled window (ISO 8601) as stored, the end of its last day in the job's tz_name; null when unscheduled.
9818
9935
  */
9819
9936
  end_time: string | null;
9820
9937
  /**
@@ -9909,11 +10026,11 @@ export type PositionParameters = {
9909
10026
  */
9910
10027
  fulfilled_by_user_id?: string | null;
9911
10028
  /**
9912
- * Start of the position's scheduled window (ISO 8601); must fall within the job's schedule.
10029
+ * Start of the position's scheduled window (ISO 8601); must fall within the job's schedule. The window covers whole days in the job's tz_name, so it starts at the beginning of this value's day there.
9913
10030
  */
9914
10031
  start_time?: string | null;
9915
10032
  /**
9916
- * End of the position's scheduled window (ISO 8601); must be on or after start_time and within the job's schedule.
10033
+ * End of the position's scheduled window (ISO 8601); must be on or after start_time and within the job's schedule. The window ends at the end of this value's day in the job's tz_name.
9917
10034
  */
9918
10035
  end_time?: string | null;
9919
10036
  /**
@@ -10073,9 +10190,9 @@ export type ProductionCompletionUpdateParameters = {
10073
10190
  */
10074
10191
  export type ProductionCompletionBaseParameters = {
10075
10192
  /**
10076
- * Scope price the work bills against; set on create only, and it determines the job.
10193
+ * Scope price the work bills against; set on create only, and it determines the job. Omission answers 400; a scope price the API key cannot see answers 404.
10077
10194
  */
10078
- production_job_scope_price_id?: string;
10195
+ production_job_scope_price_id: string;
10079
10196
  /**
10080
10197
  * ID of the company member filing the completion. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422. A user outside the company that owns the API key answers 422.
10081
10198
  */
@@ -10663,21 +10780,21 @@ export type PositionFunction = {
10663
10780
  description: string;
10664
10781
  } | null;
10665
10782
  /**
10666
- * Request body for granting a user a role in a company.
10783
+ * Request body for granting a user a role in a company. All three fields are required; omitting one answers 400.
10667
10784
  */
10668
10785
  export type UserRoleRequest = {
10669
10786
  /**
10670
- * ID of the user to grant the role to. Must be someone your company can already see — a worker it employs, a holder of one of its roles, or someone it has invited.
10787
+ * ID of the company the role is scoped to; it must be the company that owns the API key, and any other answers 403.
10671
10788
  */
10672
- user_id?: string;
10789
+ company_id: string;
10673
10790
  /**
10674
- * ID of the company the role is scoped to.
10791
+ * ID of the user to grant the role to. Must be someone your company can already see — a worker it employs, a holder of one of its roles, or someone it has invited; anyone else answers 404.
10675
10792
  */
10676
- company_id?: string;
10793
+ user_id: string;
10677
10794
  /**
10678
- * The role to grant: one of TECHNICIAN, FIELD_LEAD, MANAGER, SAFETY_MANAGER, or ADMIN.
10795
+ * The role to grant: one of TECHNICIAN, FIELD_LEAD, MANAGER, SAFETY_MANAGER, or ADMIN. Any other value answers 422.
10679
10796
  */
10680
- role?: 'TECHNICIAN' | 'FIELD_LEAD' | 'MANAGER' | 'SAFETY_MANAGER' | 'ADMIN';
10797
+ role: 'TECHNICIAN' | 'FIELD_LEAD' | 'MANAGER' | 'SAFETY_MANAGER' | 'ADMIN';
10681
10798
  };
10682
10799
  /**
10683
10800
  * A role granted to a user within a company's scope — the permissions the user has there. A user can hold several distinct roles per company.
@@ -11749,6 +11866,102 @@ export type RegionalProjectWageDeterminationResponseObject = {
11749
11866
  */
11750
11867
  updated_at: string;
11751
11868
  };
11869
+ export type ProjectWageDeterminationHistoryVersionObject = ({
11870
+ type: 'Pwa::ProjectWageDeterminations::Federal';
11871
+ } & FederalProjectWageDeterminationHistoryVersionObject) | ({
11872
+ type: 'Pwa::ProjectWageDeterminations::Regional';
11873
+ } & RegionalProjectWageDeterminationHistoryVersionObject);
11874
+ export type FederalProjectWageDeterminationHistoryVersionObject = {
11875
+ /**
11876
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
11877
+ */
11878
+ project_wage_determination_id: string;
11879
+ project_id: string;
11880
+ pwa_trade_id: string;
11881
+ overtime_package_id: string | null;
11882
+ pay_rates_rule_package_id: string | null;
11883
+ type: 'Pwa::ProjectWageDeterminations::Federal';
11884
+ labor_classification: string;
11885
+ hourly_rate_cents: string;
11886
+ fringe_rate_cents: string;
11887
+ class_code: string | null;
11888
+ construction_category: 'building' | 'heavy' | 'highway' | 'residential' | null;
11889
+ general_wage_determination: string | null;
11890
+ valid_from: string | null;
11891
+ valid_to: string | null;
11892
+ created_at: string;
11893
+ updated_at: string;
11894
+ version_status: 'scheduled' | 'current' | 'historical';
11895
+ corrections: Array<ProjectWageDeterminationHistoryCorrectionObject>;
11896
+ };
11897
+ export type RegionalProjectWageDeterminationHistoryVersionObject = {
11898
+ /**
11899
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
11900
+ */
11901
+ project_wage_determination_id: string;
11902
+ project_id: string;
11903
+ pwa_trade_id: string;
11904
+ overtime_package_id: string | null;
11905
+ pay_rates_rule_package_id: string | null;
11906
+ type: 'Pwa::ProjectWageDeterminations::Regional';
11907
+ labor_classification: string;
11908
+ hourly_rate_cents: string;
11909
+ fringe_rate_cents: string;
11910
+ general_wage_determination: string | null;
11911
+ regional_fields: RegionalWageDeterminationFieldsResponse;
11912
+ valid_from: string | null;
11913
+ valid_to: string | null;
11914
+ created_at: string;
11915
+ updated_at: string;
11916
+ version_status: 'scheduled' | 'current' | 'historical';
11917
+ corrections: Array<ProjectWageDeterminationHistoryCorrectionObject>;
11918
+ };
11919
+ export type ProjectWageDeterminationHistoryCorrectionObject = ({
11920
+ type: 'Pwa::ProjectWageDeterminations::Federal';
11921
+ } & FederalProjectWageDeterminationHistoryCorrectionObject) | ({
11922
+ type: 'Pwa::ProjectWageDeterminations::Regional';
11923
+ } & RegionalProjectWageDeterminationHistoryCorrectionObject);
11924
+ export type FederalProjectWageDeterminationHistoryCorrectionObject = {
11925
+ /**
11926
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
11927
+ */
11928
+ project_wage_determination_id: string;
11929
+ project_id: string;
11930
+ pwa_trade_id: string;
11931
+ overtime_package_id: string | null;
11932
+ pay_rates_rule_package_id: string | null;
11933
+ type: 'Pwa::ProjectWageDeterminations::Federal';
11934
+ labor_classification: string;
11935
+ hourly_rate_cents: string;
11936
+ fringe_rate_cents: string;
11937
+ class_code: string | null;
11938
+ construction_category: 'building' | 'heavy' | 'highway' | 'residential' | null;
11939
+ general_wage_determination: string | null;
11940
+ valid_from: string | null;
11941
+ valid_to: string | null;
11942
+ created_at: string;
11943
+ updated_at: string;
11944
+ };
11945
+ export type RegionalProjectWageDeterminationHistoryCorrectionObject = {
11946
+ /**
11947
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
11948
+ */
11949
+ project_wage_determination_id: string;
11950
+ project_id: string;
11951
+ pwa_trade_id: string;
11952
+ overtime_package_id: string | null;
11953
+ pay_rates_rule_package_id: string | null;
11954
+ type: 'Pwa::ProjectWageDeterminations::Regional';
11955
+ labor_classification: string;
11956
+ hourly_rate_cents: string;
11957
+ fringe_rate_cents: string;
11958
+ general_wage_determination: string | null;
11959
+ regional_fields: RegionalWageDeterminationFieldsResponse;
11960
+ valid_from: string | null;
11961
+ valid_to: string | null;
11962
+ created_at: string;
11963
+ updated_at: string;
11964
+ };
11752
11965
  /**
11753
11966
  * Parameters for creating a project wage determination. Provide the Federal or Regional shape; the type discriminator selects which. Editing an existing determination uses the update parameters, which take an `effective_from` instead of a type.
11754
11967
  */
@@ -11883,13 +12096,65 @@ export type ProjectWageDeterminationUpdateParameters = {
11883
12096
  regional_fields?: RegionalWageDeterminationFields;
11884
12097
  };
11885
12098
  /**
11886
- * The adjustment applied when a rule matches — an addition to the wage or fringe rate.
12099
+ * Parameters for an effective-dated change to a project wage determination, applying from a calendar date forward. The type is fixed by the determination the id names and is not sent.
11887
12100
  */
11888
- export type RateRuleEffect = {
12101
+ export type ProjectWageDeterminationScheduledChangeParameters = {
11889
12102
  /**
11890
- * Which base rate the effect adds to: `wage_increment` the hourly wage rate, `fringe_increment` the fringe rate.
12103
+ * Where the change starts applying, as a calendar date (`YYYY-MM-DD`). A boundary is created at that date when needed, and the new values apply from there forward, carrying through every later version already scheduled. Past, current, and future dates are all accepted, so long as the date falls on or after the determination's timeline begins and before any scheduled termination. Derived pay data on affected descendant jobs is queued for reconciliation when the change is saved, whether the effective date is past, current, or future.
11891
12104
  */
11892
- type: 'wage_increment' | 'fringe_increment';
12105
+ effective_date: string;
12106
+ /**
12107
+ * Human-readable labor classification — the craft or trade this determination sets rates for; the display label, distinct from the machine class code.
12108
+ */
12109
+ labor_classification?: string;
12110
+ /**
12111
+ * Base hourly wage rate, in cents as a decimal string (e.g. "5380.0" is $53.80).
12112
+ */
12113
+ hourly_rate_cents?: string;
12114
+ /**
12115
+ * Hourly fringe rate, in cents as a decimal string (e.g. "1200.0" is $12.00).
12116
+ */
12117
+ fringe_rate_cents?: string;
12118
+ /**
12119
+ * The DOL wage-classification code identifying this classification within its general decision (e.g. "LABO0324-014"); null when not recorded.
12120
+ */
12121
+ class_code?: string | null;
12122
+ /**
12123
+ * Broad DOL construction category — one of building, heavy, highway, or residential; null when not recorded.
12124
+ */
12125
+ construction_category?: 'building' | 'heavy' | 'highway' | 'residential' | null;
12126
+ /**
12127
+ * The DOL general wage determination the rates are drawn from — the general decision number plus its revision (e.g. "CA20230001/5"); null when not recorded.
12128
+ */
12129
+ general_wage_determination?: string | null;
12130
+ regional_fields?: RegionalWageDeterminationFields;
12131
+ };
12132
+ /**
12133
+ * Parameters for moving where a project wage determination's timeline begins.
12134
+ */
12135
+ export type ProjectWageDeterminationGenesisParameters = {
12136
+ /**
12137
+ * The timeline's new start, as a calendar date (`YYYY-MM-DD`). Moving it earlier extends the first version back to it. Moving it later drops every version whose coverage ended at or before it and truncates the one spanning it, so what those versions said stops being readable. Refused with `422` when the new start would fall at or after a scheduled termination.
12138
+ */
12139
+ effective_date: string;
12140
+ };
12141
+ /**
12142
+ * Parameters for scheduling when a project wage determination stops being valid.
12143
+ */
12144
+ export type ProjectWageDeterminationScheduledTerminationParameters = {
12145
+ /**
12146
+ * When the determination stops being valid, as a calendar date (`YYYY-MM-DD`). Segments beyond it are dropped and one spanning it is truncated. Must fall after the determination's genesis and on or before its current end. It must also fall after the start date of every job already copying this determination; otherwise the request returns 422. A determination holds at most one scheduled termination; cancel the standing one before scheduling another.
12147
+ */
12148
+ effective_date: string;
12149
+ };
12150
+ /**
12151
+ * The adjustment applied when a rule matches — an addition to the wage or fringe rate.
12152
+ */
12153
+ export type RateRuleEffect = {
12154
+ /**
12155
+ * Which base rate the effect adds to: `wage_increment` the hourly wage rate, `fringe_increment` the fringe rate.
12156
+ */
12157
+ type: 'wage_increment' | 'fringe_increment';
11893
12158
  /**
11894
12159
  * Amount added to the base rate, in whole cents as a decimal string (e.g. "300" is $3.00). Zero or positive; fractional input is truncated.
11895
12160
  */
@@ -12065,6 +12330,74 @@ export type RateRuleHistoryVersionObject = {
12065
12330
  version_status: 'scheduled' | 'current' | 'historical';
12066
12331
  corrections: Array<RateRuleHistoryCorrectionObject>;
12067
12332
  };
12333
+ /**
12334
+ * A conditional rate-modification rule on a project wage determination — it adds wage or fringe cents when its conditions match. `valid_from` and `valid_to` bound the window over which this version of the rule is in effect.
12335
+ */
12336
+ export type ProjectRateRuleResponseObject = {
12337
+ /**
12338
+ * Identity shared by every version of the rule, never a per-version row id — the value the member and history paths address the rule by.
12339
+ */
12340
+ id: string;
12341
+ /**
12342
+ * ID of the project wage determination this rule is applied to, taken from the request path — the determination's own family identifier, stable across its temporal versions. Because rules attach to a shared package, the same rule can surface under more than one determination.
12343
+ */
12344
+ project_wage_determination_id: string;
12345
+ /**
12346
+ * ID of the rule package that owns this rule — an internal container the API manages on the determination's behalf.
12347
+ */
12348
+ pay_rates_rule_package_id: string;
12349
+ effect: RateRuleEffect;
12350
+ /**
12351
+ * The rule's match conditions, at most one per category (time, day-selection, apprentice, overtime). An empty list means the rule always applies.
12352
+ */
12353
+ conditions: Array<RateRuleCondition>;
12354
+ /**
12355
+ * Valid time — when this version of the rule took effect (ISO 8601); null when the version has no recorded start.
12356
+ */
12357
+ valid_from: string | null;
12358
+ /**
12359
+ * Valid time — when this version stopped applying (ISO 8601); null while it is still current.
12360
+ */
12361
+ valid_to: string | null;
12362
+ /**
12363
+ * When the record was created (ISO 8601).
12364
+ */
12365
+ created_at: string;
12366
+ /**
12367
+ * When the record was last updated (ISO 8601).
12368
+ */
12369
+ updated_at: string;
12370
+ };
12371
+ export type ProjectRateRuleHistoryCorrectionObject = {
12372
+ /**
12373
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
12374
+ */
12375
+ pay_rates_rule_id: string;
12376
+ project_wage_determination_id: string;
12377
+ pay_rates_rule_package_id: string;
12378
+ effect: RateRuleEffect;
12379
+ conditions: Array<RateRuleCondition>;
12380
+ valid_from: string | null;
12381
+ valid_to: string | null;
12382
+ created_at: string;
12383
+ updated_at: string;
12384
+ };
12385
+ export type ProjectRateRuleHistoryVersionObject = {
12386
+ /**
12387
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
12388
+ */
12389
+ pay_rates_rule_id: string;
12390
+ project_wage_determination_id: string;
12391
+ pay_rates_rule_package_id: string;
12392
+ effect: RateRuleEffect;
12393
+ conditions: Array<RateRuleCondition>;
12394
+ valid_from: string | null;
12395
+ valid_to: string | null;
12396
+ created_at: string;
12397
+ updated_at: string;
12398
+ version_status: 'scheduled' | 'current' | 'historical';
12399
+ corrections: Array<ProjectRateRuleHistoryCorrectionObject>;
12400
+ };
12068
12401
  /**
12069
12402
  * A conditional wage or fringe adjustment owned by a pay-rate rule package, with the selected version's valid-time window.
12070
12403
  */
@@ -12757,25 +13090,18 @@ export type AssetsSiteResponseObject = {
12757
13090
  */
12758
13091
  updated_at: string;
12759
13092
  };
12760
- export type AssetsSiteParameters = ({
12761
- /**
12762
- * ID of the Atlas map site to back this location. Optional; omit for a standalone location that is not on the map.
12763
- */
12764
- site_id: string;
12765
- } | {
13093
+ /**
13094
+ * Create a site. kind is required; provide a site_id to back the location with a site on the Atlas map, or a name for a standalone location. At least one of site_id or name is required.
13095
+ */
13096
+ export type AssetsSiteParameters = {
12766
13097
  /**
12767
- * Display name for the location. Required when no backing site_id is given; otherwise falls back to the backing Atlas site's name.
13098
+ * ID of the Atlas map site to back this location. Optional; omit for a standalone location that is not on the map. A site the key cannot see returns 404.
12768
13099
  */
12769
- name: string;
12770
- }) & {
13100
+ site_id?: string | null;
12771
13101
  /**
12772
13102
  * Location type: warehouse or yard.
12773
13103
  */
12774
13104
  kind: 'warehouse' | 'yard';
12775
- /**
12776
- * ID of the Atlas map site to back this location. Optional; omit for a standalone location that is not on the map.
12777
- */
12778
- site_id?: string | null;
12779
13105
  /**
12780
13106
  * Display name for the location. Required when no backing site_id is given; otherwise falls back to the backing Atlas site's name.
12781
13107
  */
@@ -12785,14 +13111,14 @@ export type AssetsSiteParameters = ({
12785
13111
  * Request body for updating an asset location. Every field is optional; send only the fields to change. The saved location must still have a name or a backing `site_id`.
12786
13112
  */
12787
13113
  export type AssetsSiteUpdateParameters = {
12788
- /**
12789
- * Location type: warehouse or yard.
12790
- */
12791
- kind?: 'warehouse' | 'yard';
12792
13114
  /**
12793
13115
  * ID of the Atlas map site to back this location. `null` removes the backing site when a name remains available.
12794
13116
  */
12795
13117
  site_id?: string | null;
13118
+ /**
13119
+ * Location type: warehouse or yard.
13120
+ */
13121
+ kind?: 'warehouse' | 'yard';
12796
13122
  /**
12797
13123
  * Display name for the location. `null` clears the direct name when a backing `site_id` supplies the display name.
12798
13124
  */
@@ -12843,7 +13169,7 @@ export type AssetsFormAssignmentTriggerResponseObject = {
12843
13169
  */
12844
13170
  day_of_month_due: number | null;
12845
13171
  /**
12846
- * IANA time zone (e.g. "America/New_York") in which time_of_day_due is interpreted.
13172
+ * IANA time zone name (e.g. "US/Central") in which time_of_day_due is interpreted.
12847
13173
  */
12848
13174
  tz_name: string;
12849
13175
  /**
@@ -12875,6 +13201,10 @@ export type AssetsFormAssignmentTriggerParameters = {
12875
13201
  * ID of the form definition (a SurveyJS form template) this assignment is for.
12876
13202
  */
12877
13203
  form_definition_id: string;
13204
+ /**
13205
+ * Optional label for this trigger rule; null when unset.
13206
+ */
13207
+ name?: string | null;
12878
13208
  /**
12879
13209
  * The custody event that fires the rule: assignment (an item is assigned to a user) or unassignment (an item is removed from a user).
12880
13210
  */
@@ -12887,18 +13217,6 @@ export type AssetsFormAssignmentTriggerParameters = {
12887
13217
  * How the first due date is set: day_of_event (the day the rule fires), day_of_week (the next day_of_week_due), or day_of_month (day_of_month_due of the current or next month).
12888
13218
  */
12889
13219
  first_due_by: 'day_of_event' | 'day_of_week' | 'day_of_month';
12890
- /**
12891
- * IANA time zone (e.g. "America/New_York") in which time_of_day_due is interpreted.
12892
- */
12893
- tz_name: string;
12894
- /**
12895
- * Wall-clock time of day the form is due (HH:MM), interpreted in tz_name.
12896
- */
12897
- time_of_day_due: string;
12898
- /**
12899
- * Optional label for this trigger rule; null when unset.
12900
- */
12901
- name?: string | null;
12902
13220
  /**
12903
13221
  * How often the generated form recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment.
12904
13222
  */
@@ -12911,6 +13229,14 @@ export type AssetsFormAssignmentTriggerParameters = {
12911
13229
  * Day of month the form is first due, 1 to 31 (clamped to the month's last day). Required when first_due_by is day_of_month; null otherwise.
12912
13230
  */
12913
13231
  day_of_month_due?: number | null;
13232
+ /**
13233
+ * IANA time zone name (e.g. "US/Central") in which time_of_day_due is interpreted.
13234
+ */
13235
+ tz_name: string;
13236
+ /**
13237
+ * Wall-clock time of day the form is due (HH:MM), interpreted in tz_name.
13238
+ */
13239
+ time_of_day_due: string;
12914
13240
  /**
12915
13241
  * IDs of the users the generated form is assigned to. Used only when assign_to is custom; cleared for the other modes.
12916
13242
  */
@@ -12928,6 +13254,10 @@ export type AssetsFormAssignmentTriggerUpdateParameters = {
12928
13254
  * ID of the form definition (a SurveyJS form template) this assignment is for.
12929
13255
  */
12930
13256
  form_definition_id?: string;
13257
+ /**
13258
+ * Optional label for this trigger rule; null when unset.
13259
+ */
13260
+ name?: string | null;
12931
13261
  /**
12932
13262
  * The custody event that fires the rule: assignment (an item is assigned to a user) or unassignment (an item is removed from a user).
12933
13263
  */
@@ -12940,18 +13270,6 @@ export type AssetsFormAssignmentTriggerUpdateParameters = {
12940
13270
  * How the first due date is set: day_of_event (the day the rule fires), day_of_week (the next day_of_week_due), or day_of_month (day_of_month_due of the current or next month).
12941
13271
  */
12942
13272
  first_due_by?: 'day_of_event' | 'day_of_week' | 'day_of_month';
12943
- /**
12944
- * IANA time zone (e.g. "America/New_York") in which time_of_day_due is interpreted.
12945
- */
12946
- tz_name?: string;
12947
- /**
12948
- * Wall-clock time of day the form is due (HH:MM), interpreted in tz_name.
12949
- */
12950
- time_of_day_due?: string;
12951
- /**
12952
- * Optional label for this trigger rule; null when unset.
12953
- */
12954
- name?: string | null;
12955
13273
  /**
12956
13274
  * How often the generated form recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment.
12957
13275
  */
@@ -12964,6 +13282,14 @@ export type AssetsFormAssignmentTriggerUpdateParameters = {
12964
13282
  * Day of month the form is first due, 1 to 31 (clamped to the month's last day). Required when first_due_by is day_of_month; null otherwise.
12965
13283
  */
12966
13284
  day_of_month_due?: number | null;
13285
+ /**
13286
+ * IANA time zone name (e.g. "US/Central") in which time_of_day_due is interpreted.
13287
+ */
13288
+ tz_name?: string;
13289
+ /**
13290
+ * Wall-clock time of day the form is due (HH:MM), interpreted in tz_name.
13291
+ */
13292
+ time_of_day_due?: string;
12967
13293
  /**
12968
13294
  * IDs of the users the generated form is assigned to. Used only when assign_to is custom; cleared for the other modes.
12969
13295
  */
@@ -13095,7 +13421,7 @@ export type AssetsDocumentResponseObject = {
13095
13421
  */
13096
13422
  export type AssetsDocumentParameters = {
13097
13423
  /**
13098
- * A signed_id from POST /api/v1/direct_uploads identifying the uploaded blob to attach. Register the upload naming `assets.items.documents` — a signed_id issued for any other resource will not resolve here.
13424
+ * A signed_id from POST /api/v1/direct_uploads identifying the uploaded blob to attach. Register the upload naming `assets.items.documents` — a signed_id issued for any other resource will not resolve here. Null and a blank string answer 422.
13099
13425
  */
13100
13426
  file: string;
13101
13427
  /**
@@ -13112,7 +13438,7 @@ export type AssetsDocumentParameters = {
13112
13438
  performed_by_user_id: string;
13113
13439
  };
13114
13440
  /**
13115
- * Update an asset-item document. All fields are optional — send only what changes. Omit file to retain the existing attachment, or supply a new signed_id to replace it.
13441
+ * Update an asset-item document. All fields are optional — send only what changes. Omit file to retain the existing attachment, or supply a new signed_id to replace it. A document always holds a file, so null answers 422, as does a blank string.
13116
13442
  */
13117
13443
  export type AssetsDocumentUpdateParameters = {
13118
13444
  /**
@@ -13904,19 +14230,19 @@ export type AssetsSubLocationParameters = {
13904
14230
  /**
13905
14231
  * ID of the site the location belongs to. Top-level nodes only — exactly one of assets_site_id or container_item_id; nested nodes inherit the parent's holder.
13906
14232
  */
13907
- assets_site_id?: string;
14233
+ assets_site_id?: string | null;
13908
14234
  /**
13909
14235
  * ID of the container item the location belongs to. Top-level nodes only — exactly one of assets_site_id or container_item_id; the container's product must be flagged as a container.
13910
14236
  */
13911
- container_item_id?: string;
14237
+ container_item_id?: string | null;
13912
14238
  /**
13913
14239
  * ID of the enclosing location for a nested node; omit for a top-level node.
13914
14240
  */
13915
14241
  parent_id?: string | null;
13916
14242
  /**
13917
- * Advisory level label for the node: zone, aisle, rack, shelf, bin, or drawer.
14243
+ * Advisory level label for the node: zone, aisle, rack, shelf, bin, or drawer. `null` leaves the node unlabelled.
13918
14244
  */
13919
- kind?: 'zone' | 'aisle' | 'rack' | 'shelf' | 'bin' | 'drawer';
14245
+ kind?: 'zone' | 'aisle' | 'rack' | 'shelf' | 'bin' | 'drawer' | null;
13920
14246
  /**
13921
14247
  * Display name for the location, unique among its siblings.
13922
14248
  */
@@ -13935,9 +14261,9 @@ export type AssetsSubLocationUpdateParameters = {
13935
14261
  */
13936
14262
  parent_id?: string | null;
13937
14263
  /**
13938
- * Advisory level label for the node: zone, aisle, rack, shelf, bin, or drawer.
14264
+ * Advisory level label for the node: zone, aisle, rack, shelf, bin, or drawer. `null` leaves the node unlabelled.
13939
14265
  */
13940
- kind?: 'zone' | 'aisle' | 'rack' | 'shelf' | 'bin' | 'drawer';
14266
+ kind?: 'zone' | 'aisle' | 'rack' | 'shelf' | 'bin' | 'drawer' | null;
13941
14267
  /**
13942
14268
  * Display name for the location, unique among its siblings.
13943
14269
  */
@@ -14088,15 +14414,15 @@ export type AssetsTransferParameters = {
14088
14414
  */
14089
14415
  export type AssetsRestockParameters = {
14090
14416
  /**
14091
- * ID of the site to add the stock to.
14417
+ * ID of the site to add the stock to. A site the API key cannot see answers 404.
14092
14418
  */
14093
14419
  assets_site_id: string;
14094
14420
  /**
14095
- * Optional. The site's storage location the stock lands in; must belong to the site. Omit for the site's unbinned stock.
14421
+ * Optional. The site's storage location the stock lands in; one that is not the site's answers 404. Omit or send null for the site's unbinned stock.
14096
14422
  */
14097
- assets_sub_location_id?: string;
14423
+ assets_sub_location_id?: string | null;
14098
14424
  /**
14099
- * Number of units to add; greater than 0.
14425
+ * Number of units to add, as an integer of 1 or more. Any other value answers 422.
14100
14426
  */
14101
14427
  quantity: number;
14102
14428
  /**
@@ -14109,15 +14435,15 @@ export type AssetsRestockParameters = {
14109
14435
  */
14110
14436
  export type AssetsAdjustmentParameters = {
14111
14437
  /**
14112
- * ID of the site whose on-hand count is being set.
14438
+ * ID of the site whose on-hand count is being set. A site the API key cannot see answers 404.
14113
14439
  */
14114
14440
  assets_site_id: string;
14115
14441
  /**
14116
- * Optional. The site's storage location whose count is being set; must belong to the site. Omit to set the site's unbinned count.
14442
+ * Optional. The site's storage location whose count is being set; one that is not the site's answers 404. Omit or send null to set the site's unbinned count.
14117
14443
  */
14118
- assets_sub_location_id?: string;
14444
+ assets_sub_location_id?: string | null;
14119
14445
  /**
14120
- * The corrected on-hand count for the site; 0 or greater. The difference from the current count is recorded as the adjustment.
14446
+ * The corrected on-hand count for the site, as an integer of 0 or more; any other value answers 422. The difference from the current count is recorded as the adjustment.
14121
14447
  */
14122
14448
  new_quantity: number;
14123
14449
  /**
@@ -14134,6 +14460,38 @@ export type AssetsArchiveParameters = {
14134
14460
  */
14135
14461
  performed_by_user_id: string;
14136
14462
  };
14463
+ /**
14464
+ * Create the template's schedule on the product's serial items that don't have one yet. Items whose matching schedule has a different cadence are blocked and never seeded.
14465
+ */
14466
+ export type AssetsServiceScheduleSeedParameters = {
14467
+ /**
14468
+ * Optional. Serial item IDs to seed. An ID the API key cannot see answers 404; a visible item the template cannot seed, or a blank member, answers 422 at that member. Omit to seed every seedable item. An empty list, null, or a value that is not an array of strings answers 422.
14469
+ */
14470
+ assets_item_ids?: Array<string>;
14471
+ /**
14472
+ * ID of the user this seed is performed on behalf of, recorded as creator and updater of the seeded schedules. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422. A user outside the company that owns the API key answers 422.
14473
+ */
14474
+ performed_by_user_id: string;
14475
+ };
14476
+ /**
14477
+ * Rewrite blocked schedules — those sharing the template's name and kind with a different interval — to the template's cadence, which links them to it.
14478
+ */
14479
+ export type AssetsServiceScheduleSyncParameters = {
14480
+ /**
14481
+ * Optional. Blocked schedule IDs to sync. An ID the API key cannot see answers 404; a visible schedule the template cannot sync, or a blank member, answers 422 at that member. Omit to sync every blocked schedule. An empty list, null, or a value that is not an array of strings answers 422.
14482
+ */
14483
+ schedule_ids?: Array<string>;
14484
+ /**
14485
+ * ID of the user this sync is performed on behalf of, recorded as updater of the synced schedules. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422. A user outside the company that owns the API key answers 422.
14486
+ */
14487
+ performed_by_user_id: string;
14488
+ };
14489
+ /**
14490
+ * Revoke an active grant. The body takes no fields; send an empty object or no body. Revocation sets revoked_at and keeps the row; revoking it again answers 409 authorization_revoked.
14491
+ */
14492
+ export type CompetencyAssessorAuthorizationRevocationParametersWritable = {
14493
+ [key: string]: never;
14494
+ };
14137
14495
  /**
14138
14496
  * A page of certifications held by your company's workers.
14139
14497
  */
@@ -14486,6 +14844,10 @@ export type CreateApprenticeData = {
14486
14844
  url: '/api/v1/apprenticeship/programs/{program_id}/apprentices';
14487
14845
  };
14488
14846
  export type CreateApprenticeErrors = {
14847
+ /**
14848
+ * Bad Request
14849
+ */
14850
+ 400: Problem;
14489
14851
  /**
14490
14852
  * Forbidden
14491
14853
  */
@@ -14571,6 +14933,10 @@ export type CreateOccupationData = {
14571
14933
  url: '/api/v1/apprenticeship/programs/{program_id}/occupations';
14572
14934
  };
14573
14935
  export type CreateOccupationErrors = {
14936
+ /**
14937
+ * Bad Request
14938
+ */
14939
+ 400: Problem;
14574
14940
  /**
14575
14941
  * Forbidden
14576
14942
  */
@@ -14656,6 +15022,10 @@ export type UpdateOccupationData = {
14656
15022
  url: '/api/v1/apprenticeship/programs/{program_id}/occupations/{id}';
14657
15023
  };
14658
15024
  export type UpdateOccupationErrors = {
15025
+ /**
15026
+ * Bad Request
15027
+ */
15028
+ 400: Problem;
14659
15029
  /**
14660
15030
  * Forbidden
14661
15031
  */
@@ -16957,6 +17327,10 @@ export type UpdateDocumentData = {
16957
17327
  url: '/api/v1/assets/items/{item_id}/documents/{id}';
16958
17328
  };
16959
17329
  export type UpdateDocumentErrors = {
17330
+ /**
17331
+ * Bad Request
17332
+ */
17333
+ 400: Problem;
16960
17334
  /**
16961
17335
  * Forbidden
16962
17336
  */
@@ -17081,6 +17455,10 @@ export type CreateProductErrors = {
17081
17455
  * Forbidden
17082
17456
  */
17083
17457
  403: Problem;
17458
+ /**
17459
+ * Not Found
17460
+ */
17461
+ 404: Problem;
17084
17462
  /**
17085
17463
  * Unprocessable Content
17086
17464
  */
@@ -17159,6 +17537,10 @@ export type UpdateProductData = {
17159
17537
  url: '/api/v1/assets/products/{id}';
17160
17538
  };
17161
17539
  export type UpdateProductErrors = {
17540
+ /**
17541
+ * Bad Request
17542
+ */
17543
+ 400: Problem;
17162
17544
  /**
17163
17545
  * Forbidden
17164
17546
  */
@@ -17488,16 +17870,7 @@ export type UpdateServiceScheduleTemplateResponses = {
17488
17870
  };
17489
17871
  export type UpdateServiceScheduleTemplateResponse = UpdateServiceScheduleTemplateResponses[keyof UpdateServiceScheduleTemplateResponses];
17490
17872
  export type SeedServiceScheduleTemplateData = {
17491
- body: {
17492
- /**
17493
- * Serial item ids to seed; omit or send [] to seed every cleanly-seedable item
17494
- */
17495
- assets_item_ids?: Array<string>;
17496
- /**
17497
- * ID of the user this seed is performed on behalf of, recorded as creator and updater of the seeded schedules. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422. A user outside the company that owns the API key answers 422.
17498
- */
17499
- performed_by_user_id: string;
17500
- };
17873
+ body: AssetsServiceScheduleSeedParameters;
17501
17874
  path: {
17502
17875
  product_id: string;
17503
17876
  service_schedule_template_id: string;
@@ -17535,16 +17908,7 @@ export type SeedServiceScheduleTemplateResponses = {
17535
17908
  };
17536
17909
  export type SeedServiceScheduleTemplateResponse = SeedServiceScheduleTemplateResponses[keyof SeedServiceScheduleTemplateResponses];
17537
17910
  export type SyncServiceScheduleTemplateData = {
17538
- body: {
17539
- /**
17540
- * Blocked schedule ids to sync; omit or send [] to sync every blocked schedule
17541
- */
17542
- schedule_ids?: Array<string>;
17543
- /**
17544
- * ID of the user this sync is performed on behalf of, recorded as updater of the synced schedules. Omission answers 400; supplied null, a blank ID, or a wrong type answers 422. A user outside the company that owns the API key answers 422.
17545
- */
17546
- performed_by_user_id: string;
17547
- };
17911
+ body: AssetsServiceScheduleSyncParameters;
17548
17912
  path: {
17549
17913
  product_id: string;
17550
17914
  service_schedule_template_id: string;
@@ -17645,6 +18009,10 @@ export type CreateSiteErrors = {
17645
18009
  * Forbidden
17646
18010
  */
17647
18011
  403: Problem;
18012
+ /**
18013
+ * Not Found (backing site)
18014
+ */
18015
+ 404: Problem;
17648
18016
  /**
17649
18017
  * Unprocessable Content (no backing site and no name)
17650
18018
  */
@@ -17825,6 +18193,10 @@ export type CreateSubLocationErrors = {
17825
18193
  * Forbidden
17826
18194
  */
17827
18195
  403: Problem;
18196
+ /**
18197
+ * Not Found (holder or parent)
18198
+ */
18199
+ 404: Problem;
17828
18200
  /**
17829
18201
  * Unprocessable Content
17830
18202
  */
@@ -18368,6 +18740,10 @@ export type ListPwaUserCountsByProjectByMonthsData = {
18368
18740
  */
18369
18741
  'filter[year_month]'?: string;
18370
18742
  'filter[project_id]'?: string;
18743
+ /**
18744
+ * Filter to one job outside any project
18745
+ */
18746
+ 'filter[job_id]'?: string;
18371
18747
  filter?: string;
18372
18748
  'filter[unexpected]'?: string;
18373
18749
  };
@@ -19183,6 +19559,10 @@ export type UpdateCompanyProfileData = {
19183
19559
  url: '/api/v1/companies/{id}';
19184
19560
  };
19185
19561
  export type UpdateCompanyProfileErrors = {
19562
+ /**
19563
+ * Bad Request
19564
+ */
19565
+ 400: Problem;
19186
19566
  /**
19187
19567
  * Forbidden
19188
19568
  */
@@ -19395,26 +19775,225 @@ export type GetEvidenceItemResponses = {
19395
19775
  200: CompetencyEvidenceItemResponseObject;
19396
19776
  };
19397
19777
  export type GetEvidenceItemResponse = GetEvidenceItemResponses[keyof GetEvidenceItemResponses];
19398
- export type ListQualificationsData = {
19778
+ export type ListAssessorAuthorizationsData = {
19399
19779
  body?: never;
19400
19780
  path?: never;
19401
19781
  query?: {
19402
19782
  /**
19403
- * Standings held by this candidate.
19783
+ * Authorizations held by this user.
19404
19784
  */
19405
- 'filter[candidate_user_id]'?: string;
19785
+ 'filter[user_id]'?: string;
19406
19786
  /**
19407
- * Standings against this standard.
19787
+ * Authorizations noted against this department.
19788
+ */
19789
+ 'filter[companies_department_id]'?: string;
19790
+ /**
19791
+ * Authorizations for this standard.
19408
19792
  */
19409
19793
  'filter[competencies_standard_id]'?: string;
19410
19794
  /**
19411
- * Standings at this tier.
19795
+ * Authorizations of any of the given kinds. Comma-separate to match both (`authorized_assessor,qualified_assessor`).
19412
19796
  */
19413
- 'filter[level_sort_order]'?: number;
19414
- filter?: string;
19415
- 'filter[unexpected]'?: string;
19797
+ 'filter[kind]'?: Array<'authorized_assessor' | 'qualified_assessor'>;
19416
19798
  /**
19417
- * This pagination cursor corresponds to the cursor value found in the response in
19799
+ * Filter by lifecycle state. Defaults to `active` (non-active records are hidden); `revoked` returns only non-active records; `all` returns both.
19800
+ */
19801
+ 'filter[state]'?: 'active' | 'revoked' | 'all';
19802
+ 'filter[created_at][gte]'?: string;
19803
+ 'filter[created_at][lte]'?: string;
19804
+ 'filter[updated_at][gte]'?: string;
19805
+ 'filter[updated_at][lte]'?: string;
19806
+ 'filter[granted_at][gte]'?: string;
19807
+ 'filter[granted_at][lte]'?: string;
19808
+ 'filter[revoked_at][gte]'?: string;
19809
+ 'filter[revoked_at][lte]'?: string;
19810
+ filter?: string;
19811
+ 'filter[unexpected]'?: string;
19812
+ /**
19813
+ * This pagination cursor corresponds to the cursor value found in the response in
19814
+ * `meta.page.next_cursor`.
19815
+ */
19816
+ 'page[cursor]'?: string;
19817
+ /**
19818
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
19819
+ */
19820
+ 'page[limit]'?: number;
19821
+ page?: string;
19822
+ };
19823
+ url: '/api/v1/competencies/assessor_authorizations';
19824
+ };
19825
+ export type ListAssessorAuthorizationsErrors = {
19826
+ /**
19827
+ * Bad Request
19828
+ */
19829
+ 400: Problem;
19830
+ /**
19831
+ * Forbidden
19832
+ */
19833
+ 403: Problem;
19834
+ /**
19835
+ * Unprocessable Content
19836
+ */
19837
+ 422: Problem;
19838
+ };
19839
+ export type ListAssessorAuthorizationsError = ListAssessorAuthorizationsErrors[keyof ListAssessorAuthorizationsErrors];
19840
+ export type ListAssessorAuthorizationsResponses = {
19841
+ /**
19842
+ * Success
19843
+ */
19844
+ 200: {
19845
+ meta: Meta;
19846
+ links: Links;
19847
+ data: Array<CompetencyAssessorAuthorizationResponseObject>;
19848
+ };
19849
+ };
19850
+ export type ListAssessorAuthorizationsResponse = ListAssessorAuthorizationsResponses[keyof ListAssessorAuthorizationsResponses];
19851
+ export type CreateAssessorAuthorizationData = {
19852
+ body: CompetencyAssessorAuthorizationParameters;
19853
+ path?: never;
19854
+ query?: never;
19855
+ url: '/api/v1/competencies/assessor_authorizations';
19856
+ };
19857
+ export type CreateAssessorAuthorizationErrors = {
19858
+ /**
19859
+ * Bad Request
19860
+ */
19861
+ 400: Problem;
19862
+ /**
19863
+ * Forbidden
19864
+ */
19865
+ 403: Problem;
19866
+ /**
19867
+ * Not Found
19868
+ */
19869
+ 404: Problem;
19870
+ /**
19871
+ * Unprocessable Content
19872
+ */
19873
+ 422: Problem;
19874
+ };
19875
+ export type CreateAssessorAuthorizationError = CreateAssessorAuthorizationErrors[keyof CreateAssessorAuthorizationErrors];
19876
+ export type CreateAssessorAuthorizationResponses = {
19877
+ /**
19878
+ * Created
19879
+ */
19880
+ 201: CompetencyAssessorAuthorizationResponseObject;
19881
+ };
19882
+ export type CreateAssessorAuthorizationResponse = CreateAssessorAuthorizationResponses[keyof CreateAssessorAuthorizationResponses];
19883
+ export type GetAssessorAuthorizationData = {
19884
+ body?: never;
19885
+ path: {
19886
+ id: string;
19887
+ };
19888
+ query?: never;
19889
+ url: '/api/v1/competencies/assessor_authorizations/{id}';
19890
+ };
19891
+ export type GetAssessorAuthorizationErrors = {
19892
+ /**
19893
+ * Forbidden
19894
+ */
19895
+ 403: Problem;
19896
+ /**
19897
+ * Not Found
19898
+ */
19899
+ 404: Problem;
19900
+ };
19901
+ export type GetAssessorAuthorizationError = GetAssessorAuthorizationErrors[keyof GetAssessorAuthorizationErrors];
19902
+ export type GetAssessorAuthorizationResponses = {
19903
+ /**
19904
+ * Success
19905
+ */
19906
+ 200: CompetencyAssessorAuthorizationResponseObject;
19907
+ };
19908
+ export type GetAssessorAuthorizationResponse = GetAssessorAuthorizationResponses[keyof GetAssessorAuthorizationResponses];
19909
+ export type UpdateAssessorAuthorizationData = {
19910
+ body?: CompetencyAssessorAuthorizationUpdateParameters;
19911
+ path: {
19912
+ id: string;
19913
+ };
19914
+ query?: never;
19915
+ url: '/api/v1/competencies/assessor_authorizations/{id}';
19916
+ };
19917
+ export type UpdateAssessorAuthorizationErrors = {
19918
+ /**
19919
+ * Bad Request
19920
+ */
19921
+ 400: Problem;
19922
+ /**
19923
+ * Forbidden
19924
+ */
19925
+ 403: Problem;
19926
+ /**
19927
+ * Not Found
19928
+ */
19929
+ 404: Problem;
19930
+ /**
19931
+ * Conflict
19932
+ */
19933
+ 409: Problem;
19934
+ };
19935
+ export type UpdateAssessorAuthorizationError = UpdateAssessorAuthorizationErrors[keyof UpdateAssessorAuthorizationErrors];
19936
+ export type UpdateAssessorAuthorizationResponses = {
19937
+ /**
19938
+ * Success
19939
+ */
19940
+ 200: CompetencyAssessorAuthorizationResponseObject;
19941
+ };
19942
+ export type UpdateAssessorAuthorizationResponse = UpdateAssessorAuthorizationResponses[keyof UpdateAssessorAuthorizationResponses];
19943
+ export type RevokeAssessorAuthorizationData = {
19944
+ body?: CompetencyAssessorAuthorizationRevocationParametersWritable;
19945
+ path: {
19946
+ assessor_authorization_id: string;
19947
+ };
19948
+ query?: never;
19949
+ url: '/api/v1/competencies/assessor_authorizations/{assessor_authorization_id}/revocation';
19950
+ };
19951
+ export type RevokeAssessorAuthorizationErrors = {
19952
+ /**
19953
+ * Bad Request
19954
+ */
19955
+ 400: Problem;
19956
+ /**
19957
+ * Forbidden
19958
+ */
19959
+ 403: Problem;
19960
+ /**
19961
+ * Not Found
19962
+ */
19963
+ 404: Problem;
19964
+ /**
19965
+ * Conflict
19966
+ */
19967
+ 409: Problem;
19968
+ };
19969
+ export type RevokeAssessorAuthorizationError = RevokeAssessorAuthorizationErrors[keyof RevokeAssessorAuthorizationErrors];
19970
+ export type RevokeAssessorAuthorizationResponses = {
19971
+ /**
19972
+ * Created
19973
+ */
19974
+ 201: CompetencyAssessorAuthorizationResponseObject;
19975
+ };
19976
+ export type RevokeAssessorAuthorizationResponse = RevokeAssessorAuthorizationResponses[keyof RevokeAssessorAuthorizationResponses];
19977
+ export type ListQualificationsData = {
19978
+ body?: never;
19979
+ path?: never;
19980
+ query?: {
19981
+ /**
19982
+ * Standings held by this candidate.
19983
+ */
19984
+ 'filter[candidate_user_id]'?: string;
19985
+ /**
19986
+ * Standings against this standard.
19987
+ */
19988
+ 'filter[competencies_standard_id]'?: string;
19989
+ /**
19990
+ * Standings at this tier.
19991
+ */
19992
+ 'filter[level_sort_order]'?: number;
19993
+ filter?: string;
19994
+ 'filter[unexpected]'?: string;
19995
+ /**
19996
+ * This pagination cursor corresponds to the cursor value found in the response in
19418
19997
  * `meta.page.next_cursor`.
19419
19998
  */
19420
19999
  'page[cursor]'?: string;
@@ -19575,6 +20154,10 @@ export type UpdateCheckData = {
19575
20154
  url: '/api/v1/compliance/checks/{id}';
19576
20155
  };
19577
20156
  export type UpdateCheckErrors = {
20157
+ /**
20158
+ * Bad Request
20159
+ */
20160
+ 400: Problem;
19578
20161
  /**
19579
20162
  * Forbidden
19580
20163
  */
@@ -19726,6 +20309,10 @@ export type CreateCustomFieldConfigData = {
19726
20309
  url: '/api/v1/custom_field_configs';
19727
20310
  };
19728
20311
  export type CreateCustomFieldConfigErrors = {
20312
+ /**
20313
+ * Bad Request
20314
+ */
20315
+ 400: Problem;
19729
20316
  /**
19730
20317
  * Forbidden
19731
20318
  */
@@ -19808,6 +20395,10 @@ export type UpdateCustomFieldConfigData = {
19808
20395
  url: '/api/v1/custom_field_configs/{id}';
19809
20396
  };
19810
20397
  export type UpdateCustomFieldConfigErrors = {
20398
+ /**
20399
+ * Bad Request
20400
+ */
20401
+ 400: Problem;
19811
20402
  /**
19812
20403
  * Forbidden
19813
20404
  */
@@ -20790,6 +21381,10 @@ export type CreateJobTradeData = {
20790
21381
  url: '/api/v1/jobs/{job_id}/pwa/trades';
20791
21382
  };
20792
21383
  export type CreateJobTradeErrors = {
21384
+ /**
21385
+ * Bad Request
21386
+ */
21387
+ 400: Problem;
20793
21388
  /**
20794
21389
  * Forbidden
20795
21390
  */
@@ -20906,6 +21501,10 @@ export type CreateRateRuleData = {
20906
21501
  url: '/api/v1/jobs/{job_id}/wage_determinations/{wage_determination_id}/rate_rules';
20907
21502
  };
20908
21503
  export type CreateRateRuleErrors = {
21504
+ /**
21505
+ * Bad Request
21506
+ */
21507
+ 400: Problem;
20909
21508
  /**
20910
21509
  * Forbidden
20911
21510
  */
@@ -20914,6 +21513,10 @@ export type CreateRateRuleErrors = {
20914
21513
  * Unprocessable Content
20915
21514
  */
20916
21515
  422: Problem;
21516
+ /**
21517
+ * Service Unavailable
21518
+ */
21519
+ 503: Problem;
20917
21520
  };
20918
21521
  export type CreateRateRuleError = CreateRateRuleErrors[keyof CreateRateRuleErrors];
20919
21522
  export type CreateRateRuleResponses = {
@@ -21357,7 +21960,7 @@ export type CancelJobWageDeterminationScheduledTerminationData = {
21357
21960
  };
21358
21961
  export type CancelJobWageDeterminationScheduledTerminationErrors = {
21359
21962
  /**
21360
- * Forbidden
21963
+ * Forbidden (user-scoped key required)
21361
21964
  */
21362
21965
  403: Problem;
21363
21966
  /**
@@ -21406,7 +22009,7 @@ export type ScheduleJobWageDeterminationTerminationErrors = {
21406
22009
  */
21407
22010
  400: Problem;
21408
22011
  /**
21409
- * Forbidden
22012
+ * Forbidden (user-scoped key required)
21410
22013
  */
21411
22014
  403: Problem;
21412
22015
  /**
@@ -21757,7 +22360,7 @@ export type CreateJobErrors = {
21757
22360
  */
21758
22361
  403: Problem;
21759
22362
  /**
21760
- * Template not found
22363
+ * Not Found
21761
22364
  */
21762
22365
  404: Problem;
21763
22366
  /**
@@ -22628,7 +23231,7 @@ export type CreateOvertimeRuleData = {
22628
23231
  };
22629
23232
  export type CreateOvertimeRuleErrors = {
22630
23233
  /**
22631
- * Bad Request (unknown body key)
23234
+ * Bad Request
22632
23235
  */
22633
23236
  400: Problem;
22634
23237
  /**
@@ -22742,7 +23345,7 @@ export type UpdateOvertimeRuleData = {
22742
23345
  };
22743
23346
  export type UpdateOvertimeRuleErrors = {
22744
23347
  /**
22745
- * Bad Request (unknown body key)
23348
+ * Bad Request
22746
23349
  */
22747
23350
  400: Problem;
22748
23351
  /**
@@ -24240,6 +24843,10 @@ export type CreateFringeBenefitPlanErrors = {
24240
24843
  * Forbidden
24241
24844
  */
24242
24845
  403: Problem;
24846
+ /**
24847
+ * Not Found
24848
+ */
24849
+ 404: Problem;
24243
24850
  /**
24244
24851
  * Unprocessable Content
24245
24852
  */
@@ -24681,6 +25288,10 @@ export type CreatePayrollRunErrors = {
24681
25288
  * Forbidden
24682
25289
  */
24683
25290
  403: Problem;
25291
+ /**
25292
+ * Not Found
25293
+ */
25294
+ 404: Problem;
24684
25295
  /**
24685
25296
  * Unprocessable Content
24686
25297
  */
@@ -26382,6 +26993,10 @@ export type CreateProjectTradeData = {
26382
26993
  url: '/api/v1/projects/{project_id}/pwa/trades';
26383
26994
  };
26384
26995
  export type CreateProjectTradeErrors = {
26996
+ /**
26997
+ * Bad Request
26998
+ */
26999
+ 400: Problem;
26385
27000
  /**
26386
27001
  * Forbidden
26387
27002
  */
@@ -26403,26 +27018,22 @@ export type CreateProjectTradeResponses = {
26403
27018
  201: PwaTradeResponseObject;
26404
27019
  };
26405
27020
  export type CreateProjectTradeResponse = CreateProjectTradeResponses[keyof CreateProjectTradeResponses];
26406
- export type ListProjectSitesData = {
27021
+ export type ListProjectWageDeterminationRateRuleHistoryData = {
26407
27022
  body?: never;
26408
27023
  path: {
26409
27024
  project_id: string;
26410
- };
26411
- query?: {
26412
- /**
26413
- * This pagination cursor corresponds to the cursor value found in the response in
26414
- * `meta.page.next_cursor`.
26415
- */
26416
- 'page[cursor]'?: string;
27025
+ wage_determination_id: string;
26417
27026
  /**
26418
- * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
27027
+ * The rule's version-stable identity, as returned in `id`.
26419
27028
  */
26420
- 'page[limit]'?: number;
26421
- page?: string;
27029
+ rate_rule_id: string;
26422
27030
  };
26423
- url: '/api/v1/projects/{project_id}/sites';
27031
+ query?: {
27032
+ 'as_of[valid]'?: string;
27033
+ };
27034
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/rate_rules/{rate_rule_id}/history';
26424
27035
  };
26425
- export type ListProjectSitesErrors = {
27036
+ export type ListProjectWageDeterminationRateRuleHistoryErrors = {
26426
27037
  /**
26427
27038
  * Bad Request
26428
27039
  */
@@ -26436,27 +27047,37 @@ export type ListProjectSitesErrors = {
26436
27047
  */
26437
27048
  404: Problem;
26438
27049
  };
26439
- export type ListProjectSitesError = ListProjectSitesErrors[keyof ListProjectSitesErrors];
26440
- export type ListProjectSitesResponses = {
27050
+ export type ListProjectWageDeterminationRateRuleHistoryError = ListProjectWageDeterminationRateRuleHistoryErrors[keyof ListProjectWageDeterminationRateRuleHistoryErrors];
27051
+ export type ListProjectWageDeterminationRateRuleHistoryResponses = {
26441
27052
  /**
26442
27053
  * Success
26443
27054
  */
26444
27055
  200: {
26445
27056
  meta: Meta;
26446
27057
  links: Links;
26447
- data: Array<ProjectSiteResponseObject>;
27058
+ data: Array<ProjectRateRuleHistoryVersionObject>;
26448
27059
  };
26449
27060
  };
26450
- export type ListProjectSitesResponse = ListProjectSitesResponses[keyof ListProjectSitesResponses];
26451
- export type CreateProjectSiteData = {
26452
- body: ProjectSiteParameters;
27061
+ export type ListProjectWageDeterminationRateRuleHistoryResponse = ListProjectWageDeterminationRateRuleHistoryResponses[keyof ListProjectWageDeterminationRateRuleHistoryResponses];
27062
+ export type ListProjectWageDeterminationRateRulesData = {
27063
+ body?: never;
26453
27064
  path: {
26454
27065
  project_id: string;
27066
+ wage_determination_id: string;
26455
27067
  };
26456
- query?: never;
26457
- url: '/api/v1/projects/{project_id}/sites';
27068
+ query?: {
27069
+ /**
27070
+ * Read the version valid at this point in time. Defaults to now.
27071
+ */
27072
+ 'as_of[valid]'?: string;
27073
+ as_of?: string;
27074
+ 'as_of[bogus_axis]'?: string;
27075
+ 'as_of[valid][gte]'?: string;
27076
+ 'as_of[transaction]'?: string;
27077
+ };
27078
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/rate_rules';
26458
27079
  };
26459
- export type CreateProjectSiteErrors = {
27080
+ export type ListProjectWageDeterminationRateRulesErrors = {
26460
27081
  /**
26461
27082
  * Bad Request
26462
27083
  */
@@ -26465,35 +27086,178 @@ export type CreateProjectSiteErrors = {
26465
27086
  * Forbidden
26466
27087
  */
26467
27088
  403: Problem;
26468
- /**
26469
- * Not Found
26470
- */
26471
- 404: Problem;
26472
27089
  /**
26473
27090
  * Unprocessable Content
26474
27091
  */
26475
27092
  422: Problem;
26476
27093
  };
26477
- export type CreateProjectSiteError = CreateProjectSiteErrors[keyof CreateProjectSiteErrors];
26478
- export type CreateProjectSiteResponses = {
27094
+ export type ListProjectWageDeterminationRateRulesError = ListProjectWageDeterminationRateRulesErrors[keyof ListProjectWageDeterminationRateRulesErrors];
27095
+ export type ListProjectWageDeterminationRateRulesResponses = {
26479
27096
  /**
26480
- * Created
27097
+ * Success
26481
27098
  */
26482
- 201: ProjectSiteResponseObject;
27099
+ 200: {
27100
+ meta: Meta;
27101
+ links: Links;
27102
+ data: Array<ProjectRateRuleResponseObject>;
27103
+ };
26483
27104
  };
26484
- export type CreateProjectSiteResponse = CreateProjectSiteResponses[keyof CreateProjectSiteResponses];
26485
- export type DeleteProjectSiteData = {
26486
- body?: never;
27105
+ export type ListProjectWageDeterminationRateRulesResponse = ListProjectWageDeterminationRateRulesResponses[keyof ListProjectWageDeterminationRateRulesResponses];
27106
+ export type CreateProjectWageDeterminationRateRuleData = {
27107
+ body: RateRuleParameters;
26487
27108
  path: {
26488
27109
  project_id: string;
26489
- id: string;
27110
+ wage_determination_id: string;
26490
27111
  };
26491
27112
  query?: never;
26492
- url: '/api/v1/projects/{project_id}/sites/{id}';
27113
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/rate_rules';
26493
27114
  };
26494
- export type DeleteProjectSiteErrors = {
27115
+ export type CreateProjectWageDeterminationRateRuleErrors = {
26495
27116
  /**
26496
- * Forbidden
27117
+ * Bad Request
27118
+ */
27119
+ 400: Problem;
27120
+ /**
27121
+ * Forbidden
27122
+ */
27123
+ 403: Problem;
27124
+ /**
27125
+ * Unprocessable Content
27126
+ */
27127
+ 422: Problem;
27128
+ };
27129
+ export type CreateProjectWageDeterminationRateRuleError = CreateProjectWageDeterminationRateRuleErrors[keyof CreateProjectWageDeterminationRateRuleErrors];
27130
+ export type CreateProjectWageDeterminationRateRuleResponses = {
27131
+ /**
27132
+ * Created
27133
+ */
27134
+ 201: ProjectRateRuleResponseObject;
27135
+ };
27136
+ export type CreateProjectWageDeterminationRateRuleResponse = CreateProjectWageDeterminationRateRuleResponses[keyof CreateProjectWageDeterminationRateRuleResponses];
27137
+ export type GetProjectWageDeterminationRateRuleData = {
27138
+ body?: never;
27139
+ path: {
27140
+ project_id: string;
27141
+ wage_determination_id: string;
27142
+ id: string;
27143
+ };
27144
+ query?: {
27145
+ /**
27146
+ * Read the version valid at this point in time. Defaults to now.
27147
+ */
27148
+ 'as_of[valid]'?: string;
27149
+ };
27150
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/rate_rules/{id}';
27151
+ };
27152
+ export type GetProjectWageDeterminationRateRuleErrors = {
27153
+ /**
27154
+ * Forbidden
27155
+ */
27156
+ 403: Problem;
27157
+ /**
27158
+ * Not Found
27159
+ */
27160
+ 404: Problem;
27161
+ };
27162
+ export type GetProjectWageDeterminationRateRuleError = GetProjectWageDeterminationRateRuleErrors[keyof GetProjectWageDeterminationRateRuleErrors];
27163
+ export type GetProjectWageDeterminationRateRuleResponses = {
27164
+ /**
27165
+ * Success
27166
+ */
27167
+ 200: ProjectRateRuleResponseObject;
27168
+ };
27169
+ export type GetProjectWageDeterminationRateRuleResponse = GetProjectWageDeterminationRateRuleResponses[keyof GetProjectWageDeterminationRateRuleResponses];
27170
+ export type ListProjectSitesData = {
27171
+ body?: never;
27172
+ path: {
27173
+ project_id: string;
27174
+ };
27175
+ query?: {
27176
+ /**
27177
+ * This pagination cursor corresponds to the cursor value found in the response in
27178
+ * `meta.page.next_cursor`.
27179
+ */
27180
+ 'page[cursor]'?: string;
27181
+ /**
27182
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
27183
+ */
27184
+ 'page[limit]'?: number;
27185
+ page?: string;
27186
+ };
27187
+ url: '/api/v1/projects/{project_id}/sites';
27188
+ };
27189
+ export type ListProjectSitesErrors = {
27190
+ /**
27191
+ * Bad Request
27192
+ */
27193
+ 400: Problem;
27194
+ /**
27195
+ * Forbidden
27196
+ */
27197
+ 403: Problem;
27198
+ /**
27199
+ * Not Found
27200
+ */
27201
+ 404: Problem;
27202
+ };
27203
+ export type ListProjectSitesError = ListProjectSitesErrors[keyof ListProjectSitesErrors];
27204
+ export type ListProjectSitesResponses = {
27205
+ /**
27206
+ * Success
27207
+ */
27208
+ 200: {
27209
+ meta: Meta;
27210
+ links: Links;
27211
+ data: Array<ProjectSiteResponseObject>;
27212
+ };
27213
+ };
27214
+ export type ListProjectSitesResponse = ListProjectSitesResponses[keyof ListProjectSitesResponses];
27215
+ export type CreateProjectSiteData = {
27216
+ body: ProjectSiteParameters;
27217
+ path: {
27218
+ project_id: string;
27219
+ };
27220
+ query?: never;
27221
+ url: '/api/v1/projects/{project_id}/sites';
27222
+ };
27223
+ export type CreateProjectSiteErrors = {
27224
+ /**
27225
+ * Bad Request
27226
+ */
27227
+ 400: Problem;
27228
+ /**
27229
+ * Forbidden
27230
+ */
27231
+ 403: Problem;
27232
+ /**
27233
+ * Not Found
27234
+ */
27235
+ 404: Problem;
27236
+ /**
27237
+ * Unprocessable Content
27238
+ */
27239
+ 422: Problem;
27240
+ };
27241
+ export type CreateProjectSiteError = CreateProjectSiteErrors[keyof CreateProjectSiteErrors];
27242
+ export type CreateProjectSiteResponses = {
27243
+ /**
27244
+ * Created
27245
+ */
27246
+ 201: ProjectSiteResponseObject;
27247
+ };
27248
+ export type CreateProjectSiteResponse = CreateProjectSiteResponses[keyof CreateProjectSiteResponses];
27249
+ export type DeleteProjectSiteData = {
27250
+ body?: never;
27251
+ path: {
27252
+ project_id: string;
27253
+ id: string;
27254
+ };
27255
+ query?: never;
27256
+ url: '/api/v1/projects/{project_id}/sites/{id}';
27257
+ };
27258
+ export type DeleteProjectSiteErrors = {
27259
+ /**
27260
+ * Forbidden
26497
27261
  */
26498
27262
  403: Problem;
26499
27263
  /**
@@ -26571,6 +27335,322 @@ export type UpdateProjectSiteResponses = {
26571
27335
  200: ProjectSiteResponseObject;
26572
27336
  };
26573
27337
  export type UpdateProjectSiteResponse = UpdateProjectSiteResponses[keyof UpdateProjectSiteResponses];
27338
+ export type ShiftProjectWageDeterminationGenesisData = {
27339
+ body: ProjectWageDeterminationGenesisParameters;
27340
+ headers: {
27341
+ /**
27342
+ * Version validator this write is composed against — the `ETag` from a read of this determination, or `*` to write against whatever exists. See "Version validators" in the API overview.
27343
+ */
27344
+ 'If-Match': string;
27345
+ };
27346
+ path: {
27347
+ project_id: string;
27348
+ wage_determination_id: string;
27349
+ };
27350
+ query?: never;
27351
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/genesis';
27352
+ };
27353
+ export type ShiftProjectWageDeterminationGenesisErrors = {
27354
+ /**
27355
+ * Bad Request (missing effective_date)
27356
+ */
27357
+ 400: Problem;
27358
+ /**
27359
+ * Forbidden
27360
+ */
27361
+ 403: Problem;
27362
+ /**
27363
+ * Not Found
27364
+ */
27365
+ 404: Problem;
27366
+ /**
27367
+ * Conflict
27368
+ */
27369
+ 409: Problem;
27370
+ /**
27371
+ * Precondition Failed
27372
+ */
27373
+ 412: Problem;
27374
+ /**
27375
+ * Unprocessable Content
27376
+ */
27377
+ 422: Problem;
27378
+ /**
27379
+ * Precondition Required
27380
+ */
27381
+ 428: Problem;
27382
+ };
27383
+ export type ShiftProjectWageDeterminationGenesisError = ShiftProjectWageDeterminationGenesisErrors[keyof ShiftProjectWageDeterminationGenesisErrors];
27384
+ export type ShiftProjectWageDeterminationGenesisResponses = {
27385
+ /**
27386
+ * Success
27387
+ */
27388
+ 200: ProjectWageDeterminationResponseObject;
27389
+ };
27390
+ export type ShiftProjectWageDeterminationGenesisResponse = ShiftProjectWageDeterminationGenesisResponses[keyof ShiftProjectWageDeterminationGenesisResponses];
27391
+ export type ListProjectWageDeterminationHistoryData = {
27392
+ body?: never;
27393
+ path: {
27394
+ project_id: string;
27395
+ /**
27396
+ * The determination's version-stable identity, as returned in `id`.
27397
+ */
27398
+ wage_determination_id: string;
27399
+ };
27400
+ query?: {
27401
+ 'as_of[valid]'?: string;
27402
+ };
27403
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/history';
27404
+ };
27405
+ export type ListProjectWageDeterminationHistoryErrors = {
27406
+ /**
27407
+ * Bad Request
27408
+ */
27409
+ 400: Problem;
27410
+ /**
27411
+ * Forbidden
27412
+ */
27413
+ 403: Problem;
27414
+ /**
27415
+ * Not Found
27416
+ */
27417
+ 404: Problem;
27418
+ };
27419
+ export type ListProjectWageDeterminationHistoryError = ListProjectWageDeterminationHistoryErrors[keyof ListProjectWageDeterminationHistoryErrors];
27420
+ export type ListProjectWageDeterminationHistoryResponses = {
27421
+ /**
27422
+ * Success
27423
+ */
27424
+ 200: {
27425
+ meta: Meta;
27426
+ links: Links;
27427
+ data: Array<ProjectWageDeterminationHistoryVersionObject>;
27428
+ };
27429
+ };
27430
+ export type ListProjectWageDeterminationHistoryResponse = ListProjectWageDeterminationHistoryResponses[keyof ListProjectWageDeterminationHistoryResponses];
27431
+ export type CancelProjectWageDeterminationScheduledChangesData = {
27432
+ body?: never;
27433
+ headers: {
27434
+ /**
27435
+ * Version validator this write is composed against — the `ETag` from a read of this determination, or `*` to write against whatever exists. See "Version validators" in the API overview.
27436
+ */
27437
+ 'If-Match': string;
27438
+ };
27439
+ path: {
27440
+ project_id: string;
27441
+ wage_determination_id: string;
27442
+ };
27443
+ query?: never;
27444
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/scheduled_changes';
27445
+ };
27446
+ export type CancelProjectWageDeterminationScheduledChangesErrors = {
27447
+ /**
27448
+ * Forbidden
27449
+ */
27450
+ 403: Problem;
27451
+ /**
27452
+ * Not Found
27453
+ */
27454
+ 404: Problem;
27455
+ /**
27456
+ * Precondition Failed
27457
+ */
27458
+ 412: Problem;
27459
+ /**
27460
+ * Unprocessable Content
27461
+ */
27462
+ 422: Problem;
27463
+ /**
27464
+ * Precondition Required
27465
+ */
27466
+ 428: Problem;
27467
+ };
27468
+ export type CancelProjectWageDeterminationScheduledChangesError = CancelProjectWageDeterminationScheduledChangesErrors[keyof CancelProjectWageDeterminationScheduledChangesErrors];
27469
+ export type CancelProjectWageDeterminationScheduledChangesResponses = {
27470
+ /**
27471
+ * Success
27472
+ */
27473
+ 200: ProjectWageDeterminationResponseObject;
27474
+ };
27475
+ export type CancelProjectWageDeterminationScheduledChangesResponse = CancelProjectWageDeterminationScheduledChangesResponses[keyof CancelProjectWageDeterminationScheduledChangesResponses];
27476
+ export type ListProjectWageDeterminationScheduledChangesData = {
27477
+ body?: never;
27478
+ path: {
27479
+ project_id: string;
27480
+ wage_determination_id: string;
27481
+ };
27482
+ query?: never;
27483
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/scheduled_changes';
27484
+ };
27485
+ export type ListProjectWageDeterminationScheduledChangesErrors = {
27486
+ /**
27487
+ * Forbidden
27488
+ */
27489
+ 403: Problem;
27490
+ /**
27491
+ * Not Found
27492
+ */
27493
+ 404: Problem;
27494
+ };
27495
+ export type ListProjectWageDeterminationScheduledChangesError = ListProjectWageDeterminationScheduledChangesErrors[keyof ListProjectWageDeterminationScheduledChangesErrors];
27496
+ export type ListProjectWageDeterminationScheduledChangesResponses = {
27497
+ /**
27498
+ * Success with scheduled changes
27499
+ */
27500
+ 200: Array<ProjectWageDeterminationResponseObject>;
27501
+ };
27502
+ export type ListProjectWageDeterminationScheduledChangesResponse = ListProjectWageDeterminationScheduledChangesResponses[keyof ListProjectWageDeterminationScheduledChangesResponses];
27503
+ export type ScheduleProjectWageDeterminationChangeData = {
27504
+ body: ProjectWageDeterminationScheduledChangeParameters;
27505
+ headers: {
27506
+ /**
27507
+ * Version validator this write is composed against — the `ETag` from a read of this determination, or `*` to write against whatever exists. See "Version validators" in the API overview.
27508
+ */
27509
+ 'If-Match': string;
27510
+ };
27511
+ path: {
27512
+ project_id: string;
27513
+ wage_determination_id: string;
27514
+ };
27515
+ query?: never;
27516
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/scheduled_changes';
27517
+ };
27518
+ export type ScheduleProjectWageDeterminationChangeErrors = {
27519
+ /**
27520
+ * Bad Request (missing effective_date)
27521
+ */
27522
+ 400: Problem;
27523
+ /**
27524
+ * Forbidden
27525
+ */
27526
+ 403: Problem;
27527
+ /**
27528
+ * Not Found
27529
+ */
27530
+ 404: Problem;
27531
+ /**
27532
+ * Conflict
27533
+ */
27534
+ 409: Problem;
27535
+ /**
27536
+ * Precondition Failed
27537
+ */
27538
+ 412: Problem;
27539
+ /**
27540
+ * Unprocessable Content
27541
+ */
27542
+ 422: Problem;
27543
+ /**
27544
+ * Precondition Required
27545
+ */
27546
+ 428: Problem;
27547
+ };
27548
+ export type ScheduleProjectWageDeterminationChangeError = ScheduleProjectWageDeterminationChangeErrors[keyof ScheduleProjectWageDeterminationChangeErrors];
27549
+ export type ScheduleProjectWageDeterminationChangeResponses = {
27550
+ /**
27551
+ * Created
27552
+ */
27553
+ 201: ProjectWageDeterminationResponseObject;
27554
+ };
27555
+ export type ScheduleProjectWageDeterminationChangeResponse = ScheduleProjectWageDeterminationChangeResponses[keyof ScheduleProjectWageDeterminationChangeResponses];
27556
+ export type CancelProjectWageDeterminationScheduledTerminationData = {
27557
+ body?: never;
27558
+ headers: {
27559
+ /**
27560
+ * Version validator this write is composed against — the `ETag` from a read of this determination, or `*` to write against whatever exists. See "Version validators" in the API overview.
27561
+ */
27562
+ 'If-Match': string;
27563
+ };
27564
+ path: {
27565
+ project_id: string;
27566
+ wage_determination_id: string;
27567
+ };
27568
+ query?: never;
27569
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/scheduled_termination';
27570
+ };
27571
+ export type CancelProjectWageDeterminationScheduledTerminationErrors = {
27572
+ /**
27573
+ * Forbidden
27574
+ */
27575
+ 403: Problem;
27576
+ /**
27577
+ * Not Found
27578
+ */
27579
+ 404: Problem;
27580
+ /**
27581
+ * Precondition Failed
27582
+ */
27583
+ 412: Problem;
27584
+ /**
27585
+ * Unprocessable Content
27586
+ */
27587
+ 422: Problem;
27588
+ /**
27589
+ * Precondition Required
27590
+ */
27591
+ 428: Problem;
27592
+ };
27593
+ export type CancelProjectWageDeterminationScheduledTerminationError = CancelProjectWageDeterminationScheduledTerminationErrors[keyof CancelProjectWageDeterminationScheduledTerminationErrors];
27594
+ export type CancelProjectWageDeterminationScheduledTerminationResponses = {
27595
+ /**
27596
+ * Success
27597
+ */
27598
+ 200: ProjectWageDeterminationResponseObject;
27599
+ };
27600
+ export type CancelProjectWageDeterminationScheduledTerminationResponse = CancelProjectWageDeterminationScheduledTerminationResponses[keyof CancelProjectWageDeterminationScheduledTerminationResponses];
27601
+ export type ScheduleProjectWageDeterminationTerminationData = {
27602
+ body: ProjectWageDeterminationScheduledTerminationParameters;
27603
+ headers: {
27604
+ /**
27605
+ * Version validator this write is composed against — the `ETag` from a read of this determination, or `*` to write against whatever exists. See "Version validators" in the API overview.
27606
+ */
27607
+ 'If-Match': string;
27608
+ };
27609
+ path: {
27610
+ project_id: string;
27611
+ wage_determination_id: string;
27612
+ };
27613
+ query?: never;
27614
+ url: '/api/v1/projects/{project_id}/wage_determinations/{wage_determination_id}/scheduled_termination';
27615
+ };
27616
+ export type ScheduleProjectWageDeterminationTerminationErrors = {
27617
+ /**
27618
+ * Bad Request (missing effective_date)
27619
+ */
27620
+ 400: Problem;
27621
+ /**
27622
+ * Forbidden
27623
+ */
27624
+ 403: Problem;
27625
+ /**
27626
+ * Not Found
27627
+ */
27628
+ 404: Problem;
27629
+ /**
27630
+ * Conflict
27631
+ */
27632
+ 409: Problem;
27633
+ /**
27634
+ * Precondition Failed
27635
+ */
27636
+ 412: Problem;
27637
+ /**
27638
+ * Unprocessable Content
27639
+ */
27640
+ 422: Problem;
27641
+ /**
27642
+ * Precondition Required
27643
+ */
27644
+ 428: Problem;
27645
+ };
27646
+ export type ScheduleProjectWageDeterminationTerminationError = ScheduleProjectWageDeterminationTerminationErrors[keyof ScheduleProjectWageDeterminationTerminationErrors];
27647
+ export type ScheduleProjectWageDeterminationTerminationResponses = {
27648
+ /**
27649
+ * Created
27650
+ */
27651
+ 201: ProjectWageDeterminationResponseObject;
27652
+ };
27653
+ export type ScheduleProjectWageDeterminationTerminationResponse = ScheduleProjectWageDeterminationTerminationResponses[keyof ScheduleProjectWageDeterminationTerminationResponses];
26574
27654
  export type ListProjectWageDeterminationsData = {
26575
27655
  body?: never;
26576
27656
  path: {
@@ -26798,6 +27878,18 @@ export type ListProjectsData = {
26798
27878
  * Fuzzy-matches the project name (trigram word-similarity). Matches the name column only — not external_id.
26799
27879
  */
26800
27880
  'filter[name]'?: string;
27881
+ /**
27882
+ * Return only projects whose owned_by_company_id matches this value exactly.
27883
+ */
27884
+ 'filter[owned_by_company_id]'?: string;
27885
+ /**
27886
+ * Return only visible projects that have this job.
27887
+ */
27888
+ 'filter[job_id]'?: string;
27889
+ /**
27890
+ * Return only visible projects that have this site.
27891
+ */
27892
+ 'filter[site_id]'?: string;
26801
27893
  'filter[created_at][gte]'?: string;
26802
27894
  'filter[created_at][lte]'?: string;
26803
27895
  'filter[updated_at][gte]'?: string;
@@ -27107,6 +28199,10 @@ export type CreateApprenticeshipOccupationErrors = {
27107
28199
  * Forbidden
27108
28200
  */
27109
28201
  403: Problem;
28202
+ /**
28203
+ * Not Found
28204
+ */
28205
+ 404: Problem;
27110
28206
  /**
27111
28207
  * Unprocessable Content
27112
28208
  */
@@ -28988,6 +30084,10 @@ export type UpdateTimecodeErrors = {
28988
30084
  * Forbidden
28989
30085
  */
28990
30086
  403: Problem;
30087
+ /**
30088
+ * Not Found
30089
+ */
30090
+ 404: Problem;
28991
30091
  /**
28992
30092
  * Conflict
28993
30093
  */
@@ -29887,6 +30987,10 @@ export type AddUserRolesErrors = {
29887
30987
  * Forbidden
29888
30988
  */
29889
30989
  403: Problem;
30990
+ /**
30991
+ * Not Found
30992
+ */
30993
+ 404: Problem;
29890
30994
  /**
29891
30995
  * Unprocessable Entity
29892
30996
  */
@@ -30136,6 +31240,10 @@ export type CreateCompanyErrors = {
30136
31240
  * Forbidden
30137
31241
  */
30138
31242
  403: Problem;
31243
+ /**
31244
+ * Not Found
31245
+ */
31246
+ 404: Problem;
30139
31247
  /**
30140
31248
  * Unprocessable Content
30141
31249
  */
@@ -30301,6 +31409,10 @@ export type CreateUserErrors = {
30301
31409
  * Forbidden
30302
31410
  */
30303
31411
  403: Problem;
31412
+ /**
31413
+ * Not Found
31414
+ */
31415
+ 404: Problem;
30304
31416
  /**
30305
31417
  * Unprocessable Content
30306
31418
  */