@dsptch-work/api-client 0.24.0 → 0.26.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.
@@ -161,6 +161,12 @@ export type Problem = {
161
161
  *
162
162
  * The credential is valid, but this action on this record is refused by policy. The operation is not available to this principal.
163
163
  *
164
+ * ### forbidden_key
165
+ *
166
+ * **Field Not Writable By Key**
167
+ *
168
+ * The request body carries a field the operation accepts, but the user this user-scoped API key acts for may not write it, as their role could not in the DSPTCH app. Nothing was written. Remove the fields the detail names, or send the write with a key whose user may write them.
169
+ *
164
170
  * ### insufficient_api_key_scope
165
171
  *
166
172
  * **Insufficient API Key Scope**
@@ -370,7 +376,7 @@ export type Problem = {
370
376
  * 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.
371
377
  *
372
378
  */
373
- 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' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_terminated' | 'import_in_progress' | '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';
379
+ 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' | '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';
374
380
  export type ApiKeyScopeResponseObject = {
375
381
  resource: string;
376
382
  action: 'read' | 'create' | 'update' | 'delete';
@@ -383,7 +389,7 @@ export type DirectUploadParameters = {
383
389
  /**
384
390
  * What the file is for, named as the endpoint that will attach it (for example `assets.vendors`). Required. It decides where the file is stored, and the signed ID this call returns is issued for that resource alone — it will not resolve at any other endpoint, so a vendor logo cannot be attached as an avatar, or an avatar as a logo.
385
391
  */
386
- resource: 'assets.items' | 'assets.items.documents' | 'assets.items.service_events' | 'assets.products' | 'assets.vendors' | 'compliance.checks' | 'internal.company_todos' | 'internal.job_todos' | 'internal.project_todos' | 'pay_periods.imports.aggregate_times' | 'pay_periods.imports.dsptch_cprs' | 'pay_periods.imports.time_entries' | 'payrolls.payroll_runs.imports.paystubs' | 'users';
392
+ resource: 'assets.items' | 'assets.items.documents' | 'assets.items.service_events' | 'assets.products' | 'assets.vendors' | 'compliance.checks' | 'internal.companies' | 'internal.company_todos' | 'internal.job_todos' | 'internal.project_todos' | 'pay_periods.imports.aggregate_times' | 'pay_periods.imports.dsptch_cprs' | 'pay_periods.imports.time_entries' | 'payrolls.payroll_runs.imports.paystubs' | 'users';
387
393
  /**
388
394
  * Metadata describing the file being registered, before its bytes are uploaded.
389
395
  */
@@ -1026,7 +1032,7 @@ export type ApprenticeshipOccupationUpdateParameters = {
1026
1032
  */
1027
1033
  export type ApprenticeshipProgramEmployerParameters = {
1028
1034
  /**
1029
- * ID of the company to authorize as an employer in this program; it need not be related to the sponsor, since a group program names unaffiliated contractors. Naming a company here grants its admins and managers read access to this program, the right to enroll their own workers in it, the right to curate its trade-to-occupation scope decisions, and a passing apprenticeship-program compliance check; it grants no access to that company's own data. Cannot be changed once the employer has apprentices. Required.
1035
+ * ID of the company to authorize as an employer. A company-scoped key may name only its own company; a user-scoped key may name a company its user administers or manages. Required.
1030
1036
  */
1031
1037
  company_id: string;
1032
1038
  /**
@@ -1035,11 +1041,11 @@ export type ApprenticeshipProgramEmployerParameters = {
1035
1041
  require_timecard_allocation?: boolean;
1036
1042
  };
1037
1043
  /**
1038
- * Update an employer authorization in a program. Send only the fields to change; only the program's sponsor may manage this roster.
1044
+ * Update an employer authorization in a program. Send only the fields to change; only the program's sponsor may manage this roster, and a company-scoped key may change only the row naming its own company.
1039
1045
  */
1040
1046
  export type ApprenticeshipProgramEmployerUpdateParameters = {
1041
1047
  /**
1042
- * ID of the company authorized as an employer in this program. It cannot be changed once the employer has apprentices; omit to leave it unchanged.
1048
+ * ID of the company authorized as an employer. A company-scoped key may name only its own company; a user-scoped key may name a company its user administers or manages. Omit to leave it unchanged.
1043
1049
  */
1044
1050
  company_id?: string;
1045
1051
  /**
@@ -1528,7 +1534,7 @@ export type PeopleEmploymentCreateParameters = {
1528
1534
  */
1529
1535
  user_id: string;
1530
1536
  /**
1531
- * First day of the stint, as a calendar date (`YYYY-MM-DD`). Required; interpreted at midnight in the credential company's time zone. A value carrying a time component is refused with `422` rather than truncated.
1537
+ * First day of the stint, as a calendar date (`YYYY-MM-DD`). Required; interpreted at midnight in the credential company's time zone.
1532
1538
  */
1533
1539
  hire_date: string;
1534
1540
  /**
@@ -1711,7 +1717,7 @@ export type PeopleEmploymentScheduledChangeUpdateParameters = {
1711
1717
  */
1712
1718
  export type PeopleEmploymentGenesisParameters = {
1713
1719
  /**
1714
- * The timeline's new start, as a calendar date (`YYYY-MM-DD`). Required; a value carrying a time component is refused with `422` rather than truncated. 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.
1720
+ * 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.
1715
1721
  */
1716
1722
  effective_date?: string;
1717
1723
  };
@@ -1720,7 +1726,7 @@ export type PeopleEmploymentGenesisParameters = {
1720
1726
  */
1721
1727
  export type PeopleEmploymentScheduledTerminationParameters = {
1722
1728
  /**
1723
- * The exclusive end of the employment's valid-time timeline, as a calendar date (`YYYY-MM-DD`). Required; a value carrying a time component is refused with `422` rather than truncated. Must fall after the employment's genesis. Scheduling removes versions that start on or after the new end and truncates the version spanning it. An employment holds at most one scheduled termination; cancel the standing one before scheduling another. Cancellation reopens the last surviving version and does not restore removed versions.
1729
+ * The exclusive end of the employment's valid-time timeline, as a calendar date (`YYYY-MM-DD`). Required. Must fall after the employment's genesis. Scheduling removes versions that start on or after the new end and truncates the version spanning it. An employment holds at most one scheduled termination; cancel the standing one before scheduling another. Cancellation reopens the last surviving version and does not restore removed versions.
1724
1730
  */
1725
1731
  effective_date: string;
1726
1732
  };
@@ -1749,10 +1755,6 @@ export type PeopleEmploymentUpdateParameters = {
1749
1755
  */
1750
1756
  enrolled_in_t_and_a?: boolean;
1751
1757
  };
1752
- export type PeopleEmploymentCustomFieldResponseObject = {
1753
- custom_field_config_id: string;
1754
- value: string | null;
1755
- };
1756
1758
  /**
1757
1759
  * Update stored custom-field values for one employment family in a single batch. The batch must contain at least one row. Omitted configurations keep their values, and an explicit null is stored.
1758
1760
  */
@@ -2420,11 +2422,11 @@ export type PerDiemParameters = {
2420
2422
  */
2421
2423
  active?: boolean | null;
2422
2424
  /**
2423
- * IDs of the work types this per diem applies to.
2425
+ * IDs of the work types this per diem applies to. Each must be shared or the company's own.
2424
2426
  */
2425
2427
  work_type_ids?: Array<string>;
2426
2428
  /**
2427
- * IDs of the timecodes this per diem applies to.
2429
+ * IDs of the timecodes this per diem applies to. Each must belong to the company.
2428
2430
  */
2429
2431
  timekeeping_timecode_ids?: Array<string>;
2430
2432
  };
@@ -2461,11 +2463,11 @@ export type PerDiemUpdateParameters = {
2461
2463
  */
2462
2464
  active?: boolean | null;
2463
2465
  /**
2464
- * Complete set of work type IDs this per diem applies to. Omit to leave it unchanged.
2466
+ * 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.
2465
2467
  */
2466
2468
  work_type_ids?: Array<string>;
2467
2469
  /**
2468
- * Complete set of timecode IDs this per diem applies to. Omit to leave it unchanged.
2470
+ * Complete set of timecode IDs this per diem applies to. Each must belong to the company. Omit to leave it unchanged.
2469
2471
  */
2470
2472
  timekeeping_timecode_ids?: Array<string>;
2471
2473
  };
@@ -3332,7 +3334,7 @@ export type PwaCompanyUserDetailsResponseObject = {
3332
3334
  or_boli_race: Array<'american_indian_or_alaska_native' | 'asian' | 'hispanic_or_latino' | 'black_or_african_american' | 'native_hawaiian_or_pacific_islander' | 'white' | 'portuguese_or_brazilian'> | null;
3333
3335
  };
3334
3336
  /**
3335
- * Create a worker's PWA compliance details at a company. The company is taken from the API key. user_id names the worker and is required; every other field is optional — send whichever your jurisdiction's certified-payroll export requires. Only the keys listed here are accepted — any other key is rejected with 400 unknown_key.
3337
+ * Create a worker's PWA compliance details at a company. The company is taken from the API key. user_id names the worker and is required; every other field is optional — send whichever your jurisdiction's certified-payroll export requires.
3336
3338
  */
3337
3339
  export type PwaCompanyUserDetailsParameters = {
3338
3340
  /**
@@ -3425,7 +3427,7 @@ export type PwaCompanyUserDetailsParameters = {
3425
3427
  or_boli_race?: Array<'american_indian_or_alaska_native' | 'asian' | 'hispanic_or_latino' | 'black_or_african_american' | 'native_hawaiian_or_pacific_islander' | 'white' | 'portuguese_or_brazilian'> | null;
3426
3428
  };
3427
3429
  /**
3428
- * Update a worker's PWA compliance details. The company is taken from the API key. Every field is optional — send only what changes, and omitted fields are left unchanged. user_id is absent by design — the company/user pair is fixed at creation, so sending the key is rejected with 400 unknown_key, as is any other key not listed here.
3430
+ * Update a worker's PWA compliance details. The company is taken from the API key. Every field is optional — send only what changes, and omitted fields are left unchanged. The company/user pair is fixed at creation.
3429
3431
  */
3430
3432
  export type PwaCompanyUserDetailsUpdateParameters = {
3431
3433
  /**
@@ -3819,7 +3821,10 @@ export type JobResponseObject = {
3819
3821
  * How this job records production completions: one of none (opts out), feature (per site feature, e.g. a turbine), or quantity (a unit count, e.g. modules). Locked once any completion exists.
3820
3822
  */
3821
3823
  production_tracking_kind: 'none' | 'feature' | 'quantity';
3822
- [key: string]: unknown;
3824
+ /**
3825
+ * Custom-field values stored on the job, one row per configuration, including hidden configurations; empty when none.
3826
+ */
3827
+ custom_fields: Array<CustomFieldResponseObject>;
3823
3828
  };
3824
3829
  /**
3825
3830
  * Prevailing-wage / apprenticeship (PWA) compliance details for a job, used in certified-payroll reporting. Common fields are always present when this object exists; regional fields appear only when applicable to the job's region and regional PWA mode. The property is null when no PWA details have been configured; PWA tracking modes alone do not materialize it.
@@ -3891,13 +3896,9 @@ export type PwaJobDetailsResponseObject = {
3891
3896
  ny_dol_prc_number?: string | null;
3892
3897
  } | null;
3893
3898
  /**
3894
- * Fields shared by job creation and updates. Updates may omit any field to preserve its current value. The resulting job must still satisfy its schedule and PWA validation rules. Extra keys are accepted, including custom fields.
3899
+ * Fields shared by job creation and updates. Updates may omit any field to preserve its current value. The resulting job must still satisfy its schedule and PWA validation rules.
3895
3900
  */
3896
3901
  export type JobParameters = {
3897
- /**
3898
- * ID of a job template to copy this job from; when set, the new job is created from that template. Null or omit to start from a blank job.
3899
- */
3900
- template_id?: string | null;
3901
3902
  /**
3902
3903
  * Human-readable job name, unique within the creating company; null when unset.
3903
3904
  */
@@ -4049,19 +4050,6 @@ export type JobParameters = {
4049
4050
  */
4050
4051
  label?: string | null;
4051
4052
  } | null;
4052
- /**
4053
- * Custom field values to add to the job, addressed by custom field config id; null when none. Each row creates a value, so a config that already carries one on this job is refused with a 422 — to overwrite, send the value under a top-level key named after the custom field instead. Supplying this key turns that by-name form off for the request.
4054
- */
4055
- custom_fields_attributes?: Array<{
4056
- /**
4057
- * ID of the custom field config the value belongs to; the config must belong to the company that owns the job.
4058
- */
4059
- custom_field_config_id: string;
4060
- /**
4061
- * Value to store for the custom field; null when unset.
4062
- */
4063
- value?: string | null;
4064
- }> | null;
4065
4053
  /**
4066
4054
  * Prevailing-wage / apprenticeship (PWA) compliance details to set on the job. Omit or send an empty object to make no PWA-details changes; null and non-object values are rejected. The accepted regional keys depend on the effective region and regional PWA mode.
4067
4055
  */
@@ -4131,22 +4119,50 @@ export type JobParameters = {
4131
4119
  */
4132
4120
  ny_dol_prc_number?: string | null;
4133
4121
  };
4134
- [key: string]: unknown;
4135
4122
  };
4136
4123
  /**
4137
- * Parameters for creating a job. `requested_by_company_id` and `created_by_user_id` are required. Sets the job's schedule, work types, address, and optional Prevailing Wage / Apprenticeship (PWA) compliance.
4124
+ * Parameters for creating a job. `requested_by_company_id` and `created_by_user_id` are required. Sets the job's schedule, work types, address, custom-field values, and optional Prevailing Wage / Apprenticeship (PWA) compliance.
4138
4125
  */
4139
4126
  export type JobCreateParameters = JobParameters & {
4140
- [key: string]: unknown;
4127
+ /**
4128
+ * ID of a job template to copy this job from; when set, the new job is created from that template. Null or omit to start from a blank job.
4129
+ */
4130
+ template_id?: string | null;
4131
+ /**
4132
+ * Values for the job's custom fields, as a list of configurations and their values. Each configuration may appear only once. Every visible configuration gets a stored value; one left out of the list, or an omitted or empty list, stores null.
4133
+ */
4134
+ custom_fields?: Array<{
4135
+ /**
4136
+ * ID of a visible custom-field configuration owned by the credential company and applicable to jobs.
4137
+ */
4138
+ custom_field_config_id: string;
4139
+ /**
4140
+ * Value as text or null.
4141
+ */
4142
+ value: string | null;
4143
+ }>;
4141
4144
  };
4142
4145
  /**
4143
- * Parameters for updating an existing job. Every field is optional; omit a field to preserve its current value. The resulting job must still satisfy schedule and PWA validation rules. Accepts every shared job field plus a directly settable status.
4146
+ * Parameters for updating an existing job. Every field is optional; omit a field to preserve its current value. The resulting job must still satisfy schedule and PWA validation rules. Accepts every shared job field plus a directly settable status and custom-field changes.
4144
4147
  */
4145
4148
  export type JobUpdateParameters = JobParameters & {
4146
4149
  /**
4147
4150
  * Settable status values. Other statuses are derived from job and position state and cannot be set directly.
4148
4151
  */
4149
4152
  status?: 'completed' | 'cancelled' | 'disputed';
4153
+ /**
4154
+ * Custom-field values to change, as a list of configurations and their replacement values. Each configuration may appear only once. Only the listed configurations change; every other configuration keeps its stored value, and an omitted or empty list changes none.
4155
+ */
4156
+ custom_fields?: Array<{
4157
+ /**
4158
+ * ID of a custom-field configuration owned by the credential company and applicable to jobs. A hidden configuration may be updated only when the job already stores its value.
4159
+ */
4160
+ custom_field_config_id: string;
4161
+ /**
4162
+ * Replacement value as text or null. Null stores a value rather than removing the row.
4163
+ */
4164
+ value: string | null;
4165
+ }>;
4150
4166
  };
4151
4167
  /**
4152
4168
  * A reusable job template — a saved job pattern for quickly creating new jobs with the same setup. Read-only through the API (listing only).
@@ -4205,7 +4221,7 @@ export type GroupUpdateParameters = {
4205
4221
  name?: string;
4206
4222
  };
4207
4223
  /**
4208
- * A worker as your company sees them: the cross-company person merged with their employment record at your company (title, pay, benefits, and accruals), their roles at your company, and optional prevailing-wage compliance details. Your company sees everyone it employs, everyone it has granted a role, and everyone it has invited, which is the same set the web app shows. A role holder or an invitee your company does not employ has no employment record to merge, so the employment fields (employment_id through employment_window, plus manager_user_id) are null for them, no employment custom fields are published for them, and employment_state reads none. There is no delete — removing a worker terminates their employment at the company (see the user-company endpoints), which sets termination_date and drops them from the default list.
4224
+ * A worker as your company sees them: the cross-company person merged with their employment record at your company (title, pay, benefits, and accruals), their roles at your company, and optional prevailing-wage compliance details. Your company sees everyone it employs, everyone it has granted a role, and everyone it has invited, which is the same set the web app shows. A role holder or an invitee your company does not employ has no employment record to merge, so the employment fields (employment_id through employment_window, plus manager_user_id and custom_fields) are null for them, and employment_state reads none. There is no delete — removing a worker terminates their employment at the company (see the user-company endpoints), which sets termination_date and drops them from the default list.
4209
4225
  */
4210
4226
  export type UserResponseObject = {
4211
4227
  /**
@@ -4285,7 +4301,7 @@ export type UserResponseObject = {
4285
4301
  */
4286
4302
  employment_state: 'active' | 'scheduled' | 'terminated' | 'none';
4287
4303
  /**
4288
- * Identity of the worker's employment at your company, stable across employment versions — a title change or a raise versions the employment without changing this id. It names the employment that this object's employment fields (type through employment_window, plus manager_user_id and any employment custom fields) describe: a worker rehired after an earlier stint holds a second employment with its own id, and exactly one of them is published here.
4304
+ * Identity of the worker's employment at your company, stable across employment versions — a title change or a raise versions the employment without changing this id. It names the employment that this object's employment fields (type through employment_window, plus manager_user_id and custom_fields) describe: a worker rehired after an earlier stint holds a second employment with its own id, and exactly one of them is published here.
4289
4305
  */
4290
4306
  employment_id: string | null;
4291
4307
  type: UserCompanyType;
@@ -4310,21 +4326,21 @@ export type UserResponseObject = {
4310
4326
  */
4311
4327
  compensation_type: string | null;
4312
4328
  /**
4313
- * Base pay rate, formatted as a currency string in the company's currency. Null when unset.
4329
+ * 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.
4314
4330
  */
4315
- hourly_rate: string | null;
4331
+ hourly_rate?: string | null;
4316
4332
  /**
4317
- * Annual training-fund contribution for the worker, formatted as a currency string. Null when unset. Used in prevailing-wage fringe calculations.
4333
+ * Annual training-fund contribution for the worker, formatted as a currency string. Present for company keys, company administrators, and the employed person, and omitted otherwise; null when authorized but unset. Used in prevailing-wage fringe calculations.
4318
4334
  */
4319
- training_annual_amount: string | null;
4335
+ training_annual_amount?: string | null;
4320
4336
  /**
4321
- * Employer-paid annual combined health benefit, formatted as a currency string. Null when unset. Used in prevailing-wage fringe calculations.
4337
+ * Employer-paid annual combined health benefit, formatted as a currency string. Present for company keys, company administrators, and the employed person, and omitted otherwise; null when authorized but unset. Used in prevailing-wage fringe calculations.
4322
4338
  */
4323
- employer_combined_health_amount: string | null;
4339
+ employer_combined_health_amount?: string | null;
4324
4340
  /**
4325
- * Employer-paid annual combined savings and retirement benefit, formatted as a currency string. Null when unset. Used in prevailing-wage fringe calculations.
4341
+ * Employer-paid annual combined savings and retirement benefit, formatted as a currency string. Present for company keys, company administrators, and the employed person, and omitted otherwise; null when authorized but unset. Used in prevailing-wage fringe calculations.
4326
4342
  */
4327
- employer_combined_savings: string | null;
4343
+ employer_combined_savings?: string | null;
4328
4344
  /**
4329
4345
  * Annualized minutes the worker is expected to work, used to annualize fringe benefits. Null to fall back to the standard full-time year.
4330
4346
  */
@@ -4366,6 +4382,10 @@ export type UserResponseObject = {
4366
4382
  * Id of the worker's manager at your company (another user). Null when none.
4367
4383
  */
4368
4384
  manager_user_id: string | null;
4385
+ /**
4386
+ * Custom-field values stored on the employment, one row per configuration, including hidden configurations; empty when none. They belong to the whole employment rather than the version published here. Null for a role holder or an invitee your company does not employ.
4387
+ */
4388
+ custom_fields: Array<CustomFieldResponseObject> | null;
4369
4389
  /**
4370
4390
  * The worker's roles at your company, as an array of role strings such as TECHNICIAN, FIELD_LEAD, MANAGER, SAFETY_MANAGER, and ADMIN. Only roles at the company that owns the API key are listed.
4371
4391
  */
@@ -4463,7 +4483,6 @@ export type UserResponseObject = {
4463
4483
  */
4464
4484
  or_boli_race: Array<'american_indian_or_alaska_native' | 'asian' | 'hispanic_or_latino' | 'black_or_african_american' | 'native_hawaiian_or_pacific_islander' | 'white' | 'portuguese_or_brazilian'> | null;
4465
4485
  } | null;
4466
- [key: string]: unknown;
4467
4486
  };
4468
4487
  /**
4469
4488
  * Request body for updating a worker's profile. Limited to person-level identity fields; employment, roles, and compliance are managed through onboarding (create) and the user-company endpoints.
@@ -4518,26 +4537,34 @@ export type UserUpdateParameters = {
4518
4537
  */
4519
4538
  avatar_signed_id?: string | null;
4520
4539
  };
4521
- /**
4522
- * Request body for onboarding a worker into your company. In one call it creates the person (if new), their employment record, roles, group memberships, an optional invite, and optional compliance details. company_id, email, first_name, and last_name are required.
4523
- */
4524
- export type UserParameters = {
4540
+ export type UserParameters = ({
4525
4541
  /**
4526
- * Id of the company to onboard the worker into. Must be the company that owns the API key.
4542
+ * Work email address; the worker signs in and receives their invite here. Null when the worker has none. Required to send an invite unless a phone number is given.
4527
4543
  */
4528
- company_id: string;
4544
+ email: string;
4545
+ } | {
4529
4546
  /**
4530
- * Work email address; the worker signs in and receives their invite here.
4547
+ * Contact phone number. Null when the worker has none. Required to send an invite unless a work email is given.
4531
4548
  */
4532
- email: string;
4549
+ phone_number: string;
4550
+ } | {
4551
+ /**
4552
+ * Non-stored field. If true, no invite is created and work email / phone are not required.
4553
+ */
4554
+ skip_invite: true;
4555
+ }) & {
4556
+ /**
4557
+ * Work email address; the worker signs in and receives their invite here. Null when the worker has none. Required to send an invite unless a phone number is given.
4558
+ */
4559
+ email?: string | null;
4533
4560
  /**
4534
4561
  * Personal (non-work) email address.
4535
4562
  */
4536
- personal_email?: string;
4563
+ personal_email?: string | null;
4537
4564
  /**
4538
- * Contact phone number.
4565
+ * Contact phone number. Null when the worker has none. Required to send an invite unless a work email is given.
4539
4566
  */
4540
- phone_number?: string;
4567
+ phone_number?: string | null;
4541
4568
  /**
4542
4569
  * Legal first name. Used for compliance and other exports.
4543
4570
  */
@@ -4599,7 +4626,7 @@ export type UserParameters = {
4599
4626
  */
4600
4627
  skip_notify?: boolean;
4601
4628
  /**
4602
- * Non-stored field. If true will not create an invite at all.
4629
+ * Non-stored field. If true, no invite is created and work email / phone are not required.
4603
4630
  */
4604
4631
  skip_invite?: boolean;
4605
4632
  type?: UserCompanyType;
@@ -4619,6 +4646,10 @@ export type UserParameters = {
4619
4646
  * Base pay rate as a decimal string (for example "32.50"), in the company's currency.
4620
4647
  */
4621
4648
  hourly_rate?: string;
4649
+ /**
4650
+ * How the worker is paid: `hourly` or `salary`. Omit to use `hourly`; null is not accepted.
4651
+ */
4652
+ compensation_type?: 'hourly' | 'salary';
4622
4653
  /**
4623
4654
  * Whether the worker is eligible for overtime pay.
4624
4655
  */
@@ -4663,6 +4694,19 @@ export type UserParameters = {
4663
4694
  * Ids of the groups to add the worker to at your company.
4664
4695
  */
4665
4696
  group_ids?: Array<number>;
4697
+ /**
4698
+ * Values for the employment's custom fields, as a list of configurations and their values. Each configuration may appear only once. Every visible configuration gets a stored value; one left out of the list, or an omitted or empty list, stores null.
4699
+ */
4700
+ custom_fields?: Array<{
4701
+ /**
4702
+ * ID of a visible custom-field configuration owned by the credential company and applicable to employments.
4703
+ */
4704
+ custom_field_config_id: string;
4705
+ /**
4706
+ * Value as text or null.
4707
+ */
4708
+ value: string | null;
4709
+ }>;
4666
4710
  /**
4667
4711
  * Prevailing-wage and apprenticeship compliance details to create for the worker (home address, demographics, and jurisdiction-specific reporting fields). Omit when the worker has no compliance record.
4668
4712
  */
@@ -4752,7 +4796,6 @@ export type UserParameters = {
4752
4796
  */
4753
4797
  or_boli_race?: Array<'american_indian_or_alaska_native' | 'asian' | 'hispanic_or_latino' | 'black_or_african_american' | 'native_hawaiian_or_pacific_islander' | 'white' | 'portuguese_or_brazilian'> | null;
4754
4798
  } | null;
4755
- [key: string]: unknown;
4756
4799
  };
4757
4800
  /**
4758
4801
  * A page of time entries, with pagination metadata and navigation links.
@@ -4926,10 +4969,6 @@ export type ManagerTimeEntryApprovalParameters = {
4926
4969
  * The time-entry body fields shared by the create and update bodies; each of those declares its own requiredness.
4927
4970
  */
4928
4971
  export type TimeEntryParameters = {
4929
- /**
4930
- * Id of the time card to attach the entry to; user_id is derived server-side from it. Required on create.
4931
- */
4932
- timekeeping_time_card_id?: string;
4933
4972
  /**
4934
4973
  * these will be rounded to the nearest second
4935
4974
  */
@@ -4955,7 +4994,7 @@ export type TimeEntryParameters = {
4955
4994
  */
4956
4995
  description?: string | null;
4957
4996
  /**
4958
- * Base hourly rate in cents, sent as a string to preserve precision; omit it to let the system derive the rate from the position/user default. Only a company-scoped key or a key whose user is an admin in the entry's company may send it, and null from those keys also derives the default. Any other user-scoped key must omit it; sending it, null included, is refused with 403.
4997
+ * Base hourly rate in cents, sent as a string to preserve precision; omit it to let the system derive the rate from the position/user default, and null also derives the default. Admin only on user-scoped keys.
4959
4998
  */
4960
4999
  hourly_rate_cents?: string | null;
4961
5000
  /**
@@ -4964,9 +5003,13 @@ export type TimeEntryParameters = {
4964
5003
  feature_ids?: Array<string> | null;
4965
5004
  };
4966
5005
  /**
4967
- * Request body for creating a time entry — the time_entry_parameters fields, of which timekeeping_time_card_id, start_time, and end_time are required, plus the explicit "no feature" acknowledgement.
5006
+ * Request body for creating a time entry — the time_entry_parameters fields plus the time card and the explicit "no feature" acknowledgement. timekeeping_time_card_id, start_time, and end_time are required.
4968
5007
  */
4969
5008
  export type TimeEntryCreateParameters = TimeEntryParameters & {
5009
+ /**
5010
+ * Id of the time card to attach the entry to; user_id is derived server-side from it. Set at creation.
5011
+ */
5012
+ timekeeping_time_card_id: string;
4970
5013
  /**
4971
5014
  * Set true to record an explicit "no feature" answer when the job requires a feature allocation and you're not supplying one.
4972
5015
  */
@@ -4981,6 +5024,69 @@ export type TimeEntryUpdateParameters = TimeEntryParameters & {
4981
5024
  */
4982
5025
  confirm_allocation_conflict?: boolean | null;
4983
5026
  };
5027
+ /**
5028
+ * A form definition — a SurveyJS form template built and versioned in the web app's form builder. The same object the list door serializes. Read-only.
5029
+ */
5030
+ export type FormDefinitionObject = {
5031
+ /**
5032
+ * Unique identifier.
5033
+ */
5034
+ id: string;
5035
+ /**
5036
+ * Human-readable name of the form.
5037
+ */
5038
+ name: string;
5039
+ /**
5040
+ * Free-text description of the form.
5041
+ */
5042
+ description: string;
5043
+ /**
5044
+ * ID of the company that owns this form.
5045
+ */
5046
+ company_id: string;
5047
+ /**
5048
+ * ID of the user who last modified the form; null when unknown.
5049
+ */
5050
+ modified_by_user_id: string | null;
5051
+ /**
5052
+ * Lowercase tags on the form; null when none are set.
5053
+ */
5054
+ tags: Array<string> | null;
5055
+ /**
5056
+ * Names of the questions whose answers make up a submission's title; null when none are set.
5057
+ */
5058
+ title_keys: Array<string> | null;
5059
+ /**
5060
+ * Whether the form can be edited.
5061
+ */
5062
+ editable: boolean;
5063
+ /**
5064
+ * Whether the form is always shown to users.
5065
+ */
5066
+ always_visible: boolean;
5067
+ /**
5068
+ * Whether the form collects sensitive data.
5069
+ */
5070
+ sensitive_form: boolean;
5071
+ /**
5072
+ * Whether a user's prior answers can be carried forward into a new submission.
5073
+ */
5074
+ allow_carry_forward: boolean;
5075
+ /**
5076
+ * Revision number of the form's active version; null when it has no active version.
5077
+ */
5078
+ current_revision: number | null;
5079
+ /**
5080
+ * The SurveyJS form schema (questions, pages, and logic).
5081
+ */
5082
+ json: {
5083
+ [key: string]: unknown;
5084
+ };
5085
+ /**
5086
+ * When the record was created (ISO 8601).
5087
+ */
5088
+ created_at: string;
5089
+ };
4984
5090
  /**
4985
5091
  * A page of form definitions. A form definition is a SurveyJS form template built and versioned in the web app's form builder, so this API is read-only.
4986
5092
  */
@@ -4990,66 +5096,7 @@ export type FormDefinitionResponseObject = {
4990
5096
  /**
4991
5097
  * The page of form definitions.
4992
5098
  */
4993
- data: Array<{
4994
- /**
4995
- * Unique identifier.
4996
- */
4997
- id: string;
4998
- /**
4999
- * Human-readable name of the form.
5000
- */
5001
- name: string;
5002
- /**
5003
- * Free-text description of the form.
5004
- */
5005
- description: string;
5006
- /**
5007
- * ID of the company that owns this form.
5008
- */
5009
- company_id: string;
5010
- /**
5011
- * ID of the user who last modified the form; null when unknown.
5012
- */
5013
- modified_by_user_id: string | null;
5014
- /**
5015
- * Lowercase tags on the form; null when none are set.
5016
- */
5017
- tags: Array<string> | null;
5018
- /**
5019
- * Names of the questions whose answers make up a submission's title; null when none are set.
5020
- */
5021
- title_keys: Array<string> | null;
5022
- /**
5023
- * Whether the form can be edited.
5024
- */
5025
- editable: boolean;
5026
- /**
5027
- * Whether the form is always shown to users.
5028
- */
5029
- always_visible: boolean;
5030
- /**
5031
- * Whether the form collects sensitive data.
5032
- */
5033
- sensitive_form: boolean;
5034
- /**
5035
- * Whether a user's prior answers can be carried forward into a new submission.
5036
- */
5037
- allow_carry_forward: boolean;
5038
- /**
5039
- * Revision number of the form's active version; null when it has no active version.
5040
- */
5041
- current_revision: number | null;
5042
- /**
5043
- * The SurveyJS form schema (questions, pages, and logic).
5044
- */
5045
- json: {
5046
- [key: string]: unknown;
5047
- };
5048
- /**
5049
- * When the record was created (ISO 8601).
5050
- */
5051
- created_at: string;
5052
- }>;
5099
+ data: Array<FormDefinitionObject>;
5053
5100
  };
5054
5101
  /**
5055
5102
  * A page of form submissions — the lighter list representation. A submission is a user's completed form; submissions are created in the app, so this API is read-only.
@@ -5136,7 +5183,7 @@ export type FormSubmissionResponseObject = {
5136
5183
  updated_at: string;
5137
5184
  };
5138
5185
  /**
5139
- * Request body for updating a worker's employment at your company. Corrects administrative fields (employment type, title, manager, payroll id, hire date, and time-and-attendance enrollment) across the whole employment history. For time-effective pay changes, use the scheduled-changes endpoints instead.
5186
+ * Request body for updating a worker's employment at your company. Corrects administrative fields (employment type, title, manager, payroll id, hire date, and time-and-attendance enrollment) across the whole employment history, and changes the custom-field values it lists. For time-effective pay changes, use the scheduled-changes endpoints instead.
5140
5187
  */
5141
5188
  export type UserCompanyParameters = {
5142
5189
  type?: UserCompanyType;
@@ -5160,10 +5207,22 @@ export type UserCompanyParameters = {
5160
5207
  * Whether the worker is enrolled in Time and Attendance (time tracking).
5161
5208
  */
5162
5209
  enrolled_in_t_and_a?: boolean;
5163
- [key: string]: unknown;
5210
+ /**
5211
+ * Custom-field values to change, as a list of configurations and their replacement values. Each configuration may appear only once. Only the listed configurations change; every other configuration keeps its stored value, and an omitted or empty list changes none.
5212
+ */
5213
+ custom_fields?: Array<{
5214
+ /**
5215
+ * ID of a custom-field configuration owned by the credential company and applicable to employments. A hidden configuration may be updated only when the employment already stores its value.
5216
+ */
5217
+ custom_field_config_id: string;
5218
+ /**
5219
+ * Replacement value as text or null. Null stores a value rather than removing the row.
5220
+ */
5221
+ value: string | null;
5222
+ }>;
5164
5223
  };
5165
5224
  /**
5166
- * Request body for adding a worker to your company, creating their employment record. hire_date is required and sets when employment begins; the remaining fields seed the initial title, pay, benefits, and accruals. Returns the worker with the new employment flattened onto it.
5225
+ * Request body for adding a worker to your company, creating their employment record and its custom-field values. hire_date is required and sets when employment begins; the remaining fields seed the initial title, pay, benefits, and accruals. Returns the worker with the new employment flattened onto it.
5167
5226
  */
5168
5227
  export type UserCompanyCreateParameters = {
5169
5228
  /**
@@ -5227,7 +5286,19 @@ export type UserCompanyCreateParameters = {
5227
5286
  * Paid training time for the year, in minutes.
5228
5287
  */
5229
5288
  training_annual_minutes?: number | null;
5230
- [key: string]: unknown;
5289
+ /**
5290
+ * Values for the employment's custom fields, as a list of configurations and their values. Each configuration may appear only once. Every visible configuration gets a stored value; one left out of the list, or an omitted or empty list, stores null.
5291
+ */
5292
+ custom_fields?: Array<{
5293
+ /**
5294
+ * ID of a visible custom-field configuration owned by the credential company and applicable to employments.
5295
+ */
5296
+ custom_field_config_id: string;
5297
+ /**
5298
+ * Value as text or null.
5299
+ */
5300
+ value: string | null;
5301
+ }>;
5231
5302
  };
5232
5303
  /**
5233
5304
  * A worker's scheduled compensation timeline at your company — the version currently in effect plus any future-dated versions.
@@ -5473,6 +5544,19 @@ export type CompanyParameters = ({
5473
5544
  naics_code?: string | null;
5474
5545
  linkedin_url?: string | null;
5475
5546
  };
5547
+ /**
5548
+ * A custom-field value stored on a record, addressed by the configuration it belongs to.
5549
+ */
5550
+ export type CustomFieldResponseObject = {
5551
+ /**
5552
+ * ID of the custom-field configuration the value belongs to. Join it to `GET /api/v1/custom_field_configs` for the field's name and definition.
5553
+ */
5554
+ custom_field_config_id: string;
5555
+ /**
5556
+ * The stored value as text; null when a null is stored.
5557
+ */
5558
+ value: string | null;
5559
+ };
5476
5560
  /**
5477
5561
  * A custom field definition — a company-defined attribute attached to one kind of record (jobs, workers, apprentices, or the company itself). Deleting one is blocked while any record still holds a value for it.
5478
5562
  */
@@ -6675,7 +6759,7 @@ export type PayrollFringeBenefitPlanResponseObject = {
6675
6759
  */
6676
6760
  export type PayrollFringeBenefitPlanParameters = {
6677
6761
  /**
6678
- * ID of the pay schedule that owns the plan, stable across all of its versions. Required.
6762
+ * ID of the pay schedule that owns the plan, stable across all of its versions. Required. Set at creation.
6679
6763
  */
6680
6764
  timekeeping_pay_period_config_id: string;
6681
6765
  /**
@@ -6735,10 +6819,6 @@ export type PayrollFringeBenefitPlanParameters = {
6735
6819
  * Request body for updating a fringe-benefit plan. Send only the fields to change.
6736
6820
  */
6737
6821
  export type PayrollFringeBenefitPlanUpdateParameters = {
6738
- /**
6739
- * ID of the pay schedule that owns the plan, stable across all of its versions. Omit to leave it unchanged.
6740
- */
6741
- timekeeping_pay_period_config_id?: string;
6742
6822
  /**
6743
6823
  * Human-readable name of the plan. Omit to leave it unchanged.
6744
6824
  */
@@ -6953,7 +7033,7 @@ export type PayrollRunResponseObject = {
6953
7033
  updated_at: string;
6954
7034
  };
6955
7035
  /**
6956
- * Create a payroll run. company_id, run_type, and run_date are required; an on-cycle run additionally requires timekeeping_pay_period_id. Only the keys listed here are accepted — any other key is rejected with 400 unknown_key.
7036
+ * Create a payroll run. company_id, run_type, and run_date are required; an on-cycle run additionally requires timekeeping_pay_period_id.
6957
7037
  */
6958
7038
  export type PayrollRunParameters = {
6959
7039
  /**
@@ -6961,11 +7041,11 @@ export type PayrollRunParameters = {
6961
7041
  */
6962
7042
  company_id: string;
6963
7043
  /**
6964
- * ID of the pay period the run is for; required for an on-cycle run, omitted for an off-cycle run.
7044
+ * ID of the pay period the run is for; required for an on-cycle run, omitted for an off-cycle run. Must belong to the run's company.
6965
7045
  */
6966
7046
  timekeeping_pay_period_id?: string | null;
6967
7047
  /**
6968
- * ID of the payroll-system credential that sourced the run.
7048
+ * ID of the payroll-system credential that sourced the run. Must belong to the run's company.
6969
7049
  */
6970
7050
  payrolls_credential_id?: string | null;
6971
7051
  /**
@@ -6982,15 +7062,15 @@ export type PayrollRunParameters = {
6982
7062
  external_id?: string | null;
6983
7063
  };
6984
7064
  /**
6985
- * Update a payroll run. Every field is optional — send only what changes. company_id is absent by design — the run's company is fixed at creation, so sending the key is rejected with 400 unknown_key, as is any other key not listed here.
7065
+ * Update a payroll run. Every field is optional — send only what changes. The run's company is fixed at creation.
6986
7066
  */
6987
7067
  export type PayrollRunUpdateParameters = {
6988
7068
  /**
6989
- * ID of the pay period the run is for; required for an on-cycle run, omitted for an off-cycle run.
7069
+ * ID of the pay period the run is for; required for an on-cycle run, omitted for an off-cycle run. Must belong to the run's company.
6990
7070
  */
6991
7071
  timekeeping_pay_period_id?: string | null;
6992
7072
  /**
6993
- * ID of the payroll-system credential that sourced the run.
7073
+ * ID of the payroll-system credential that sourced the run. Must belong to the run's company.
6994
7074
  */
6995
7075
  payrolls_credential_id?: string | null;
6996
7076
  /**
@@ -7136,7 +7216,7 @@ export type ProjectParameters = {
7136
7216
  */
7137
7217
  created_by_user_id: string;
7138
7218
  /**
7139
- * ID of a project visible to the API key's policy. Send null to make the project a root; the child schedule must fit within the parent's schedule.
7219
+ * ID of a project visible to the API key's policy. The parent must be owned by this project's owner or list that owner in its participating_company_ids. Send null to make the project a root; the child schedule must fit within the parent's schedule.
7140
7220
  */
7141
7221
  parent_id?: string | null;
7142
7222
  /**
@@ -7221,11 +7301,7 @@ export type ProjectUpdateParameters = {
7221
7301
  */
7222
7302
  description?: string | null;
7223
7303
  /**
7224
- * User recorded as the project's creator; must be a member of the owning company. Required on create and immutable thereafter — an update that sets, changes, or clears it is rejected.
7225
- */
7226
- created_by_user_id?: string | null;
7227
- /**
7228
- * ID of a project visible to the API key's policy. Send null to make the project a root; the child schedule must fit within the parent's schedule.
7304
+ * ID of a project visible to the API key's policy. The parent must be owned by this project's owner or list that owner in its participating_company_ids. Send null to make the project a root; the child schedule must fit within the parent's schedule.
7229
7305
  */
7230
7306
  parent_id?: string | null;
7231
7307
  /**
@@ -7293,6 +7369,45 @@ export type ProjectUpdateParameters = {
7293
7369
  */
7294
7370
  placed_in_service_date?: string | null;
7295
7371
  };
7372
+ /**
7373
+ * A project–site assignment: the join linking a project to a site, optionally scoping which of that site's features apply. Path `{id}` is this join's id, not the Site's. Not included on project GET.
7374
+ */
7375
+ export type ProjectSiteResponseObject = {
7376
+ /**
7377
+ * Unique identifier.
7378
+ */
7379
+ id: string;
7380
+ /**
7381
+ * ID of the linked site.
7382
+ */
7383
+ site_id: string;
7384
+ /**
7385
+ * IDs of the site's features that apply to this project. Empty when none are scoped.
7386
+ */
7387
+ feature_ids: Array<string>;
7388
+ };
7389
+ /**
7390
+ * Request body for attaching a site to a project. `site_id` is required; `feature_ids` is optional. The project is taken from the path and is not part of the body.
7391
+ */
7392
+ export type ProjectSiteParameters = {
7393
+ /**
7394
+ * 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.
7395
+ */
7396
+ site_id: string;
7397
+ /**
7398
+ * 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.
7399
+ */
7400
+ feature_ids?: Array<string>;
7401
+ };
7402
+ /**
7403
+ * Request body for replacing which of the site's features apply to this project. Every field is optional; omit a field to preserve its current value. `site_id` is create-only and an update that names it is rejected.
7404
+ */
7405
+ export type ProjectSiteUpdateParameters = {
7406
+ /**
7407
+ * 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.
7408
+ */
7409
+ feature_ids?: Array<string>;
7410
+ };
7296
7411
  export type SiteCheckInResponseObject = {
7297
7412
  id: string;
7298
7413
  site_id: string;
@@ -7912,15 +8027,15 @@ export type PaystubResponseObject = {
7912
8027
  */
7913
8028
  export type PaystubParameters = {
7914
8029
  /**
7915
- * ID of the payroll run this paystub belongs to. Required.
8030
+ * ID of the worker who received the payment. Required. Set at creation.
7916
8031
  */
7917
- payrolls_payroll_run_id: string;
8032
+ user_id: string;
7918
8033
  /**
7919
- * ID of the worker who received the payment. Required.
8034
+ * ID of the payroll run this paystub belongs to. Required.
7920
8035
  */
7921
- user_id: string;
8036
+ payrolls_payroll_run_id: string;
7922
8037
  /**
7923
- * ID of the time card this paystub is for; required for an on-cycle run, not allowed for an off-cycle run.
8038
+ * ID of the time card this paystub is for; required for an on-cycle run, not allowed for an off-cycle run. Must be the worker's own card in the run's company.
7924
8039
  */
7925
8040
  timekeeping_time_card_id?: string | null;
7926
8041
  /**
@@ -7941,11 +8056,7 @@ export type PaystubUpdateParameters = {
7941
8056
  */
7942
8057
  payrolls_payroll_run_id?: string;
7943
8058
  /**
7944
- * ID of the worker who received the payment. Omit to leave it unchanged.
7945
- */
7946
- user_id?: string;
7947
- /**
7948
- * ID of the time card this paystub is for. Omit to leave it unchanged; the resulting paystub must have one for an on-cycle run and must not have one for an off-cycle run.
8059
+ * ID of the time card this paystub is for. Omit to leave it unchanged; the resulting paystub must have one for an on-cycle run and must not have one for an off-cycle run, and it must be the worker's own card in the run's company.
7949
8060
  */
7950
8061
  timekeeping_time_card_id?: string | null;
7951
8062
  /**
@@ -8058,6 +8169,31 @@ export type PriorPeriodAdjustmentParameters = {
8058
8169
  */
8059
8170
  pwa_compliance_eligible?: boolean;
8060
8171
  };
8172
+ /**
8173
+ * Request body for updating a prior period adjustment. Send only the fields to change. The time card is the path parent; payrolls_paystub_line_item_id, created_by_user_id, time_card_id, and adjustment_type are rejected.
8174
+ */
8175
+ export type PriorPeriodAdjustmentUpdateParameters = {
8176
+ /**
8177
+ * Adjustment amount, in cents as a decimal string (e.g. "20000.0" is $200.00). Must be positive and may not exceed the line item's remaining adjustable_amount_cents. Omit to leave it unchanged.
8178
+ */
8179
+ amount_cents?: string;
8180
+ /**
8181
+ * Why the adjustment is being made: one of hours_correction, rate_correction, pwa_compliance, or other. Omit to leave it unchanged.
8182
+ */
8183
+ rationale?: 'hours_correction' | 'other' | 'pwa_compliance' | 'rate_correction';
8184
+ /**
8185
+ * ID of the job on the time card whose obligation this adjustment credits. Required whenever pwa_compliance_eligible is true, since compliance matches adjustments to obligations per job. Omit to leave it unchanged; send null to clear it on a non-PWA adjustment.
8186
+ */
8187
+ job_id?: string | null;
8188
+ /**
8189
+ * Free-text notes on the adjustment. Omit to leave it unchanged; send null to clear it.
8190
+ */
8191
+ notes?: string | null;
8192
+ /**
8193
+ * Whether the adjustment counts toward prevailing-wage / apprenticeship (PWA) compliance. Omit to leave it unchanged.
8194
+ */
8195
+ pwa_compliance_eligible?: boolean;
8196
+ };
8061
8197
  /**
8062
8198
  * What one PWA-tracked job on a time card still owes the worker, from the materialized prevailing-wage compliance view. Read-only.
8063
8199
  */
@@ -8475,7 +8611,57 @@ export type PaystubLineItemUpdateParameters = {
8475
8611
  payrolls_external_map_id?: string;
8476
8612
  };
8477
8613
  /**
8478
- * A spot to be filled on a job — one worker's assignment and the unit against which they track time, carrying the schedule window, assigned worker, function, and the planned pay and fringe rates (including PWA prevailing-wage compliance rates). Always accessed nested under a job.
8614
+ * A job-site join — the Site attached to a Job, plus the subset of that site's features the job is working on. `{id}` is the join row, not the Site.
8615
+ */
8616
+ export type JobSiteResponseObject = {
8617
+ /**
8618
+ * Id of the job-site join row.
8619
+ */
8620
+ id: string;
8621
+ /**
8622
+ * Id of the Site attached to the job.
8623
+ */
8624
+ site_id: string;
8625
+ /**
8626
+ * Ids of features on this join; empty when the job is attached to the site with no features selected. Always a subset of the site's features.
8627
+ */
8628
+ feature_ids: Array<string>;
8629
+ };
8630
+ /**
8631
+ * A page of a job's site joins, with pagination metadata and navigation links.
8632
+ */
8633
+ export type JobSitesResponseObject = {
8634
+ meta: Meta;
8635
+ links: Links;
8636
+ /**
8637
+ * The page of job-site joins.
8638
+ */
8639
+ data: Array<JobSiteResponseObject>;
8640
+ };
8641
+ /**
8642
+ * Request body for attaching a site to a job. `site_id` is required; `feature_ids` is optional and defaults to none.
8643
+ */
8644
+ export type JobSiteParameters = {
8645
+ /**
8646
+ * 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.
8647
+ */
8648
+ site_id: string;
8649
+ /**
8650
+ * Ids of features to select on this join. Each feature must belong to the named site. Omit to attach the site with no features.
8651
+ */
8652
+ feature_ids?: Array<string>;
8653
+ };
8654
+ /**
8655
+ * Request body for replacing the features on an existing job-site join. `site_id` cannot be changed; send a new join to attach a different site.
8656
+ */
8657
+ export type JobSiteUpdateParameters = {
8658
+ /**
8659
+ * Replacement set of feature ids on this join. An empty array clears every feature. Omit the field to leave the current set unchanged.
8660
+ */
8661
+ feature_ids?: Array<string>;
8662
+ };
8663
+ /**
8664
+ * A spot to be filled on a job — one worker's assignment and the unit against which they track time, carrying the schedule window, assigned worker, function, and the planned pay and fringe rates (including PWA prevailing-wage compliance rates). Always accessed nested under a job.
8479
8665
  */
8480
8666
  export type PositionResponseObject = {
8481
8667
  /**
@@ -8623,6 +8809,19 @@ export type PayRatesRulePackageParameters = {
8623
8809
  */
8624
8810
  description?: string | null;
8625
8811
  };
8812
+ /**
8813
+ * Request body for updating a pay-rate rule package. Send only the fields to change. `default`, `selectable`, and `scoped_to_job_id` are not writable on this operation.
8814
+ */
8815
+ export type PayRatesRulePackageUpdateParameters = {
8816
+ /**
8817
+ * Human-readable package name. Omit to leave it unchanged.
8818
+ */
8819
+ name?: string;
8820
+ /**
8821
+ * Free-form package description; omit to leave it unchanged, or send null to clear it.
8822
+ */
8823
+ description?: string | null;
8824
+ };
8626
8825
  /**
8627
8826
  * A page of a job's positions, with pagination metadata and navigation links.
8628
8827
  */
@@ -8655,11 +8854,11 @@ export type PositionParameters = {
8655
8854
  */
8656
8855
  end_time?: string | null;
8657
8856
  /**
8658
- * ID of the position function (role) to assign; null for none.
8857
+ * ID of the position function (role) to assign; null for none. Must be a global function or one of the job's company.
8659
8858
  */
8660
8859
  position_function_id?: string | null;
8661
8860
  /**
8662
- * ID of the per diem to apply; its rate and currency are copied onto the position.
8861
+ * ID of the per diem to apply; its rate and currency are copied onto the position. Must belong to the job's company.
8663
8862
  */
8664
8863
  per_diem_id?: string | null;
8665
8864
  /**
@@ -8671,19 +8870,19 @@ export type PositionParameters = {
8671
8870
  */
8672
8871
  pwa?: boolean;
8673
8872
  /**
8674
- * Desired hourly cash-fringe rate in cents.
8873
+ * Desired hourly cash-fringe rate in cents. Admin only on user-scoped keys.
8675
8874
  */
8676
8875
  cash_fringe_rate_cents?: number | null;
8677
8876
  /**
8678
- * Desired base hourly rate in cents.
8877
+ * Desired base hourly rate in cents. Admin only on user-scoped keys.
8679
8878
  */
8680
8879
  hourly_rate_cents?: number | null;
8681
8880
  /**
8682
- * Desired PWA wage-pay rate in cents (PWA positions only).
8881
+ * Desired PWA wage-pay rate in cents (PWA positions only). Admin only on user-scoped keys.
8683
8882
  */
8684
8883
  pwa_wage_pay_rate_cents?: number | null;
8685
8884
  /**
8686
- * Desired hourly wage-adder rate in cents.
8885
+ * Desired hourly wage-adder rate in cents. Admin only on user-scoped keys.
8687
8886
  */
8688
8887
  wage_adder_rate_cents?: number | null;
8689
8888
  /**
@@ -8763,13 +8962,13 @@ export type ProductionJobScopePriceResponseObject = {
8763
8962
  */
8764
8963
  unit_of_measure: string;
8765
8964
  /**
8766
- * Billing rate per unit, as a decimal string in the company's currency.
8965
+ * Billing rate per unit, as a decimal string in the company's currency. Present for company keys and for administrators, managers, safety managers, and field leads of the company that owns the job; omitted for other user keys.
8767
8966
  */
8768
- unit_price: string;
8967
+ unit_price?: string;
8769
8968
  /**
8770
- * Contracted number of units expected for this scope on the job; null when no target is set.
8969
+ * Contracted number of units expected for this scope on the job; null when no target is set. Present for company keys and for administrators, managers, safety managers, and field leads of the company that owns the job; omitted for other user keys.
8771
8970
  */
8772
- contracted_count: number | null;
8971
+ contracted_count?: number | null;
8773
8972
  /**
8774
8973
  * When the record was created (ISO 8601).
8775
8974
  */
@@ -9015,7 +9214,7 @@ export type FormAssignmentTaskResponseObject = Array<{
9015
9214
  }>;
9016
9215
  }>;
9017
9216
  /**
9018
- * Request body for creating a certification — a named qualification a worker can hold. You can only manage your own company's certifications; global (platform) certifications are read-only. Only the keys listed here are accepted — any other key is rejected with 400 unknown_key.
9217
+ * Request body for creating a certification — a named qualification a worker can hold. You can only manage your own company's certifications; global (platform) certifications are read-only.
9019
9218
  */
9020
9219
  export type CertificationParameters = {
9021
9220
  /**
@@ -9040,7 +9239,7 @@ export type CertificationParameters = {
9040
9239
  duration?: string | null;
9041
9240
  };
9042
9241
  /**
9043
- * Request body for updating a certification — a named qualification a worker can hold. Include only the fields to change. You can only manage your own company's certifications; global (platform) certifications are read-only. company_id is absent by design — the certification's company is fixed at creation, so sending the key is rejected with 400 unknown_key, as is any other key not listed here.
9242
+ * Request body for updating a certification — a named qualification a worker can hold. Include only the fields to change. You can only manage your own company's certifications; global (platform) certifications are read-only. The certification's company is fixed at creation.
9044
9243
  */
9045
9244
  export type CertificationUpdateParameters = {
9046
9245
  /**
@@ -9113,7 +9312,7 @@ export type CertificationPackageResponseObject = {
9113
9312
  updated_at: string;
9114
9313
  };
9115
9314
  /**
9116
- * Request body for creating a certification package — a named set of certifications a company requires together. The package belongs to the company that owns the API key. Only the keys listed here are accepted — any other key is rejected with 400 unknown_key.
9315
+ * Request body for creating a certification package — a named set of certifications a company requires together. The package belongs to the company that owns the API key.
9117
9316
  */
9118
9317
  export type CertificationPackageParameters = {
9119
9318
  /**
@@ -9134,7 +9333,7 @@ export type CertificationPackageParameters = {
9134
9333
  performed_by_user_id: string;
9135
9334
  };
9136
9335
  /**
9137
- * Request body for updating a certification package — a named set of certifications a company requires together. Include only the fields to change. Any key not listed here is rejected with 400 unknown_key.
9336
+ * Request body for updating a certification package — a named set of certifications a company requires together. Include only the fields to change.
9138
9337
  */
9139
9338
  export type CertificationPackageUpdateParameters = {
9140
9339
  /**
@@ -9232,21 +9431,13 @@ export type UserCertificationParameters = {
9232
9431
  * The credential or document number for the held certification, as issued by the issuer (for example a WINDA number or a license number). Free text; null when none.
9233
9432
  */
9234
9433
  credential_id?: string | null;
9235
- /**
9236
- * Id of the user recorded as approving this held certification; null when unset.
9237
- */
9238
- approved_by_user_id?: string | null;
9239
9434
  /**
9240
9435
  * When the held certification was archived (ISO 8601); null while active. Archiving is a soft flag, separate from deleting the record.
9241
9436
  */
9242
9437
  archived_at?: string | null;
9243
- /**
9244
- * When this held certification was approved (ISO 8601); null when unset.
9245
- */
9246
- approved_at?: string | null;
9247
9438
  };
9248
9439
  /**
9249
- * Request body for updating a certification held by a worker. Every field is optional; omit a field to preserve its current value. The resulting certification must still have a receipt date and verification state, and any expiry date must remain after its receipt date.
9440
+ * Request body for updating a certification held by a worker. Every field is optional; omit a field to preserve its current value. The resulting certification must still have a receipt date and verification state, and any expiry date must remain after its receipt date. Changing anything but verified revokes an approval; approve through the approval endpoint.
9250
9441
  */
9251
9442
  export type UserCertificationUpdateParameters = {
9252
9443
  /**
@@ -9286,18 +9477,19 @@ export type UserCertificationUpdateParameters = {
9286
9477
  * The credential or document number for the held certification, as issued by the issuer (for example a WINDA number or a license number). Free text; null when none.
9287
9478
  */
9288
9479
  credential_id?: string | null;
9289
- /**
9290
- * Id of the user recorded as approving this held certification; null when unset.
9291
- */
9292
- approved_by_user_id?: string | null;
9293
9480
  /**
9294
9481
  * When the held certification was archived (ISO 8601); null while active. Archiving is a soft flag, separate from deleting the record.
9295
9482
  */
9296
9483
  archived_at?: string | null;
9484
+ };
9485
+ /**
9486
+ * Request body for approving a certification held by a worker. A user key approves in its own user's name and sends no body.
9487
+ */
9488
+ export type UserCertificationApprovalParameters = {
9297
9489
  /**
9298
- * When this held certification was approved (ISO 8601); null when unset.
9490
+ * Company keys only: the approver to record. Required with a company key.
9299
9491
  */
9300
- approved_at?: string | null;
9492
+ approved_by_user_id?: string;
9301
9493
  };
9302
9494
  /**
9303
9495
  * A page of certifications held by your company's workers.
@@ -9347,7 +9539,7 @@ export type UserCertificationResponseObject = {
9347
9539
  */
9348
9540
  credential_id: string | null;
9349
9541
  /**
9350
- * Id of the user recorded as approving this held certification; null when unset.
9542
+ * Id of the user who approved this held certification; null when unapproved. Set through the approval endpoint.
9351
9543
  */
9352
9544
  approved_by_user_id: string | null;
9353
9545
  /**
@@ -9363,7 +9555,7 @@ export type UserCertificationResponseObject = {
9363
9555
  */
9364
9556
  archived_at: string | null;
9365
9557
  /**
9366
- * When this held certification was approved (ISO 8601); null when unset.
9558
+ * When the current approval was recorded (ISO 8601); null when unapproved.
9367
9559
  */
9368
9560
  approved_at: string | null;
9369
9561
  /**
@@ -10243,7 +10435,7 @@ export type RegionalJobWageDeterminationParameters = {
10243
10435
  */
10244
10436
  export type JobWageDeterminationUpdateParameters = {
10245
10437
  /**
10246
- * Where the edit starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Every version from this date forward takes the new values; earlier versions are untouched. Optional; defaults to the start of the version valid now, which corrects that version in place.
10438
+ * Where the edit starts applying, as a calendar date (`YYYY-MM-DD`). Every version from this date forward takes the new values; earlier versions are untouched. Optional; defaults to the start of the version valid now, which corrects that version in place.
10247
10439
  */
10248
10440
  effective_from?: string;
10249
10441
  /**
@@ -10289,7 +10481,7 @@ export type JobWageDeterminationUpdateParameters = {
10289
10481
  */
10290
10482
  export type JobWageDeterminationScheduledChangeParameters = {
10291
10483
  /**
10292
- * Where the change starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. 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. A date already reached reconciles derived pay data immediately; a date still ahead reconciles at that date.
10484
+ * 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. A date already reached reconciles derived pay data immediately; a date still ahead reconciles at that date.
10293
10485
  */
10294
10486
  effective_date: string;
10295
10487
  /**
@@ -10323,7 +10515,7 @@ export type JobWageDeterminationScheduledChangeParameters = {
10323
10515
  */
10324
10516
  export type JobWageDeterminationGenesisParameters = {
10325
10517
  /**
10326
- * The timeline's new start, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. 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.
10518
+ * 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.
10327
10519
  */
10328
10520
  effective_date: string;
10329
10521
  };
@@ -10332,7 +10524,7 @@ export type JobWageDeterminationGenesisParameters = {
10332
10524
  */
10333
10525
  export type JobWageDeterminationScheduledTerminationParameters = {
10334
10526
  /**
10335
- * When the determination stops being valid, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. 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. A determination holds at most one scheduled termination; cancel the standing one before scheduling another.
10527
+ * 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. A determination holds at most one scheduled termination; cancel the standing one before scheduling another.
10336
10528
  */
10337
10529
  effective_date: string;
10338
10530
  };
@@ -10590,7 +10782,7 @@ export type PayRatesRuleUpdateParameters = {
10590
10782
  */
10591
10783
  export type PayRatesRuleGenesisParameters = {
10592
10784
  /**
10593
- * The timeline's new start as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Moving it earlier extends the first version back to it. Moving it later removes coverage before it. Refused with `422` when the new start would fall at or after a standing termination.
10785
+ * 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 removes coverage before it. Refused with `422` when the new start would fall at or after a standing termination.
10594
10786
  */
10595
10787
  effective_date: string;
10596
10788
  };
@@ -10599,7 +10791,7 @@ export type PayRatesRuleGenesisParameters = {
10599
10791
  */
10600
10792
  export type PayRatesRuleScheduledTerminationParameters = {
10601
10793
  /**
10602
- * The exclusive end of the family's valid-time timeline as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Must fall after genesis. Scheduling removes versions that start after the new end and truncates the version spanning it. A family holds at most one standing termination; cancel it before scheduling another. Cancellation reopens the last surviving version with its existing recipe and does not restore removed versions.
10794
+ * The exclusive end of the family's valid-time timeline as a calendar date (`YYYY-MM-DD`). Must fall after genesis. Scheduling removes versions that start after the new end and truncates the version spanning it. A family holds at most one standing termination; cancel it before scheduling another. Cancellation reopens the last surviving version with its existing recipe and does not restore removed versions.
10603
10795
  */
10604
10796
  effective_date: string;
10605
10797
  };
@@ -10741,7 +10933,7 @@ export type OvertimeRuleHistoryVersionObject = {
10741
10933
  */
10742
10934
  export type OvertimeRuleParameters = {
10743
10935
  /**
10744
- * Date the rule takes effect, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Optional; defaults to today.
10936
+ * Date the rule takes effect, as a calendar date (`YYYY-MM-DD`). Optional; defaults to today.
10745
10937
  */
10746
10938
  effective_date?: string;
10747
10939
  /**
@@ -10774,7 +10966,7 @@ export type OvertimeRuleParameters = {
10774
10966
  */
10775
10967
  export type OvertimeRuleUpdateParameters = {
10776
10968
  /**
10777
- * Where the edit starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Every version from this date forward takes the new values; earlier versions are untouched. Optional; defaults to the start of the version valid now, which corrects that version in place.
10969
+ * Where the edit starts applying, as a calendar date (`YYYY-MM-DD`). Every version from this date forward takes the new values; earlier versions are untouched. Optional; defaults to the start of the version valid now, which corrects that version in place.
10778
10970
  */
10779
10971
  effective_from?: string;
10780
10972
  /**
@@ -10807,7 +10999,7 @@ export type OvertimeRuleUpdateParameters = {
10807
10999
  */
10808
11000
  export type OvertimeRuleScheduledChangeParameters = {
10809
11001
  /**
10810
- * Where the change starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. A boundary is created at that date when needed, and the new values apply from there forward. A date already reached reconciles derived overtime immediately; a date still ahead reconciles at that date.
11002
+ * 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. A date already reached reconciles derived overtime immediately; a date still ahead reconciles at that date.
10811
11003
  */
10812
11004
  effective_date: string;
10813
11005
  /**
@@ -10840,7 +11032,7 @@ export type OvertimeRuleScheduledChangeParameters = {
10840
11032
  */
10841
11033
  export type OvertimeRuleGenesisParameters = {
10842
11034
  /**
10843
- * The timeline's new start, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. 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.
11035
+ * 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.
10844
11036
  */
10845
11037
  effective_date: string;
10846
11038
  };
@@ -10849,7 +11041,7 @@ export type OvertimeRuleGenesisParameters = {
10849
11041
  */
10850
11042
  export type OvertimeRuleScheduledTerminationParameters = {
10851
11043
  /**
10852
- * When the rule stops being valid, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Must fall after the rule's genesis — removing the rule from every window it ever covered is the rule delete instead. A rule holds at most one scheduled termination; cancel the standing one before scheduling another.
11044
+ * When the rule stops being valid, as a calendar date (`YYYY-MM-DD`). Must fall after the rule's genesis — removing the rule from every window it ever covered is the rule delete instead. A rule holds at most one scheduled termination; cancel the standing one before scheduling another.
10853
11045
  */
10854
11046
  effective_date: string;
10855
11047
  };
@@ -11036,7 +11228,7 @@ export type AssetsItemParameters = {
11036
11228
  performed_by_user_id: string;
11037
11229
  };
11038
11230
  /**
11039
- * Update an asset item. All item fields are optional — send only what changes — but performed_by_user_id is required to record the updater and any placement. Omitted attributes retain their existing values.
11231
+ * Update an asset item. All item fields are optional — send only what changes — but performed_by_user_id is required to record the updater. Omitted attributes retain their existing values.
11040
11232
  */
11041
11233
  export type AssetsItemUpdateParameters = {
11042
11234
  /**
@@ -11080,23 +11272,7 @@ export type AssetsItemUpdateParameters = {
11080
11272
  */
11081
11273
  images_attributes?: Array<AssetsAttachmentParameters>;
11082
11274
  /**
11083
- * Optional. Move the item to this site; mutually exclusive with user_id and container_item_id.
11084
- */
11085
- assets_site_id?: string;
11086
- /**
11087
- * Optional. Assign the item to this user; mutually exclusive with assets_site_id and container_item_id.
11088
- */
11089
- user_id?: string;
11090
- /**
11091
- * Optional. Place the item inside this container item; mutually exclusive with assets_site_id and user_id.
11092
- */
11093
- container_item_id?: string;
11094
- /**
11095
- * Optional. The storage location within the placement site or container; omit for an unbinned placement. Ignored for a user assignment.
11096
- */
11097
- assets_sub_location_id?: string;
11098
- /**
11099
- * ID of the user this update is performed on behalf of, recorded as updater and attributed to any placement. Required; must belong to your company.
11275
+ * ID of the user this update is performed on behalf of, recorded as updater. Required; must belong to your company.
11100
11276
  */
11101
11277
  performed_by_user_id: string;
11102
11278
  };
@@ -11643,7 +11819,7 @@ export type AssetsItemFormAssignmentResponseObject = {
11643
11819
  }>;
11644
11820
  };
11645
11821
  /**
11646
- * Create or update an item form assignment. form_definition_id and task_attributes are required, and task_attributes.created_by_user_id is required (a missing value returns 400). recurring gates the recurrence fields.
11822
+ * Create an item form assignment. form_definition_id and task_attributes are required, and task_attributes.created_by_user_id is required (a missing value returns 400). recurring gates the recurrence fields. An assignee outside the credential company returns 422, and a creator outside it returns 403.
11647
11823
  */
11648
11824
  export type AssetsItemFormAssignmentParameters = {
11649
11825
  /**
@@ -11670,10 +11846,6 @@ export type AssetsItemFormAssignmentParameters = {
11670
11846
  * ID of the user creating the task, recorded as its creator. Required; a missing value returns 400.
11671
11847
  */
11672
11848
  created_by_user_id: string;
11673
- /**
11674
- * ID of the user updating the task. Ignored on create (forced to created_by_user_id); recorded on update.
11675
- */
11676
- updated_by_user_id?: string | null;
11677
11849
  /**
11678
11850
  * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
11679
11851
  */
@@ -11706,7 +11878,7 @@ export type AssetsItemFormAssignmentParameters = {
11706
11878
  };
11707
11879
  };
11708
11880
  /**
11709
- * Update an item form assignment. All fields are optional — send only what changes. recurring gates the recurrence fields, and task_attributes.reminders_attributes replaces the existing reminder set when supplied.
11881
+ * Update an item form assignment. All fields are optional — send only what changes. recurring gates the recurrence fields, and task_attributes.reminders_attributes replaces the existing reminder set when supplied. A newly added assignee outside the credential company returns 422. The creator is set at creation and cannot be sent.
11710
11882
  */
11711
11883
  export type AssetsItemFormAssignmentUpdateParameters = {
11712
11884
  /**
@@ -11729,14 +11901,6 @@ export type AssetsItemFormAssignmentUpdateParameters = {
11729
11901
  * Free-text description of the task.
11730
11902
  */
11731
11903
  description?: string | null;
11732
- /**
11733
- * ID of the user who created the task. Existing assignments retain their creator when this is omitted.
11734
- */
11735
- created_by_user_id?: string;
11736
- /**
11737
- * ID of the user updating the task. The API derives the stored updater from the task creator.
11738
- */
11739
- updated_by_user_id?: string | null;
11740
11904
  /**
11741
11905
  * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
11742
11906
  */
@@ -12691,6 +12855,33 @@ export type CreateAllocationResponses = {
12691
12855
  201: ApprenticeshipAllocationResponseObject;
12692
12856
  };
12693
12857
  export type CreateAllocationResponse = CreateAllocationResponses[keyof CreateAllocationResponses];
12858
+ export type DeleteAllocationData = {
12859
+ body?: never;
12860
+ path: {
12861
+ apprentice_id: string;
12862
+ id: string;
12863
+ };
12864
+ query?: never;
12865
+ url: '/api/v1/apprenticeship/apprentices/{apprentice_id}/allocations/{id}';
12866
+ };
12867
+ export type DeleteAllocationErrors = {
12868
+ /**
12869
+ * Forbidden
12870
+ */
12871
+ 403: Problem;
12872
+ /**
12873
+ * Not Found
12874
+ */
12875
+ 404: Problem;
12876
+ };
12877
+ export type DeleteAllocationError = DeleteAllocationErrors[keyof DeleteAllocationErrors];
12878
+ export type DeleteAllocationResponses = {
12879
+ /**
12880
+ * No Content
12881
+ */
12882
+ 204: void;
12883
+ };
12884
+ export type DeleteAllocationResponse = DeleteAllocationResponses[keyof DeleteAllocationResponses];
12694
12885
  export type GetAllocationData = {
12695
12886
  body?: never;
12696
12887
  path: {
@@ -12936,6 +13127,64 @@ export type CreateOccupationResponses = {
12936
13127
  201: ApprenticeshipOccupationResponseObject;
12937
13128
  };
12938
13129
  export type CreateOccupationResponse = CreateOccupationResponses[keyof CreateOccupationResponses];
13130
+ export type DeleteOccupationData = {
13131
+ body?: never;
13132
+ path: {
13133
+ program_id: string;
13134
+ id: string;
13135
+ };
13136
+ query?: never;
13137
+ url: '/api/v1/apprenticeship/programs/{program_id}/occupations/{id}';
13138
+ };
13139
+ export type DeleteOccupationErrors = {
13140
+ /**
13141
+ * Forbidden
13142
+ */
13143
+ 403: Problem;
13144
+ /**
13145
+ * Not Found
13146
+ */
13147
+ 404: Problem;
13148
+ /**
13149
+ * Unprocessable Content
13150
+ */
13151
+ 422: Problem;
13152
+ };
13153
+ export type DeleteOccupationError = DeleteOccupationErrors[keyof DeleteOccupationErrors];
13154
+ export type DeleteOccupationResponses = {
13155
+ /**
13156
+ * No Content
13157
+ */
13158
+ 204: void;
13159
+ };
13160
+ export type DeleteOccupationResponse = DeleteOccupationResponses[keyof DeleteOccupationResponses];
13161
+ export type GetOccupationData = {
13162
+ body?: never;
13163
+ path: {
13164
+ program_id: string;
13165
+ id: string;
13166
+ };
13167
+ query?: never;
13168
+ url: '/api/v1/apprenticeship/programs/{program_id}/occupations/{id}';
13169
+ };
13170
+ export type GetOccupationErrors = {
13171
+ /**
13172
+ * Forbidden
13173
+ */
13174
+ 403: Problem;
13175
+ /**
13176
+ * Not Found
13177
+ */
13178
+ 404: Problem;
13179
+ };
13180
+ export type GetOccupationError = GetOccupationErrors[keyof GetOccupationErrors];
13181
+ export type GetOccupationResponses = {
13182
+ /**
13183
+ * Success
13184
+ */
13185
+ 200: ApprenticeshipOccupationResponseObject;
13186
+ };
13187
+ export type GetOccupationResponse = GetOccupationResponses[keyof GetOccupationResponses];
12939
13188
  export type UpdateOccupationData = {
12940
13189
  body?: ApprenticeshipOccupationUpdateParameters;
12941
13190
  path: {
@@ -13028,7 +13277,11 @@ export type CreateEmployerData = {
13028
13277
  };
13029
13278
  export type CreateEmployerErrors = {
13030
13279
  /**
13031
- * Forbidden
13280
+ * Bad Request
13281
+ */
13282
+ 400: Problem;
13283
+ /**
13284
+ * Forbidden. Also returned when `company_id` names a company the key's user neither administers nor manages, or, on a company-scoped key, any company other than the key's own.
13032
13285
  */
13033
13286
  403: Problem;
13034
13287
  /**
@@ -13071,6 +13324,33 @@ export type DeleteEmployerResponses = {
13071
13324
  200: ApprenticeshipProgramEmployerResponseObject;
13072
13325
  };
13073
13326
  export type DeleteEmployerResponse = DeleteEmployerResponses[keyof DeleteEmployerResponses];
13327
+ export type GetEmployerData = {
13328
+ body?: never;
13329
+ path: {
13330
+ program_id: string;
13331
+ id: string;
13332
+ };
13333
+ query?: never;
13334
+ url: '/api/v1/apprenticeship/programs/{program_id}/employers/{id}';
13335
+ };
13336
+ export type GetEmployerErrors = {
13337
+ /**
13338
+ * Forbidden
13339
+ */
13340
+ 403: Problem;
13341
+ /**
13342
+ * Not Found
13343
+ */
13344
+ 404: Problem;
13345
+ };
13346
+ export type GetEmployerError = GetEmployerErrors[keyof GetEmployerErrors];
13347
+ export type GetEmployerResponses = {
13348
+ /**
13349
+ * Success
13350
+ */
13351
+ 200: ApprenticeshipProgramEmployerResponseObject;
13352
+ };
13353
+ export type GetEmployerResponse = GetEmployerResponses[keyof GetEmployerResponses];
13074
13354
  export type UpdateEmployerData = {
13075
13355
  body?: ApprenticeshipProgramEmployerUpdateParameters;
13076
13356
  path: {
@@ -13082,7 +13362,11 @@ export type UpdateEmployerData = {
13082
13362
  };
13083
13363
  export type UpdateEmployerErrors = {
13084
13364
  /**
13085
- * Forbidden
13365
+ * Bad Request
13366
+ */
13367
+ 400: Problem;
13368
+ /**
13369
+ * Forbidden. Also returned when `company_id`, sent or stored, names a company the key's user neither administers nor manages, or, on a company-scoped key, any company other than the key's own.
13086
13370
  */
13087
13371
  403: Problem;
13088
13372
  /**
@@ -13171,6 +13455,62 @@ export type CreateProgramResponses = {
13171
13455
  201: ApprenticeshipProgramResponseObject;
13172
13456
  };
13173
13457
  export type CreateProgramResponse = CreateProgramResponses[keyof CreateProgramResponses];
13458
+ export type DeleteProgramData = {
13459
+ body?: never;
13460
+ path: {
13461
+ id: string;
13462
+ };
13463
+ query?: never;
13464
+ url: '/api/v1/apprenticeship/programs/{id}';
13465
+ };
13466
+ export type DeleteProgramErrors = {
13467
+ /**
13468
+ * Forbidden
13469
+ */
13470
+ 403: Problem;
13471
+ /**
13472
+ * Not Found
13473
+ */
13474
+ 404: Problem;
13475
+ /**
13476
+ * Unprocessable Content
13477
+ */
13478
+ 422: Problem;
13479
+ };
13480
+ export type DeleteProgramError = DeleteProgramErrors[keyof DeleteProgramErrors];
13481
+ export type DeleteProgramResponses = {
13482
+ /**
13483
+ * No Content
13484
+ */
13485
+ 204: void;
13486
+ };
13487
+ export type DeleteProgramResponse = DeleteProgramResponses[keyof DeleteProgramResponses];
13488
+ export type GetProgramData = {
13489
+ body?: never;
13490
+ path: {
13491
+ id: string;
13492
+ };
13493
+ query?: never;
13494
+ url: '/api/v1/apprenticeship/programs/{id}';
13495
+ };
13496
+ export type GetProgramErrors = {
13497
+ /**
13498
+ * Forbidden
13499
+ */
13500
+ 403: Problem;
13501
+ /**
13502
+ * Not Found
13503
+ */
13504
+ 404: Problem;
13505
+ };
13506
+ export type GetProgramError = GetProgramErrors[keyof GetProgramErrors];
13507
+ export type GetProgramResponses = {
13508
+ /**
13509
+ * Success
13510
+ */
13511
+ 200: ApprenticeshipProgramResponseObject;
13512
+ };
13513
+ export type GetProgramResponse = GetProgramResponses[keyof GetProgramResponses];
13174
13514
  export type UpdateProgramData = {
13175
13515
  body?: ApprenticeshipProgramUpdateParameters;
13176
13516
  path: {
@@ -13282,8 +13622,8 @@ export type CreatePeriodResponses = {
13282
13622
  201: ApprenticeshipWageSchedulePeriodResponseObject;
13283
13623
  };
13284
13624
  export type CreatePeriodResponse = CreatePeriodResponses[keyof CreatePeriodResponses];
13285
- export type UpdatePeriodData = {
13286
- body?: ApprenticeshipWageSchedulePeriodUpdateParameters;
13625
+ export type DeletePeriodData = {
13626
+ body?: never;
13287
13627
  path: {
13288
13628
  wage_schedule_id: string;
13289
13629
  id: string;
@@ -13291,11 +13631,7 @@ export type UpdatePeriodData = {
13291
13631
  query?: never;
13292
13632
  url: '/api/v1/apprenticeship/wage_schedules/{wage_schedule_id}/periods/{id}';
13293
13633
  };
13294
- export type UpdatePeriodErrors = {
13295
- /**
13296
- * Bad Request
13297
- */
13298
- 400: Problem;
13634
+ export type DeletePeriodErrors = {
13299
13635
  /**
13300
13636
  * Forbidden
13301
13637
  */
@@ -13309,34 +13645,96 @@ export type UpdatePeriodErrors = {
13309
13645
  */
13310
13646
  422: Problem;
13311
13647
  };
13312
- export type UpdatePeriodError = UpdatePeriodErrors[keyof UpdatePeriodErrors];
13313
- export type UpdatePeriodResponses = {
13648
+ export type DeletePeriodError = DeletePeriodErrors[keyof DeletePeriodErrors];
13649
+ export type DeletePeriodResponses = {
13314
13650
  /**
13315
- * Success
13651
+ * No Content
13316
13652
  */
13317
- 200: ApprenticeshipWageSchedulePeriodResponseObject;
13653
+ 204: void;
13318
13654
  };
13319
- export type UpdatePeriodResponse = UpdatePeriodResponses[keyof UpdatePeriodResponses];
13320
- export type ListWageSchedulesData = {
13655
+ export type DeletePeriodResponse = DeletePeriodResponses[keyof DeletePeriodResponses];
13656
+ export type GetPeriodData = {
13321
13657
  body?: never;
13322
13658
  path: {
13323
- occupation_id: string;
13659
+ wage_schedule_id: string;
13660
+ id: string;
13324
13661
  };
13325
- query?: {
13326
- 'filter[created_at][gte]'?: string;
13327
- 'filter[created_at][lte]'?: string;
13328
- 'filter[updated_at][gte]'?: string;
13329
- 'filter[updated_at][lte]'?: string;
13330
- filter?: string;
13331
- 'filter[unexpected]'?: string;
13332
- /**
13333
- * This pagination cursor corresponds to the cursor value found in the response in
13334
- * `meta.page.next_cursor`.
13335
- */
13336
- 'page[cursor]'?: string;
13337
- /**
13338
- * 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`.
13339
- */
13662
+ query?: never;
13663
+ url: '/api/v1/apprenticeship/wage_schedules/{wage_schedule_id}/periods/{id}';
13664
+ };
13665
+ export type GetPeriodErrors = {
13666
+ /**
13667
+ * Forbidden
13668
+ */
13669
+ 403: Problem;
13670
+ /**
13671
+ * Not Found
13672
+ */
13673
+ 404: Problem;
13674
+ };
13675
+ export type GetPeriodError = GetPeriodErrors[keyof GetPeriodErrors];
13676
+ export type GetPeriodResponses = {
13677
+ /**
13678
+ * Success
13679
+ */
13680
+ 200: ApprenticeshipWageSchedulePeriodResponseObject;
13681
+ };
13682
+ export type GetPeriodResponse = GetPeriodResponses[keyof GetPeriodResponses];
13683
+ export type UpdatePeriodData = {
13684
+ body?: ApprenticeshipWageSchedulePeriodUpdateParameters;
13685
+ path: {
13686
+ wage_schedule_id: string;
13687
+ id: string;
13688
+ };
13689
+ query?: never;
13690
+ url: '/api/v1/apprenticeship/wage_schedules/{wage_schedule_id}/periods/{id}';
13691
+ };
13692
+ export type UpdatePeriodErrors = {
13693
+ /**
13694
+ * Bad Request
13695
+ */
13696
+ 400: Problem;
13697
+ /**
13698
+ * Forbidden
13699
+ */
13700
+ 403: Problem;
13701
+ /**
13702
+ * Not Found
13703
+ */
13704
+ 404: Problem;
13705
+ /**
13706
+ * Unprocessable Content
13707
+ */
13708
+ 422: Problem;
13709
+ };
13710
+ export type UpdatePeriodError = UpdatePeriodErrors[keyof UpdatePeriodErrors];
13711
+ export type UpdatePeriodResponses = {
13712
+ /**
13713
+ * Success
13714
+ */
13715
+ 200: ApprenticeshipWageSchedulePeriodResponseObject;
13716
+ };
13717
+ export type UpdatePeriodResponse = UpdatePeriodResponses[keyof UpdatePeriodResponses];
13718
+ export type ListWageSchedulesData = {
13719
+ body?: never;
13720
+ path: {
13721
+ occupation_id: string;
13722
+ };
13723
+ query?: {
13724
+ 'filter[created_at][gte]'?: string;
13725
+ 'filter[created_at][lte]'?: string;
13726
+ 'filter[updated_at][gte]'?: string;
13727
+ 'filter[updated_at][lte]'?: string;
13728
+ filter?: string;
13729
+ 'filter[unexpected]'?: string;
13730
+ /**
13731
+ * This pagination cursor corresponds to the cursor value found in the response in
13732
+ * `meta.page.next_cursor`.
13733
+ */
13734
+ 'page[cursor]'?: string;
13735
+ /**
13736
+ * 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`.
13737
+ */
13340
13738
  'page[limit]'?: number;
13341
13739
  page?: string;
13342
13740
  };
@@ -13402,6 +13800,64 @@ export type CreateWageScheduleResponses = {
13402
13800
  201: ApprenticeshipWageScheduleResponseObject;
13403
13801
  };
13404
13802
  export type CreateWageScheduleResponse = CreateWageScheduleResponses[keyof CreateWageScheduleResponses];
13803
+ export type DeleteWageScheduleData = {
13804
+ body?: never;
13805
+ path: {
13806
+ occupation_id: string;
13807
+ id: string;
13808
+ };
13809
+ query?: never;
13810
+ url: '/api/v1/apprenticeship/occupations/{occupation_id}/wage_schedules/{id}';
13811
+ };
13812
+ export type DeleteWageScheduleErrors = {
13813
+ /**
13814
+ * Forbidden
13815
+ */
13816
+ 403: Problem;
13817
+ /**
13818
+ * Not Found
13819
+ */
13820
+ 404: Problem;
13821
+ /**
13822
+ * Unprocessable Content
13823
+ */
13824
+ 422: Problem;
13825
+ };
13826
+ export type DeleteWageScheduleError = DeleteWageScheduleErrors[keyof DeleteWageScheduleErrors];
13827
+ export type DeleteWageScheduleResponses = {
13828
+ /**
13829
+ * No Content
13830
+ */
13831
+ 204: void;
13832
+ };
13833
+ export type DeleteWageScheduleResponse = DeleteWageScheduleResponses[keyof DeleteWageScheduleResponses];
13834
+ export type GetWageScheduleData = {
13835
+ body?: never;
13836
+ path: {
13837
+ occupation_id: string;
13838
+ id: string;
13839
+ };
13840
+ query?: never;
13841
+ url: '/api/v1/apprenticeship/occupations/{occupation_id}/wage_schedules/{id}';
13842
+ };
13843
+ export type GetWageScheduleErrors = {
13844
+ /**
13845
+ * Forbidden
13846
+ */
13847
+ 403: Problem;
13848
+ /**
13849
+ * Not Found
13850
+ */
13851
+ 404: Problem;
13852
+ };
13853
+ export type GetWageScheduleError = GetWageScheduleErrors[keyof GetWageScheduleErrors];
13854
+ export type GetWageScheduleResponses = {
13855
+ /**
13856
+ * Success
13857
+ */
13858
+ 200: ApprenticeshipWageScheduleResponseObject;
13859
+ };
13860
+ export type GetWageScheduleResponse = GetWageScheduleResponses[keyof GetWageScheduleResponses];
13405
13861
  export type UpdateWageScheduleData = {
13406
13862
  body?: ApprenticeshipWageScheduleUpdateParameters;
13407
13863
  path: {
@@ -14669,13 +15125,17 @@ export type CreateItemFormAssignmentTaskData = {
14669
15125
  };
14670
15126
  export type CreateItemFormAssignmentTaskErrors = {
14671
15127
  /**
14672
- * Bad Request (missing created_by_user_id)
15128
+ * Bad Request
14673
15129
  */
14674
15130
  400: Problem;
14675
15131
  /**
14676
15132
  * Forbidden
14677
15133
  */
14678
15134
  403: Problem;
15135
+ /**
15136
+ * Not Found
15137
+ */
15138
+ 404: Problem;
14679
15139
  /**
14680
15140
  * Unprocessable Content
14681
15141
  */
@@ -14726,10 +15186,22 @@ export type UpdateFormAssignmentTaskData = {
14726
15186
  url: '/api/v1/assets/items/{item_id}/form_assignment_tasks/{id}';
14727
15187
  };
14728
15188
  export type UpdateFormAssignmentTaskErrors = {
15189
+ /**
15190
+ * Bad Request
15191
+ */
15192
+ 400: Problem;
14729
15193
  /**
14730
15194
  * Forbidden
14731
15195
  */
14732
15196
  403: Problem;
15197
+ /**
15198
+ * Not Found
15199
+ */
15200
+ 404: Problem;
15201
+ /**
15202
+ * Unprocessable Content
15203
+ */
15204
+ 422: Problem;
14733
15205
  };
14734
15206
  export type UpdateFormAssignmentTaskError = UpdateFormAssignmentTaskErrors[keyof UpdateFormAssignmentTaskErrors];
14735
15207
  export type UpdateFormAssignmentTaskResponses = {
@@ -16321,6 +16793,66 @@ export type UpdatePackageResponses = {
16321
16793
  200: CertificationPackageResponseObject;
16322
16794
  };
16323
16795
  export type UpdatePackageResponse = UpdatePackageResponses[keyof UpdatePackageResponses];
16796
+ export type RevokeUserCertificationApprovalData = {
16797
+ body?: never;
16798
+ path: {
16799
+ user_certification_id: string;
16800
+ };
16801
+ query?: never;
16802
+ url: '/api/v1/certifications/user_certifications/{user_certification_id}/approval';
16803
+ };
16804
+ export type RevokeUserCertificationApprovalErrors = {
16805
+ /**
16806
+ * Forbidden
16807
+ */
16808
+ 403: Problem;
16809
+ /**
16810
+ * Not Found
16811
+ */
16812
+ 404: Problem;
16813
+ };
16814
+ export type RevokeUserCertificationApprovalError = RevokeUserCertificationApprovalErrors[keyof RevokeUserCertificationApprovalErrors];
16815
+ export type RevokeUserCertificationApprovalResponses = {
16816
+ /**
16817
+ * Success
16818
+ */
16819
+ 200: UserCertificationResponseObject;
16820
+ };
16821
+ export type RevokeUserCertificationApprovalResponse = RevokeUserCertificationApprovalResponses[keyof RevokeUserCertificationApprovalResponses];
16822
+ export type ApproveUserCertificationData = {
16823
+ body?: UserCertificationApprovalParameters;
16824
+ path: {
16825
+ user_certification_id: string;
16826
+ };
16827
+ query?: never;
16828
+ url: '/api/v1/certifications/user_certifications/{user_certification_id}/approval';
16829
+ };
16830
+ export type ApproveUserCertificationErrors = {
16831
+ /**
16832
+ * Bad Request
16833
+ */
16834
+ 400: Problem;
16835
+ /**
16836
+ * Forbidden
16837
+ */
16838
+ 403: Problem;
16839
+ /**
16840
+ * Not Found
16841
+ */
16842
+ 404: Problem;
16843
+ /**
16844
+ * Unprocessable Content
16845
+ */
16846
+ 422: Problem;
16847
+ };
16848
+ export type ApproveUserCertificationError = ApproveUserCertificationErrors[keyof ApproveUserCertificationErrors];
16849
+ export type ApproveUserCertificationResponses = {
16850
+ /**
16851
+ * Success
16852
+ */
16853
+ 200: UserCertificationResponseObject;
16854
+ };
16855
+ export type ApproveUserCertificationResponse = ApproveUserCertificationResponses[keyof ApproveUserCertificationResponses];
16324
16856
  export type ListUserCertificationsData = {
16325
16857
  body?: never;
16326
16858
  path?: never;
@@ -16455,6 +16987,10 @@ export type UpdateUserCertificationData = {
16455
16987
  url: '/api/v1/certifications/user_certifications/{id}';
16456
16988
  };
16457
16989
  export type UpdateUserCertificationErrors = {
16990
+ /**
16991
+ * Bad Request
16992
+ */
16993
+ 400: Problem;
16458
16994
  /**
16459
16995
  * Forbidden
16460
16996
  */
@@ -17309,6 +17845,32 @@ export type ListFormDefinitionsResponses = {
17309
17845
  200: FormDefinitionResponseObject;
17310
17846
  };
17311
17847
  export type ListFormDefinitionsResponse = ListFormDefinitionsResponses[keyof ListFormDefinitionsResponses];
17848
+ export type GetFormDefinitionData = {
17849
+ body?: never;
17850
+ path: {
17851
+ id: string;
17852
+ };
17853
+ query?: never;
17854
+ url: '/api/v1/form_definitions/{id}';
17855
+ };
17856
+ export type GetFormDefinitionErrors = {
17857
+ /**
17858
+ * Forbidden
17859
+ */
17860
+ 403: Problem;
17861
+ /**
17862
+ * Not Found
17863
+ */
17864
+ 404: Problem;
17865
+ };
17866
+ export type GetFormDefinitionError = GetFormDefinitionErrors[keyof GetFormDefinitionErrors];
17867
+ export type GetFormDefinitionResponses = {
17868
+ /**
17869
+ * Success
17870
+ */
17871
+ 200: FormDefinitionObject;
17872
+ };
17873
+ export type GetFormDefinitionResponse = GetFormDefinitionResponses[keyof GetFormDefinitionResponses];
17312
17874
  export type ListFormSubmissionDeltasData = {
17313
17875
  body?: never;
17314
17876
  path?: never;
@@ -18018,24 +18580,30 @@ export type GetRateRuleResponses = {
18018
18580
  200: RateRuleResponseObject;
18019
18581
  };
18020
18582
  export type GetRateRuleResponse = GetRateRuleResponses[keyof GetRateRuleResponses];
18021
- export type ShiftJobWageDeterminationGenesisData = {
18022
- body: JobWageDeterminationGenesisParameters;
18023
- headers: {
18024
- /**
18025
- * 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.
18026
- */
18027
- 'If-Match': string;
18028
- };
18583
+ export type ListJobSitesData = {
18584
+ body?: never;
18029
18585
  path: {
18030
18586
  job_id: string;
18031
- wage_determination_id: string;
18032
18587
  };
18033
- query?: never;
18034
- url: '/api/v1/jobs/{job_id}/wage_determinations/{wage_determination_id}/genesis';
18588
+ query?: {
18589
+ filter?: string;
18590
+ 'filter[unexpected]'?: string;
18591
+ /**
18592
+ * This pagination cursor corresponds to the cursor value found in the response in
18593
+ * `meta.page.next_cursor`.
18594
+ */
18595
+ 'page[cursor]'?: string;
18596
+ /**
18597
+ * 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`.
18598
+ */
18599
+ 'page[limit]'?: number;
18600
+ page?: string;
18601
+ };
18602
+ url: '/api/v1/jobs/{job_id}/sites';
18035
18603
  };
18036
- export type ShiftJobWageDeterminationGenesisErrors = {
18604
+ export type ListJobSitesErrors = {
18037
18605
  /**
18038
- * Bad Request (missing effective_date)
18606
+ * Bad Request
18039
18607
  */
18040
18608
  400: Problem;
18041
18609
  /**
@@ -18046,23 +18614,183 @@ export type ShiftJobWageDeterminationGenesisErrors = {
18046
18614
  * Not Found
18047
18615
  */
18048
18616
  404: Problem;
18617
+ };
18618
+ export type ListJobSitesError = ListJobSitesErrors[keyof ListJobSitesErrors];
18619
+ export type ListJobSitesResponses = {
18049
18620
  /**
18050
- * Conflict
18621
+ * Success
18051
18622
  */
18052
- 409: Problem;
18623
+ 200: JobSitesResponseObject;
18624
+ };
18625
+ export type ListJobSitesResponse = ListJobSitesResponses[keyof ListJobSitesResponses];
18626
+ export type CreateJobSiteData = {
18627
+ body: JobSiteParameters;
18628
+ path: {
18629
+ job_id: string;
18630
+ };
18631
+ query?: never;
18632
+ url: '/api/v1/jobs/{job_id}/sites';
18633
+ };
18634
+ export type CreateJobSiteErrors = {
18053
18635
  /**
18054
- * Precondition Failed
18636
+ * Bad Request
18055
18637
  */
18056
- 412: Problem;
18638
+ 400: Problem;
18057
18639
  /**
18058
- * Unprocessable Content
18640
+ * Forbidden
18059
18641
  */
18060
- 422: Problem;
18642
+ 403: Problem;
18061
18643
  /**
18062
- * Precondition Required
18644
+ * Not Found
18063
18645
  */
18064
- 428: Problem;
18065
- };
18646
+ 404: Problem;
18647
+ /**
18648
+ * Unprocessable Content
18649
+ */
18650
+ 422: Problem;
18651
+ };
18652
+ export type CreateJobSiteError = CreateJobSiteErrors[keyof CreateJobSiteErrors];
18653
+ export type CreateJobSiteResponses = {
18654
+ /**
18655
+ * Created
18656
+ */
18657
+ 201: JobSiteResponseObject;
18658
+ };
18659
+ export type CreateJobSiteResponse = CreateJobSiteResponses[keyof CreateJobSiteResponses];
18660
+ export type DeleteJobSiteData = {
18661
+ body?: never;
18662
+ path: {
18663
+ job_id: string;
18664
+ id: string;
18665
+ };
18666
+ query?: never;
18667
+ url: '/api/v1/jobs/{job_id}/sites/{id}';
18668
+ };
18669
+ export type DeleteJobSiteErrors = {
18670
+ /**
18671
+ * Forbidden
18672
+ */
18673
+ 403: Problem;
18674
+ /**
18675
+ * Not Found
18676
+ */
18677
+ 404: Problem;
18678
+ };
18679
+ export type DeleteJobSiteError = DeleteJobSiteErrors[keyof DeleteJobSiteErrors];
18680
+ export type DeleteJobSiteResponses = {
18681
+ /**
18682
+ * No Content
18683
+ */
18684
+ 204: void;
18685
+ };
18686
+ export type DeleteJobSiteResponse = DeleteJobSiteResponses[keyof DeleteJobSiteResponses];
18687
+ export type GetJobSiteData = {
18688
+ body?: never;
18689
+ path: {
18690
+ job_id: string;
18691
+ id: string;
18692
+ };
18693
+ query?: never;
18694
+ url: '/api/v1/jobs/{job_id}/sites/{id}';
18695
+ };
18696
+ export type GetJobSiteErrors = {
18697
+ /**
18698
+ * Forbidden
18699
+ */
18700
+ 403: Problem;
18701
+ /**
18702
+ * Not Found
18703
+ */
18704
+ 404: Problem;
18705
+ };
18706
+ export type GetJobSiteError = GetJobSiteErrors[keyof GetJobSiteErrors];
18707
+ export type GetJobSiteResponses = {
18708
+ /**
18709
+ * Success
18710
+ */
18711
+ 200: JobSiteResponseObject;
18712
+ };
18713
+ export type GetJobSiteResponse = GetJobSiteResponses[keyof GetJobSiteResponses];
18714
+ export type UpdateJobSiteData = {
18715
+ body: JobSiteUpdateParameters;
18716
+ path: {
18717
+ job_id: string;
18718
+ id: string;
18719
+ };
18720
+ query?: never;
18721
+ url: '/api/v1/jobs/{job_id}/sites/{id}';
18722
+ };
18723
+ export type UpdateJobSiteErrors = {
18724
+ /**
18725
+ * Bad Request
18726
+ */
18727
+ 400: Problem;
18728
+ /**
18729
+ * Forbidden
18730
+ */
18731
+ 403: Problem;
18732
+ /**
18733
+ * Not Found
18734
+ */
18735
+ 404: Problem;
18736
+ /**
18737
+ * Unprocessable Content
18738
+ */
18739
+ 422: Problem;
18740
+ };
18741
+ export type UpdateJobSiteError = UpdateJobSiteErrors[keyof UpdateJobSiteErrors];
18742
+ export type UpdateJobSiteResponses = {
18743
+ /**
18744
+ * Success
18745
+ */
18746
+ 200: JobSiteResponseObject;
18747
+ };
18748
+ export type UpdateJobSiteResponse = UpdateJobSiteResponses[keyof UpdateJobSiteResponses];
18749
+ export type ShiftJobWageDeterminationGenesisData = {
18750
+ body: JobWageDeterminationGenesisParameters;
18751
+ headers: {
18752
+ /**
18753
+ * 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.
18754
+ */
18755
+ 'If-Match': string;
18756
+ };
18757
+ path: {
18758
+ job_id: string;
18759
+ wage_determination_id: string;
18760
+ };
18761
+ query?: never;
18762
+ url: '/api/v1/jobs/{job_id}/wage_determinations/{wage_determination_id}/genesis';
18763
+ };
18764
+ export type ShiftJobWageDeterminationGenesisErrors = {
18765
+ /**
18766
+ * Bad Request (missing effective_date)
18767
+ */
18768
+ 400: Problem;
18769
+ /**
18770
+ * Forbidden
18771
+ */
18772
+ 403: Problem;
18773
+ /**
18774
+ * Not Found
18775
+ */
18776
+ 404: Problem;
18777
+ /**
18778
+ * Conflict
18779
+ */
18780
+ 409: Problem;
18781
+ /**
18782
+ * Precondition Failed
18783
+ */
18784
+ 412: Problem;
18785
+ /**
18786
+ * Unprocessable Content
18787
+ */
18788
+ 422: Problem;
18789
+ /**
18790
+ * Precondition Required
18791
+ */
18792
+ 428: Problem;
18793
+ };
18066
18794
  export type ShiftJobWageDeterminationGenesisError = ShiftJobWageDeterminationGenesisErrors[keyof ShiftJobWageDeterminationGenesisErrors];
18067
18795
  export type ShiftJobWageDeterminationGenesisResponses = {
18068
18796
  /**
@@ -18566,7 +19294,7 @@ export type ListJobsData = {
18566
19294
  */
18567
19295
  'filter[production_tracking_kind]'?: 'none' | 'feature' | 'quantity';
18568
19296
  /**
18569
- * Returns jobs whose name contains this substring (case-insensitive). Matches the name column only — not display ID, company, or site names.
19297
+ * Fuzzy-matches the job name (trigram word-similarity). Matches the name column only — not display ID, company, or site names.
18570
19298
  */
18571
19299
  'filter[name]'?: string;
18572
19300
  /**
@@ -20035,6 +20763,36 @@ export type CreatePayRateRulePackageResponses = {
20035
20763
  201: PayRatesRulePackageResponseObject;
20036
20764
  };
20037
20765
  export type CreatePayRateRulePackageResponse = CreatePayRateRulePackageResponses[keyof CreatePayRateRulePackageResponses];
20766
+ export type DeletePayRateRulePackageData = {
20767
+ body?: never;
20768
+ path: {
20769
+ id: string;
20770
+ };
20771
+ query?: never;
20772
+ url: '/api/v1/pay/rates/rule_packages/{id}';
20773
+ };
20774
+ export type DeletePayRateRulePackageErrors = {
20775
+ /**
20776
+ * Forbidden
20777
+ */
20778
+ 403: Problem;
20779
+ /**
20780
+ * Not Found
20781
+ */
20782
+ 404: Problem;
20783
+ /**
20784
+ * Unprocessable Content
20785
+ */
20786
+ 422: Problem;
20787
+ };
20788
+ export type DeletePayRateRulePackageError = DeletePayRateRulePackageErrors[keyof DeletePayRateRulePackageErrors];
20789
+ export type DeletePayRateRulePackageResponses = {
20790
+ /**
20791
+ * No Content
20792
+ */
20793
+ 204: void;
20794
+ };
20795
+ export type DeletePayRateRulePackageResponse = DeletePayRateRulePackageResponses[keyof DeletePayRateRulePackageResponses];
20038
20796
  export type GetPayRateRulePackageData = {
20039
20797
  body?: never;
20040
20798
  path: {
@@ -20061,6 +20819,40 @@ export type GetPayRateRulePackageResponses = {
20061
20819
  200: PayRatesRulePackageResponseObject;
20062
20820
  };
20063
20821
  export type GetPayRateRulePackageResponse = GetPayRateRulePackageResponses[keyof GetPayRateRulePackageResponses];
20822
+ export type UpdatePayRateRulePackageData = {
20823
+ body?: PayRatesRulePackageUpdateParameters;
20824
+ path: {
20825
+ id: string;
20826
+ };
20827
+ query?: never;
20828
+ url: '/api/v1/pay/rates/rule_packages/{id}';
20829
+ };
20830
+ export type UpdatePayRateRulePackageErrors = {
20831
+ /**
20832
+ * Bad Request
20833
+ */
20834
+ 400: Problem;
20835
+ /**
20836
+ * Forbidden
20837
+ */
20838
+ 403: Problem;
20839
+ /**
20840
+ * Not Found
20841
+ */
20842
+ 404: Problem;
20843
+ /**
20844
+ * Unprocessable Content
20845
+ */
20846
+ 422: Problem;
20847
+ };
20848
+ export type UpdatePayRateRulePackageError = UpdatePayRateRulePackageErrors[keyof UpdatePayRateRulePackageErrors];
20849
+ export type UpdatePayRateRulePackageResponses = {
20850
+ /**
20851
+ * Success
20852
+ */
20853
+ 200: PayRatesRulePackageResponseObject;
20854
+ };
20855
+ export type UpdatePayRateRulePackageResponse = UpdatePayRateRulePackageResponses[keyof UpdatePayRateRulePackageResponses];
20064
20856
  export type ListAggregateTimeImportsData = {
20065
20857
  body?: never;
20066
20858
  path: {
@@ -20746,6 +21538,10 @@ export type CreateFringeBenefitPlanData = {
20746
21538
  url: '/api/v1/payrolls/fringe_benefit_plans';
20747
21539
  };
20748
21540
  export type CreateFringeBenefitPlanErrors = {
21541
+ /**
21542
+ * Bad Request
21543
+ */
21544
+ 400: Problem;
20749
21545
  /**
20750
21546
  * Forbidden
20751
21547
  */
@@ -20824,6 +21620,10 @@ export type UpdateFringeBenefitPlanData = {
20824
21620
  url: '/api/v1/payrolls/fringe_benefit_plans/{id}';
20825
21621
  };
20826
21622
  export type UpdateFringeBenefitPlanErrors = {
21623
+ /**
21624
+ * Bad Request
21625
+ */
21626
+ 400: Problem;
20827
21627
  /**
20828
21628
  * Forbidden
20829
21629
  */
@@ -21364,10 +22164,18 @@ export type CreatePaystubData = {
21364
22164
  url: '/api/v1/paystubs';
21365
22165
  };
21366
22166
  export type CreatePaystubErrors = {
22167
+ /**
22168
+ * Bad Request
22169
+ */
22170
+ 400: Problem;
21367
22171
  /**
21368
22172
  * Forbidden
21369
22173
  */
21370
22174
  403: Problem;
22175
+ /**
22176
+ * Not Found
22177
+ */
22178
+ 404: Problem;
21371
22179
  /**
21372
22180
  * Unprocessable Entity
21373
22181
  */
@@ -21455,6 +22263,10 @@ export type UpdatePaystubData = {
21455
22263
  url: '/api/v1/paystubs/{id}';
21456
22264
  };
21457
22265
  export type UpdatePaystubErrors = {
22266
+ /**
22267
+ * Bad Request
22268
+ */
22269
+ 400: Problem;
21458
22270
  /**
21459
22271
  * Forbidden
21460
22272
  */
@@ -21500,7 +22312,7 @@ export type ListCustomFieldsResponses = {
21500
22312
  * Success
21501
22313
  */
21502
22314
  200: {
21503
- data: Array<PeopleEmploymentCustomFieldResponseObject>;
22315
+ data: Array<CustomFieldResponseObject>;
21504
22316
  };
21505
22317
  };
21506
22318
  export type ListCustomFieldsResponse = ListCustomFieldsResponses[keyof ListCustomFieldsResponses];
@@ -21550,7 +22362,7 @@ export type UpdateCustomFieldResponses = {
21550
22362
  * Success
21551
22363
  */
21552
22364
  200: {
21553
- data: Array<PeopleEmploymentCustomFieldResponseObject>;
22365
+ data: Array<CustomFieldResponseObject>;
21554
22366
  };
21555
22367
  };
21556
22368
  export type UpdateCustomFieldResponse = UpdateCustomFieldResponses[keyof UpdateCustomFieldResponses];
@@ -22255,6 +23067,10 @@ export type CreatePerDiemErrors = {
22255
23067
  * Forbidden
22256
23068
  */
22257
23069
  403: Problem;
23070
+ /**
23071
+ * Not Found
23072
+ */
23073
+ 404: Problem;
22258
23074
  /**
22259
23075
  * Unprocessable Content
22260
23076
  */
@@ -22719,6 +23535,174 @@ export type CreateProjectTradeResponses = {
22719
23535
  201: PwaTradeResponseObject;
22720
23536
  };
22721
23537
  export type CreateProjectTradeResponse = CreateProjectTradeResponses[keyof CreateProjectTradeResponses];
23538
+ export type ListProjectSitesData = {
23539
+ body?: never;
23540
+ path: {
23541
+ project_id: string;
23542
+ };
23543
+ query?: {
23544
+ /**
23545
+ * This pagination cursor corresponds to the cursor value found in the response in
23546
+ * `meta.page.next_cursor`.
23547
+ */
23548
+ 'page[cursor]'?: string;
23549
+ /**
23550
+ * 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`.
23551
+ */
23552
+ 'page[limit]'?: number;
23553
+ page?: string;
23554
+ };
23555
+ url: '/api/v1/projects/{project_id}/sites';
23556
+ };
23557
+ export type ListProjectSitesErrors = {
23558
+ /**
23559
+ * Bad Request
23560
+ */
23561
+ 400: Problem;
23562
+ /**
23563
+ * Forbidden
23564
+ */
23565
+ 403: Problem;
23566
+ /**
23567
+ * Not Found
23568
+ */
23569
+ 404: Problem;
23570
+ };
23571
+ export type ListProjectSitesError = ListProjectSitesErrors[keyof ListProjectSitesErrors];
23572
+ export type ListProjectSitesResponses = {
23573
+ /**
23574
+ * Success
23575
+ */
23576
+ 200: {
23577
+ meta: Meta;
23578
+ links: Links;
23579
+ data: Array<ProjectSiteResponseObject>;
23580
+ };
23581
+ };
23582
+ export type ListProjectSitesResponse = ListProjectSitesResponses[keyof ListProjectSitesResponses];
23583
+ export type CreateProjectSiteData = {
23584
+ body: ProjectSiteParameters;
23585
+ path: {
23586
+ project_id: string;
23587
+ };
23588
+ query?: never;
23589
+ url: '/api/v1/projects/{project_id}/sites';
23590
+ };
23591
+ export type CreateProjectSiteErrors = {
23592
+ /**
23593
+ * Bad Request
23594
+ */
23595
+ 400: Problem;
23596
+ /**
23597
+ * Forbidden
23598
+ */
23599
+ 403: Problem;
23600
+ /**
23601
+ * Not Found
23602
+ */
23603
+ 404: Problem;
23604
+ /**
23605
+ * Unprocessable Content
23606
+ */
23607
+ 422: Problem;
23608
+ };
23609
+ export type CreateProjectSiteError = CreateProjectSiteErrors[keyof CreateProjectSiteErrors];
23610
+ export type CreateProjectSiteResponses = {
23611
+ /**
23612
+ * Created
23613
+ */
23614
+ 201: ProjectSiteResponseObject;
23615
+ };
23616
+ export type CreateProjectSiteResponse = CreateProjectSiteResponses[keyof CreateProjectSiteResponses];
23617
+ export type DeleteProjectSiteData = {
23618
+ body?: never;
23619
+ path: {
23620
+ project_id: string;
23621
+ id: string;
23622
+ };
23623
+ query?: never;
23624
+ url: '/api/v1/projects/{project_id}/sites/{id}';
23625
+ };
23626
+ export type DeleteProjectSiteErrors = {
23627
+ /**
23628
+ * Forbidden
23629
+ */
23630
+ 403: Problem;
23631
+ /**
23632
+ * Not Found
23633
+ */
23634
+ 404: Problem;
23635
+ };
23636
+ export type DeleteProjectSiteError = DeleteProjectSiteErrors[keyof DeleteProjectSiteErrors];
23637
+ export type DeleteProjectSiteResponses = {
23638
+ /**
23639
+ * No Content
23640
+ */
23641
+ 204: void;
23642
+ };
23643
+ export type DeleteProjectSiteResponse = DeleteProjectSiteResponses[keyof DeleteProjectSiteResponses];
23644
+ export type GetProjectSiteData = {
23645
+ body?: never;
23646
+ path: {
23647
+ project_id: string;
23648
+ id: string;
23649
+ };
23650
+ query?: never;
23651
+ url: '/api/v1/projects/{project_id}/sites/{id}';
23652
+ };
23653
+ export type GetProjectSiteErrors = {
23654
+ /**
23655
+ * Forbidden
23656
+ */
23657
+ 403: Problem;
23658
+ /**
23659
+ * Not Found
23660
+ */
23661
+ 404: Problem;
23662
+ };
23663
+ export type GetProjectSiteError = GetProjectSiteErrors[keyof GetProjectSiteErrors];
23664
+ export type GetProjectSiteResponses = {
23665
+ /**
23666
+ * Success
23667
+ */
23668
+ 200: ProjectSiteResponseObject;
23669
+ };
23670
+ export type GetProjectSiteResponse = GetProjectSiteResponses[keyof GetProjectSiteResponses];
23671
+ export type UpdateProjectSiteData = {
23672
+ body: ProjectSiteUpdateParameters;
23673
+ path: {
23674
+ project_id: string;
23675
+ id: string;
23676
+ };
23677
+ query?: never;
23678
+ url: '/api/v1/projects/{project_id}/sites/{id}';
23679
+ };
23680
+ export type UpdateProjectSiteErrors = {
23681
+ /**
23682
+ * Bad Request
23683
+ */
23684
+ 400: Problem;
23685
+ /**
23686
+ * Forbidden
23687
+ */
23688
+ 403: Problem;
23689
+ /**
23690
+ * Not Found
23691
+ */
23692
+ 404: Problem;
23693
+ /**
23694
+ * Unprocessable Content
23695
+ */
23696
+ 422: Problem;
23697
+ };
23698
+ export type UpdateProjectSiteError = UpdateProjectSiteErrors[keyof UpdateProjectSiteErrors];
23699
+ export type UpdateProjectSiteResponses = {
23700
+ /**
23701
+ * Success
23702
+ */
23703
+ 200: ProjectSiteResponseObject;
23704
+ };
23705
+ export type UpdateProjectSiteResponse = UpdateProjectSiteResponses[keyof UpdateProjectSiteResponses];
22722
23706
  export type ListProjectsData = {
22723
23707
  body?: never;
22724
23708
  path?: never;
@@ -22735,6 +23719,10 @@ export type ListProjectsData = {
22735
23719
  * Return only projects whose external_id matches this value exactly.
22736
23720
  */
22737
23721
  'filter[external_id]'?: string;
23722
+ /**
23723
+ * Fuzzy-matches the project name (trigram word-similarity). Matches the name column only — not external_id.
23724
+ */
23725
+ 'filter[name]'?: string;
22738
23726
  'filter[created_at][gte]'?: string;
22739
23727
  'filter[created_at][lte]'?: string;
22740
23728
  'filter[updated_at][gte]'?: string;
@@ -22898,6 +23886,32 @@ export type CreateCompanyUserDetailResponses = {
22898
23886
  201: PwaCompanyUserDetailsResponseObject;
22899
23887
  };
22900
23888
  export type CreateCompanyUserDetailResponse = CreateCompanyUserDetailResponses[keyof CreateCompanyUserDetailResponses];
23889
+ export type DeleteCompanyUserDetailData = {
23890
+ body?: never;
23891
+ path: {
23892
+ id: string;
23893
+ };
23894
+ query?: never;
23895
+ url: '/api/v1/pwa/company_user_details/{id}';
23896
+ };
23897
+ export type DeleteCompanyUserDetailErrors = {
23898
+ /**
23899
+ * Forbidden
23900
+ */
23901
+ 403: Problem;
23902
+ /**
23903
+ * Not Found
23904
+ */
23905
+ 404: Problem;
23906
+ };
23907
+ export type DeleteCompanyUserDetailError = DeleteCompanyUserDetailErrors[keyof DeleteCompanyUserDetailErrors];
23908
+ export type DeleteCompanyUserDetailResponses = {
23909
+ /**
23910
+ * No Content
23911
+ */
23912
+ 204: void;
23913
+ };
23914
+ export type DeleteCompanyUserDetailResponse = DeleteCompanyUserDetailResponses[keyof DeleteCompanyUserDetailResponses];
22901
23915
  export type UpdateCompanyUserDetailData = {
22902
23916
  body: PwaCompanyUserDetailsUpdateParameters;
22903
23917
  path: {
@@ -23046,6 +24060,33 @@ export type DeleteApprenticeshipOccupationResponses = {
23046
24060
  200: PwaTradeApprenticeshipOccupationResponseObject;
23047
24061
  };
23048
24062
  export type DeleteApprenticeshipOccupationResponse = DeleteApprenticeshipOccupationResponses[keyof DeleteApprenticeshipOccupationResponses];
24063
+ export type GetApprenticeshipOccupationData = {
24064
+ body?: never;
24065
+ path: {
24066
+ trade_id: string;
24067
+ id: string;
24068
+ };
24069
+ query?: never;
24070
+ url: '/api/v1/pwa/trades/{trade_id}/apprenticeship_occupations/{id}';
24071
+ };
24072
+ export type GetApprenticeshipOccupationErrors = {
24073
+ /**
24074
+ * Forbidden
24075
+ */
24076
+ 403: Problem;
24077
+ /**
24078
+ * Not Found
24079
+ */
24080
+ 404: Problem;
24081
+ };
24082
+ export type GetApprenticeshipOccupationError = GetApprenticeshipOccupationErrors[keyof GetApprenticeshipOccupationErrors];
24083
+ export type GetApprenticeshipOccupationResponses = {
24084
+ /**
24085
+ * Success
24086
+ */
24087
+ 200: PwaTradeApprenticeshipOccupationResponseObject;
24088
+ };
24089
+ export type GetApprenticeshipOccupationResponse = GetApprenticeshipOccupationResponses[keyof GetApprenticeshipOccupationResponses];
23049
24090
  export type UpdateApprenticeshipOccupationData = {
23050
24091
  body: PwaTradeApprenticeshipOccupationUpdateParameters;
23051
24092
  path: {
@@ -23375,6 +24416,10 @@ export type CreatePositionErrors = {
23375
24416
  * Forbidden
23376
24417
  */
23377
24418
  403: Problem;
24419
+ /**
24420
+ * Not Found
24421
+ */
24422
+ 404: Problem;
23378
24423
  /**
23379
24424
  * Unprocessable Content
23380
24425
  */
@@ -23388,6 +24433,64 @@ export type CreatePositionResponses = {
23388
24433
  201: PositionResponseObject;
23389
24434
  };
23390
24435
  export type CreatePositionResponse = CreatePositionResponses[keyof CreatePositionResponses];
24436
+ export type DeletePositionData = {
24437
+ body?: never;
24438
+ path: {
24439
+ job_id: string;
24440
+ id: string;
24441
+ };
24442
+ query?: never;
24443
+ url: '/api/v1/jobs/{job_id}/positions/{id}';
24444
+ };
24445
+ export type DeletePositionErrors = {
24446
+ /**
24447
+ * Forbidden
24448
+ */
24449
+ 403: Problem;
24450
+ /**
24451
+ * Not Found
24452
+ */
24453
+ 404: Problem;
24454
+ /**
24455
+ * Unprocessable Content
24456
+ */
24457
+ 422: Problem;
24458
+ };
24459
+ export type DeletePositionError = DeletePositionErrors[keyof DeletePositionErrors];
24460
+ export type DeletePositionResponses = {
24461
+ /**
24462
+ * No Content
24463
+ */
24464
+ 204: void;
24465
+ };
24466
+ export type DeletePositionResponse = DeletePositionResponses[keyof DeletePositionResponses];
24467
+ export type GetPositionData = {
24468
+ body?: never;
24469
+ path: {
24470
+ job_id: string;
24471
+ id: string;
24472
+ };
24473
+ query?: never;
24474
+ url: '/api/v1/jobs/{job_id}/positions/{id}';
24475
+ };
24476
+ export type GetPositionErrors = {
24477
+ /**
24478
+ * Forbidden
24479
+ */
24480
+ 403: Problem;
24481
+ /**
24482
+ * Not Found
24483
+ */
24484
+ 404: Problem;
24485
+ };
24486
+ export type GetPositionError = GetPositionErrors[keyof GetPositionErrors];
24487
+ export type GetPositionResponses = {
24488
+ /**
24489
+ * Success
24490
+ */
24491
+ 200: PositionResponseObject;
24492
+ };
24493
+ export type GetPositionResponse = GetPositionResponses[keyof GetPositionResponses];
23391
24494
  export type UpdatePositionData = {
23392
24495
  body?: PositionParameters;
23393
24496
  path: {
@@ -23850,6 +24953,41 @@ export type GetPriorPeriodAdjustmentResponses = {
23850
24953
  200: PriorPeriodAdjustmentResponseObject;
23851
24954
  };
23852
24955
  export type GetPriorPeriodAdjustmentResponse = GetPriorPeriodAdjustmentResponses[keyof GetPriorPeriodAdjustmentResponses];
24956
+ export type UpdatePriorPeriodAdjustmentData = {
24957
+ body: PriorPeriodAdjustmentUpdateParameters;
24958
+ path: {
24959
+ time_card_id: string;
24960
+ id: string;
24961
+ };
24962
+ query?: never;
24963
+ url: '/api/v1/time_cards/{time_card_id}/prior_period_adjustments/{id}';
24964
+ };
24965
+ export type UpdatePriorPeriodAdjustmentErrors = {
24966
+ /**
24967
+ * Bad Request
24968
+ */
24969
+ 400: Problem;
24970
+ /**
24971
+ * Forbidden
24972
+ */
24973
+ 403: Problem;
24974
+ /**
24975
+ * Not Found
24976
+ */
24977
+ 404: Problem;
24978
+ /**
24979
+ * Unprocessable Content
24980
+ */
24981
+ 422: Problem;
24982
+ };
24983
+ export type UpdatePriorPeriodAdjustmentError = UpdatePriorPeriodAdjustmentErrors[keyof UpdatePriorPeriodAdjustmentErrors];
24984
+ export type UpdatePriorPeriodAdjustmentResponses = {
24985
+ /**
24986
+ * Success
24987
+ */
24988
+ 200: PriorPeriodAdjustmentResponseObject;
24989
+ };
24990
+ export type UpdatePriorPeriodAdjustmentResponse = UpdatePriorPeriodAdjustmentResponses[keyof UpdatePriorPeriodAdjustmentResponses];
23853
24991
  export type ListPwaCompliancesData = {
23854
24992
  body?: never;
23855
24993
  path: {
@@ -24130,6 +25268,10 @@ export type CreateTimeEntryErrors = {
24130
25268
  * Forbidden
24131
25269
  */
24132
25270
  403: Problem;
25271
+ /**
25272
+ * Not Found
25273
+ */
25274
+ 404: Problem;
24133
25275
  /**
24134
25276
  * Unprocessable Content
24135
25277
  */
@@ -24176,6 +25318,35 @@ export type DeleteTimeEntryResponses = {
24176
25318
  200: TimeEntryResponseObject;
24177
25319
  };
24178
25320
  export type DeleteTimeEntryResponse = DeleteTimeEntryResponses[keyof DeleteTimeEntryResponses];
25321
+ export type GetTimeEntryData = {
25322
+ body?: never;
25323
+ path: {
25324
+ /**
25325
+ * Unique identifier of the time entry.
25326
+ */
25327
+ id: string;
25328
+ };
25329
+ query?: never;
25330
+ url: '/api/v1/time_entries/{id}';
25331
+ };
25332
+ export type GetTimeEntryErrors = {
25333
+ /**
25334
+ * Forbidden
25335
+ */
25336
+ 403: Problem;
25337
+ /**
25338
+ * Not Found
25339
+ */
25340
+ 404: Problem;
25341
+ };
25342
+ export type GetTimeEntryError = GetTimeEntryErrors[keyof GetTimeEntryErrors];
25343
+ export type GetTimeEntryResponses = {
25344
+ /**
25345
+ * Success
25346
+ */
25347
+ 200: TimeEntryResponseObject;
25348
+ };
25349
+ export type GetTimeEntryResponse = GetTimeEntryResponses[keyof GetTimeEntryResponses];
24179
25350
  export type UpdateTimeEntryData = {
24180
25351
  body: TimeEntryUpdateParameters;
24181
25352
  path: {
@@ -25762,6 +26933,10 @@ export type UpdateCompanyData = {
25762
26933
  url: '/api/v1/users/{user_id}/companies/{company_id}';
25763
26934
  };
25764
26935
  export type UpdateCompanyErrors = {
26936
+ /**
26937
+ * Bad Request
26938
+ */
26939
+ 400: Problem;
25765
26940
  /**
25766
26941
  * Forbidden
25767
26942
  */
@@ -25791,6 +26966,10 @@ export type ListUsersData = {
25791
26966
  * Filter users by their employment lifecycle in the company, the same vocabulary `employment_state` publishes on each user. Defaults to `active` (an employment in effect now); `scheduled` returns employments that have not begun; `terminated` returns employments that have ended, with nothing current and nothing upcoming; `none` returns people your company sees without employing, which is its role holders and its invitees; `all` returns everyone your company sees.
25792
26967
  */
25793
26968
  'filter[state]'?: 'active' | 'scheduled' | 'terminated' | 'none' | 'all';
26969
+ /**
26970
+ * Fuzzy-matches the person name (trigram word-similarity). Matches the name column only — not email or phone.
26971
+ */
26972
+ 'filter[name]'?: string;
25794
26973
  /**
25795
26974
  * This pagination cursor corresponds to the cursor value found in the response in
25796
26975
  * `meta.page.next_cursor`.
@@ -25902,6 +27081,10 @@ export type UpdateUserData = {
25902
27081
  url: '/api/v1/users/{id}';
25903
27082
  };
25904
27083
  export type UpdateUserErrors = {
27084
+ /**
27085
+ * Bad Request
27086
+ */
27087
+ 400: Problem;
25905
27088
  /**
25906
27089
  * Forbidden
25907
27090
  */