@dsptch-work/api-client 0.36.0 → 0.37.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.
@@ -313,12 +313,6 @@ export type Problem = {
313
313
  *
314
314
  * An attachment signed id names no upload this endpoint can read. A signed id is issued for one `resource` and verifies only there, so an id for a different resource is indistinguishable from one that is malformed, expired, or tampered with, and all of them answer alike. The message names the resource the upload needed; upload the file again to the direct-uploads endpoint naming it, and pass the signed id that call returns.
315
315
  *
316
- * ### non_numeric_cents
317
- *
318
- * **Non-Numeric Money Value**
319
- *
320
- * A money parameter is not a numeric value in cents. Send money as a numeric cents value.
321
- *
322
316
  * ### nothing_to_cancel
323
317
  *
324
318
  * **Nothing To Cancel**
@@ -400,7 +394,7 @@ export type Problem = {
400
394
  * Another write to the same resource held it for longer than this request was willing to wait, or collided with it, so nothing was applied. The request itself is fine — resend it unchanged after the `Retry-After` window.
401
395
  *
402
396
  */
403
- export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'malformed_body' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'forbidden_key' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_subscribed' | 'already_terminated' | 'authorization_revoked' | 'import_in_progress' | 'pay_schedule_already_exists' | 'product_archived' | 'recorded_since_termination' | 'span_beyond_timeline_end' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'interval_too_wide' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error' | 'database_timeout' | 'write_contended';
397
+ export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'malformed_body' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'forbidden_key' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_subscribed' | 'already_terminated' | 'authorization_revoked' | 'import_in_progress' | 'pay_schedule_already_exists' | 'product_archived' | 'recorded_since_termination' | 'span_beyond_timeline_end' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'interval_too_wide' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error' | 'database_timeout' | 'write_contended';
404
398
  export type ApiKeyScopeResponseObject = {
405
399
  resource: string;
406
400
  action: 'read' | 'create' | 'update' | 'delete';
@@ -413,7 +407,7 @@ export type DirectUploadParameters = {
413
407
  /**
414
408
  * 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.
415
409
  */
416
- 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' | 'payrolls.payroll_runs.imports.wide_paystubs' | 'projects.documents' | 'users';
410
+ 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' | 'jobs.documents' | 'pay_periods.imports.aggregate_times' | 'pay_periods.imports.dsptch_cprs' | 'pay_periods.imports.time_entries' | 'payrolls.payroll_runs.imports.paystubs' | 'payrolls.payroll_runs.imports.wide_paystubs' | 'projects.documents' | 'users';
417
411
  /**
418
412
  * Metadata describing the file being registered, before its bytes are uploaded.
419
413
  */
@@ -769,9 +763,9 @@ export type CompetencyCriterionResponseObject = {
769
763
  */
770
764
  evidence_note: string | null;
771
765
  /**
772
- * Suggested assessment method for this criterion; null when unset. An assessment does not have to use it.
766
+ * Suggested assessment methods for this criterion. Empty when none are suggested. An assessment does not have to use them.
773
767
  */
774
- assessment_method: 'direct_observation' | 'simulation' | 'oral_questioning' | 'written_questioning' | 'products_of_work' | 'recognized_prior_learning' | 'witness_testimony' | 'other' | null;
768
+ assessment_methods: Array<'direct_observation' | 'simulation' | 'oral_questioning' | 'written_questioning' | 'products_of_work' | 'recognized_prior_learning' | 'witness_testimony' | 'other'>;
775
769
  /**
776
770
  * When the criterion was created.
777
771
  */
@@ -798,9 +792,9 @@ export type CompetencyCriterionParameters = {
798
792
  */
799
793
  evidence_note?: string | null;
800
794
  /**
801
- * Suggested assessment method; optional, null to clear.
795
+ * Suggested assessment methods. Optional. Send an empty array to clear.
802
796
  */
803
- assessment_method?: 'direct_observation' | 'simulation' | 'oral_questioning' | 'written_questioning' | 'products_of_work' | 'recognized_prior_learning' | 'witness_testimony' | 'other' | null;
797
+ assessment_methods?: Array<'direct_observation' | 'simulation' | 'oral_questioning' | 'written_questioning' | 'products_of_work' | 'recognized_prior_learning' | 'witness_testimony' | 'other'>;
804
798
  };
805
799
  /**
806
800
  * Swap a draft catalog row with its neighbor. The row cannot move past either end of the list.
@@ -1019,9 +1013,9 @@ export type CompetencyAssessmentResponseObject = {
1019
1013
  updated_at: string;
1020
1014
  };
1021
1015
  /**
1022
- * One task line on an assessment. decision and qa_feedback are omitted, not null, when the caller is the candidate and the package is not yet decided.
1016
+ * One criterion line on an assessment. decision and qa_feedback are omitted, not null, when the caller is the candidate and the package is not yet decided.
1023
1017
  */
1024
- export type CompetencyAssessmentKeyActivityResponseObject = {
1018
+ export type CompetencyAssessmentCriterionResponseObject = {
1025
1019
  /**
1026
1020
  * ID of the line.
1027
1021
  */
@@ -1031,9 +1025,9 @@ export type CompetencyAssessmentKeyActivityResponseObject = {
1031
1025
  */
1032
1026
  competencies_assessment_id: string;
1033
1027
  /**
1034
- * ID of the catalog key activity snapshotted onto the line.
1028
+ * ID of the catalog criterion snapshotted onto the line.
1035
1029
  */
1036
- competencies_key_activity_id: string;
1030
+ competencies_criterion_id: string;
1037
1031
  /**
1038
1032
  * Methods the assessor recorded for this line. Empty when none have been recorded.
1039
1033
  */
@@ -1090,7 +1084,7 @@ export type CompetencyEvidenceItemResponseObject = {
1090
1084
  /**
1091
1085
  * ID of the assessment line this evidence is attached to.
1092
1086
  */
1093
- competencies_assessment_key_activity_id: string;
1087
+ competencies_assessment_criterion_id: string;
1094
1088
  /**
1095
1089
  * What the evidence points at: upload, form_submission, or certification.
1096
1090
  */
@@ -1706,7 +1700,7 @@ export type ApprenticeshipProgramEmployerUpdateParameters = {
1706
1700
  require_timecard_allocation?: boolean;
1707
1701
  };
1708
1702
  /**
1709
- * Create a period on a wage schedule; the wage schedule is taken from the URL path. wage_cents and fringe_cents are sent as integer cents. Omitting period_number, wage_percent, or wage_cents answers 400. A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those leaves it unset, but a period with none of min_minutes, max_minutes, or num_competencies answers 422.
1703
+ * Create a period on a wage schedule; the wage schedule is taken from the URL path. wage_percent and fringe_percent are sent as decimal strings (e.g. "62.5"), and wage_cents and fringe_cents as cents in a decimal string (e.g. "2800" or "2800.0"). Omitting period_number, wage_percent, or wage_cents answers 400. A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those leaves it unset, but a period with none of min_minutes, max_minutes, or num_competencies answers 422.
1710
1704
  */
1711
1705
  export type ApprenticeshipWageSchedulePeriodParameters = {
1712
1706
  /**
@@ -1730,24 +1724,24 @@ export type ApprenticeshipWageSchedulePeriodParameters = {
1730
1724
  */
1731
1725
  description?: string | null;
1732
1726
  /**
1733
- * Percentage of the journeyworker wage paid during this period (e.g. 75 for 75%). Required.
1727
+ * Percentage of the journeyworker wage paid during this period, as a decimal string (e.g. "75" or "75.0" for 75%). Required.
1734
1728
  */
1735
- wage_percent: number;
1729
+ wage_percent: string;
1736
1730
  /**
1737
- * Wage rate for this period, in cents; denominated in the parent schedule's wage_unit. Required.
1731
+ * Wage rate for this period, in cents as a decimal string (e.g. "3150" or "3150.0"); denominated in the parent schedule's wage_unit. Required.
1738
1732
  */
1739
- wage_cents: number;
1733
+ wage_cents: string;
1740
1734
  /**
1741
- * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges (e.g. 70 for 70%); optional, omit or send null when the period does not list fringe as a percentage. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1735
+ * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges, sent as a decimal string (e.g. "70" or "70.0" for 70%); optional, omit or send null when the period does not list fringe as a percentage. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1742
1736
  */
1743
- fringe_percent?: number | null;
1737
+ fringe_percent?: string | null;
1744
1738
  /**
1745
- * Fixed hourly apprentice fringe for this period, in cents, in the period's wage currency; optional, omit or send null when the period does not list a fixed fringe. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1739
+ * Fixed hourly apprentice fringe for this period, in cents as a decimal string (e.g. "450" or "450.0"), in the period's wage currency; optional, omit or send null when the period does not list a fixed fringe. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1746
1740
  */
1747
- fringe_cents?: number | null;
1741
+ fringe_cents?: string | null;
1748
1742
  };
1749
1743
  /**
1750
- * Update a period on a wage schedule. Send only the fields to change; the wage schedule is taken from the URL path, and wage_cents and fringe_cents are sent as integer cents. A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those clears it, but a period left with none of min_minutes, max_minutes, or num_competencies answers 422.
1744
+ * Update a period on a wage schedule. Send only the fields to change; the wage schedule is taken from the URL path, wage_percent and fringe_percent are sent as decimal strings (e.g. "62.5"), and wage_cents and fringe_cents as cents in a decimal string (e.g. "2800" or "2800.0"). A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those clears it, but a period left with none of min_minutes, max_minutes, or num_competencies answers 422.
1751
1745
  */
1752
1746
  export type ApprenticeshipWageSchedulePeriodUpdateParameters = {
1753
1747
  /**
@@ -1771,24 +1765,24 @@ export type ApprenticeshipWageSchedulePeriodUpdateParameters = {
1771
1765
  */
1772
1766
  description?: string | null;
1773
1767
  /**
1774
- * Percentage of the journeyworker wage paid during this period (e.g. 75 for 75%); omit to leave it unchanged.
1768
+ * Percentage of the journeyworker wage paid during this period, as a decimal string (e.g. "75" or "75.0" for 75%); omit to leave it unchanged.
1775
1769
  */
1776
- wage_percent?: number;
1770
+ wage_percent?: string;
1777
1771
  /**
1778
- * Wage rate for this period, in cents; omit to leave it unchanged.
1772
+ * Wage rate for this period, in cents as a decimal string (e.g. "3150" or "3150.0"); omit to leave it unchanged.
1779
1773
  */
1780
- wage_cents?: number;
1774
+ wage_cents?: string;
1781
1775
  /**
1782
- * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges (e.g. 70 for 70%); omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a fixed amount sends fringe_cents with fringe_percent null; a request that leaves both set is rejected with a 422.
1776
+ * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges, sent as a decimal string (e.g. "70" or "70.0" for 70%); omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a fixed amount sends fringe_cents with fringe_percent null; a request that leaves both set is rejected with a 422.
1783
1777
  */
1784
- fringe_percent?: number | null;
1778
+ fringe_percent?: string | null;
1785
1779
  /**
1786
- * Fixed hourly apprentice fringe for this period, in cents; omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a percentage sends fringe_percent with fringe_cents null; a request that leaves both set is rejected with a 422.
1780
+ * Fixed hourly apprentice fringe for this period, in cents as a decimal string (e.g. "450" or "450.0"); omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a percentage sends fringe_percent with fringe_cents null; a request that leaves both set is rejected with a 422.
1787
1781
  */
1788
- fringe_cents?: number | null;
1782
+ fringe_cents?: string | null;
1789
1783
  };
1790
1784
  /**
1791
- * Create a wage schedule for an occupation; the occupation is taken from the URL path. Money is sent as integer cents; periods may be created inline via periods_attributes. Omitting name, wage_unit, journeyworker_wage_unit, or period_unit answers 400. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those leaves the field unset.
1785
+ * Create a wage schedule for an occupation; the occupation is taken from the URL path. Money is sent as cents in a decimal string (e.g. "2800" or "2800.0"); periods may be created inline via periods_attributes. Omitting name, wage_unit, journeyworker_wage_unit, or period_unit answers 400. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those leaves the field unset.
1792
1786
  */
1793
1787
  export type ApprenticeshipWageScheduleParameters = {
1794
1788
  /**
@@ -1812,17 +1806,17 @@ export type ApprenticeshipWageScheduleParameters = {
1812
1806
  */
1813
1807
  period_unit: 'hours' | 'weeks' | 'months' | 'quarter' | 'semi_annual' | 'year';
1814
1808
  /**
1815
- * The journeyworker wage to progress toward, in cents; denominated in journeyworker_wage_unit; optional, defaults to 0.
1809
+ * The journeyworker wage to progress toward, in cents as a decimal string (e.g. "5000" or "5000.0"); denominated in journeyworker_wage_unit; optional, defaults to 0.
1816
1810
  */
1817
- journeyworker_wage_cents?: number;
1811
+ journeyworker_wage_cents?: string;
1818
1812
  /**
1819
- * The journeyworker fringe that percentage-listed periods are authored against, in cents; an authoring reference only, never priced; optional, omit or send null to leave it unset.
1813
+ * The journeyworker fringe that percentage-listed periods are authored against, in cents as a decimal string (e.g. "2000" or "2000.0"); an authoring reference only, never priced; optional, omit or send null to leave it unset.
1820
1814
  */
1821
- journeyworker_fringe_cents?: number | null;
1815
+ journeyworker_fringe_cents?: string | null;
1822
1816
  /**
1823
- * Wage at the end of the progression (100% of the journeyworker wage), in cents; denominated in wage_unit; optional, defaults to 0.
1817
+ * Wage at the end of the progression (100% of the journeyworker wage), in cents as a decimal string (e.g. "4200" or "4200.0"); denominated in wage_unit; optional, defaults to 0.
1824
1818
  */
1825
- end_wage_cents?: number;
1819
+ end_wage_cents?: string;
1826
1820
  /**
1827
1821
  * Periods to create, update, or remove alongside the schedule, as a list of row objects; omit a period's id to add one, include its id to update it, or send its id with _destroy true to remove it; optional. In a row, an unknown key, a wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those leaves it unset, but a period with none of min_minutes, max_minutes, or num_competencies answers 422.
1828
1822
  */
@@ -1852,21 +1846,21 @@ export type ApprenticeshipWageScheduleParameters = {
1852
1846
  */
1853
1847
  description?: string | null;
1854
1848
  /**
1855
- * Percentage of the journeyworker wage paid during this period (e.g. 75 for 75%). Required.
1849
+ * Percentage of the journeyworker wage paid during this period, as a decimal string (e.g. "75" or "75.0" for 75%). Required.
1856
1850
  */
1857
- wage_percent?: number;
1851
+ wage_percent?: string;
1858
1852
  /**
1859
- * Wage rate for this period, in cents; denominated in the parent schedule's wage_unit. Required.
1853
+ * Wage rate for this period, in cents as a decimal string (e.g. "3150" or "3150.0"); denominated in the parent schedule's wage_unit. Required.
1860
1854
  */
1861
- wage_cents?: number;
1855
+ wage_cents?: string;
1862
1856
  /**
1863
- * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges (e.g. 70 for 70%); optional, omit or send null when the period does not list fringe as a percentage. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1857
+ * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges, sent as a decimal string (e.g. "70" or "70.0" for 70%); optional, omit or send null when the period does not list fringe as a percentage. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1864
1858
  */
1865
- fringe_percent?: number | null;
1859
+ fringe_percent?: string | null;
1866
1860
  /**
1867
- * Fixed hourly apprentice fringe for this period, in cents, in the period's wage currency; optional, omit or send null when the period does not list a fixed fringe. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1861
+ * Fixed hourly apprentice fringe for this period, in cents as a decimal string (e.g. "450" or "450.0"), in the period's wage currency; optional, omit or send null when the period does not list a fixed fringe. A period lists fringe one way at most, so sending both fringe_percent and fringe_cents non-null is rejected with a 422.
1868
1862
  */
1869
- fringe_cents?: number | null;
1863
+ fringe_cents?: string | null;
1870
1864
  /**
1871
1865
  * Set to true, together with the period's id, to remove that period from the schedule.
1872
1866
  */
@@ -1874,7 +1868,7 @@ export type ApprenticeshipWageScheduleParameters = {
1874
1868
  }>;
1875
1869
  };
1876
1870
  /**
1877
- * Update a wage schedule for an occupation. Send only the fields to change; money is sent as integer cents and periods may be created, updated, or removed inline via periods_attributes. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those clears the field.
1871
+ * Update a wage schedule for an occupation. Send only the fields to change; money is sent as cents in a decimal string (e.g. "2800" or "2800.0") and periods may be created, updated, or removed inline via periods_attributes. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those clears the field.
1878
1872
  */
1879
1873
  export type ApprenticeshipWageScheduleUpdateParameters = {
1880
1874
  /**
@@ -1898,17 +1892,17 @@ export type ApprenticeshipWageScheduleUpdateParameters = {
1898
1892
  */
1899
1893
  period_unit?: 'hours' | 'weeks' | 'months' | 'quarter' | 'semi_annual' | 'year';
1900
1894
  /**
1901
- * Journeyworker wage to progress toward, in cents; omit to leave it unchanged.
1895
+ * Journeyworker wage to progress toward, in cents as a decimal string (e.g. "5000" or "5000.0"); omit to leave it unchanged.
1902
1896
  */
1903
- journeyworker_wage_cents?: number;
1897
+ journeyworker_wage_cents?: string;
1904
1898
  /**
1905
- * The journeyworker fringe that percentage-listed periods are authored against, in cents; an authoring reference only, never priced; omit to leave it unchanged, or send null to clear.
1899
+ * The journeyworker fringe that percentage-listed periods are authored against, in cents as a decimal string (e.g. "2000" or "2000.0"); an authoring reference only, never priced; omit to leave it unchanged, or send null to clear.
1906
1900
  */
1907
- journeyworker_fringe_cents?: number | null;
1901
+ journeyworker_fringe_cents?: string | null;
1908
1902
  /**
1909
- * Wage at the end of the progression, in cents; omit to leave it unchanged.
1903
+ * Wage at the end of the progression, in cents as a decimal string (e.g. "4200" or "4200.0"); omit to leave it unchanged.
1910
1904
  */
1911
- end_wage_cents?: number;
1905
+ end_wage_cents?: string;
1912
1906
  /**
1913
1907
  * Periods to create, update, or remove alongside the schedule, as a list of row objects; omit a period's id to add one, include its id to update it, or send its id with _destroy true to remove it; omit the list to leave every period unchanged. In a row, an unknown key, a wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those clears it, but a period left with none of min_minutes, max_minutes, or num_competencies answers 422.
1914
1908
  */
@@ -1938,21 +1932,21 @@ export type ApprenticeshipWageScheduleUpdateParameters = {
1938
1932
  */
1939
1933
  description?: string | null;
1940
1934
  /**
1941
- * Percentage of the journeyworker wage paid during this period (e.g. 75 for 75%); omit to leave it unchanged.
1935
+ * Percentage of the journeyworker wage paid during this period, as a decimal string (e.g. "75" or "75.0" for 75%); omit to leave it unchanged.
1942
1936
  */
1943
- wage_percent?: number;
1937
+ wage_percent?: string;
1944
1938
  /**
1945
- * Wage rate for this period, in cents; omit to leave it unchanged.
1939
+ * Wage rate for this period, in cents as a decimal string (e.g. "3150" or "3150.0"); omit to leave it unchanged.
1946
1940
  */
1947
- wage_cents?: number;
1941
+ wage_cents?: string;
1948
1942
  /**
1949
- * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges (e.g. 70 for 70%); omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a fixed amount sends fringe_cents with fringe_percent null; a request that leaves both set is rejected with a 422.
1943
+ * Apprentice fringe for this period, as a percentage of the fringe on the wage determination the apprentice charges, sent as a decimal string (e.g. "70" or "70.0" for 70%); omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a fixed amount sends fringe_cents with fringe_percent null; a request that leaves both set is rejected with a 422.
1950
1944
  */
1951
- fringe_percent?: number | null;
1945
+ fringe_percent?: string | null;
1952
1946
  /**
1953
- * Fixed hourly apprentice fringe for this period, in cents; omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a percentage sends fringe_percent with fringe_cents null; a request that leaves both set is rejected with a 422.
1947
+ * Fixed hourly apprentice fringe for this period, in cents as a decimal string (e.g. "450" or "450.0"); omit to leave it unchanged, or send null to clear. A period lists fringe one way at most, so switching to a percentage sends fringe_percent with fringe_cents null; a request that leaves both set is rejected with a 422.
1954
1948
  */
1955
- fringe_cents?: number | null;
1949
+ fringe_cents?: string | null;
1956
1950
  /**
1957
1951
  * Set to true, together with the period's id, to remove that period from the schedule.
1958
1952
  */
@@ -2546,7 +2540,7 @@ export type TimecodeHistoryVersionObject = {
2546
2540
  */
2547
2541
  export type TimecodeParameters = {
2548
2542
  /**
2549
- * When the new timecode becomes effective. Defaults to the time of the request. Accepted on create only.
2543
+ * When the new timecode becomes effective, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`). Defaults to the time of the request. Accepted on create only.
2550
2544
  */
2551
2545
  effective_date?: string;
2552
2546
  /**
@@ -4631,62 +4625,69 @@ export type PwaJobDetailsResponseObject = {
4631
4625
  ny_dol_prc_number?: string | null;
4632
4626
  } | null;
4633
4627
  /**
4634
- * 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.
4628
+ * Parameters for creating a job. Sets the job's schedule, work types, address, custom-field values, and optional Prevailing Wage / Apprenticeship (PWA) compliance. `requested_by_company_id` and `created_by_user_id` are required unless `template_id` names a template, whose copy keeps both. Undeclared body keys return 400, and a null for a field that is not nullable or a wrongly typed value returns 422 at its pointer, before any job or relationship is saved.
4635
4629
  */
4636
- export type JobParameters = {
4630
+ export type JobCreateParameters = {
4631
+ /**
4632
+ * ID of the user creating the job; the creator cannot be changed afterward. A copy of a template keeps the template's creator when this is omitted. Null, a blank ID, or a wrong type answers 422.
4633
+ */
4634
+ created_by_user_id?: string;
4635
+ /**
4636
+ * 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; a blank ID or a wrong type answers 422.
4637
+ */
4638
+ template_id?: string | null;
4637
4639
  /**
4638
4640
  * Human-readable job name, unique within the creating company; null when unset.
4639
4641
  */
4640
4642
  name?: string | null;
4641
4643
  /**
4642
- * Free-text description of the job.
4644
+ * Free-text description of the job. Null or a wrong type answers 422.
4643
4645
  */
4644
4646
  description?: string;
4645
4647
  /**
4646
- * ID of the company that requested the job (for example a general contractor). Required on create; omit on update to preserve the existing requester.
4648
+ * ID of the company that requested the job (for example a general contractor). Omit on update to preserve the existing requester. Null, a blank ID, or a wrong type answers 422.
4647
4649
  */
4648
4650
  requested_by_company_id?: string;
4649
- /**
4650
- * Complete desired set of unique nonblank manager user IDs. Omit to preserve the set; send an empty array to clear it. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before any job or relationship is saved.
4651
- */
4652
- manager_user_ids?: Array<string>;
4653
4651
  /**
4654
4652
  * Purchase order number for the job; null when unset.
4655
4653
  */
4656
4654
  purchase_order_number?: string | null;
4657
4655
  /**
4658
- * ID of the project this job belongs to; null when the job is not part of a project.
4656
+ * ID of the project this job belongs to; null when the job is not part of a project. A blank ID or a wrong type answers 422.
4659
4657
  */
4660
4658
  project_id?: string | null;
4661
4659
  /**
4662
- * ID of a department belonging to the job's provider company. Retrieve department IDs from GET /api/v1/companies/departments. Send null to clear the assignment; omit on update to preserve it, or on create to preserve a copied template's assignment. A new job without a template starts unassigned.
4660
+ * ID of a department belonging to the job's provider company. Retrieve department IDs from GET /api/v1/companies/departments. Send null to clear the assignment; omit on update to preserve it, or on create to preserve a copied template's assignment. A new job without a template starts unassigned. A blank ID or a wrong type answers 422.
4663
4661
  */
4664
4662
  companies_department_id?: string | null;
4665
4663
  /**
4666
- * Federal prevailing-wage / apprenticeship (PWA) tracking mode: one of all (both prevailing wage and apprenticeship), pw_only, ap_only, or none.
4664
+ * Federal prevailing-wage / apprenticeship (PWA) tracking mode: one of all (both prevailing wage and apprenticeship), pw_only, ap_only, or none. Null or any other value returns 422.
4667
4665
  */
4668
4666
  federal_pwa_mode?: 'all' | 'pw_only' | 'ap_only' | 'none';
4669
4667
  /**
4670
- * Regional (state) prevailing-wage / apprenticeship tracking mode: one of all (both prevailing wage and apprenticeship), pw_only, ap_only, or none.
4668
+ * Regional (state) prevailing-wage / apprenticeship tracking mode, with the same values as federal_pwa_mode; null or any other value returns 422.
4671
4669
  */
4672
4670
  regional_pwa_mode?: 'all' | 'pw_only' | 'ap_only' | 'none';
4673
4671
  /**
4674
4672
  * Two-letter state code (e.g. CA, IL, NY) that selects which regional prevailing-wage fields under pwa_details apply.
4675
4673
  */
4676
- region?: string;
4674
+ region?: string | null;
4677
4675
  /**
4678
- * Start of the job's scheduled window (ISO 8601); the date is anchored to the start of that day in tz_name. Null to leave the job unscheduled.
4676
+ * Start of the job's scheduled window (ISO 8601); the date is anchored to the start of that day in tz_name. Null to leave the job unscheduled; any other non-string, false included, answers 422.
4679
4677
  */
4680
4678
  start_time?: string | null;
4681
4679
  /**
4682
- * End of the job's scheduled window (ISO 8601); the date is anchored to the start of that day in tz_name. Null to leave the job unscheduled.
4680
+ * End of the job's scheduled window (ISO 8601); the date is anchored to the start of that day in tz_name. Null to leave the job unscheduled; any other non-string, false included, answers 422.
4683
4681
  */
4684
4682
  end_time?: string | null;
4685
4683
  /**
4686
- * Time zone the job's schedule and time tracking are anchored to (e.g. US/Central); defaults to US/Central when unset.
4684
+ * Time zone the job's schedule and time tracking are anchored to (e.g. US/Central); defaults to US/Central when unset. Null, a blank or unlisted name, or a wrong type answers 422.
4687
4685
  */
4688
4686
  tz_name?: string;
4689
- time_card_start_day?: TimeCardStartDay;
4687
+ /**
4688
+ * Day of the week the job's workweek and time cards start on, as an integer: 0 (Sunday) through 6 (Saturday). Any other value, a numeric string included, answers 422.
4689
+ */
4690
+ time_card_start_day?: number;
4690
4691
  /**
4691
4692
  * Clock-in enforcement level: one of none (no guidance), warning (manual time entries fail the clock-in compliance check), or required (a technician's own time on the job must come from clocking in on DSPTCH Mobile; the technician's own web and user-API-key time-entry writes are refused). A time entry whose time code, as of the entry's start time, is PTO, holiday, or restricted to non-job time entries is exempt at every level. Time-entry writes made with a company API key are not gated. While the creating company requires clock-in company-wide, a create stores `required` whatever value is sent, and lowering an open job returns 422 with the error at `#/clock_in_requirement`. Omit the field to leave the current value unchanged.
4692
4693
  */
@@ -4696,31 +4697,276 @@ export type JobParameters = {
4696
4697
  */
4697
4698
  send_geofence_reminders?: boolean | null;
4698
4699
  /**
4699
- * Whether customers granted access can view this job.
4700
+ * Whether customers granted access can view this job. A boolean; null or any other type returns 422.
4700
4701
  */
4701
4702
  allow_customer_access?: boolean;
4703
+ /**
4704
+ * Whether the feature-allocation selector is shown for this job. A boolean; null or any other type returns 422.
4705
+ */
4706
+ tracks_feature_allocations?: boolean;
4707
+ /**
4708
+ * Whether applicable time entries on this job must carry a feature allocation. A boolean; null or any other type returns 422.
4709
+ */
4710
+ requires_feature_allocation?: boolean;
4711
+ /**
4712
+ * Whether time entries on this job are capped at one feature allocation. A boolean; null or any other type returns 422.
4713
+ */
4714
+ max_one_feature_allocation?: boolean;
4715
+ /**
4716
+ * 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. Omit the field to leave the current value unchanged.
4717
+ */
4718
+ production_tracking_kind?: 'none' | 'feature' | 'quantity';
4719
+ /**
4720
+ * Complete desired set of unique nonblank manager user IDs. Omit to preserve the set; send an empty array to clear it. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before any job or relationship is saved.
4721
+ */
4722
+ manager_user_ids?: Array<string>;
4702
4723
  /**
4703
4724
  * Complete desired set of unique nonblank timecode IDs. Omit to preserve the set; send an empty array to clear it. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before any job or relationship is saved.
4704
4725
  */
4705
4726
  timekeeping_timecode_ids?: Array<string>;
4706
4727
  /**
4707
- * Whether the feature-allocation selector is shown for this job; null when unset.
4728
+ * Work types (trade or scope categories) to associate with the job, one row each. Null, a non-array, or a row that is not an object answers 422.
4708
4729
  */
4709
- tracks_feature_allocations?: boolean | null;
4730
+ job_work_types_attributes?: Array<{
4731
+ /**
4732
+ * Whether this is the job's primary work type.
4733
+ */
4734
+ primary?: boolean;
4735
+ /**
4736
+ * ID of the work type to associate with the job.
4737
+ */
4738
+ work_type_id?: string;
4739
+ }>;
4710
4740
  /**
4711
- * Whether applicable time entries on this job must carry a feature allocation; null when unset.
4741
+ * The job's structured street address. Null or a non-object answers 422; an unknown key inside it answers 422 at its pointer.
4712
4742
  */
4713
- requires_feature_allocation?: boolean | null;
4743
+ job_address_attributes?: {
4744
+ /**
4745
+ * ID of an existing address to update; null to create a new address.
4746
+ */
4747
+ id?: string | null;
4748
+ /**
4749
+ * Secondary address designator such as an apartment or suite number; null when unset.
4750
+ */
4751
+ sub_address_number?: string | null;
4752
+ /**
4753
+ * Street number of the address; null when unset.
4754
+ */
4755
+ address_number?: string | null;
4756
+ /**
4757
+ * Neighborhood of the address; null when unset.
4758
+ */
4759
+ neighborhood?: string | null;
4760
+ /**
4761
+ * City or municipality of the address; null when unset.
4762
+ */
4763
+ municipality?: string | null;
4764
+ /**
4765
+ * County or other sub-region of the address; null when unset.
4766
+ */
4767
+ sub_region?: string | null;
4768
+ /**
4769
+ * State or region of the address; null when unset.
4770
+ */
4771
+ region?: string | null;
4772
+ /**
4773
+ * Postal or ZIP code of the address; null when unset.
4774
+ */
4775
+ postal_code?: string | null;
4776
+ /**
4777
+ * Country of the address; null when unset.
4778
+ */
4779
+ country?: string | null;
4780
+ /**
4781
+ * Time zone of the address (e.g. US/Central); null when unset. A blank or unlisted name answers 422.
4782
+ */
4783
+ timezone?: string | null;
4784
+ /**
4785
+ * Whether the address has been verified. A boolean; null or any other type returns 422.
4786
+ */
4787
+ verified?: boolean;
4788
+ /**
4789
+ * Human-readable one-line address label; null derives it from the other fields.
4790
+ */
4791
+ label?: string | null;
4792
+ };
4714
4793
  /**
4715
- * Whether time entries on this job are capped at one feature allocation; null when unset.
4794
+ * 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.
4716
4795
  */
4717
- max_one_feature_allocation?: boolean | null;
4796
+ custom_fields?: Array<{
4797
+ /**
4798
+ * ID of a visible custom-field configuration owned by the credential company and applicable to jobs.
4799
+ */
4800
+ custom_field_config_id: string;
4801
+ /**
4802
+ * Value as text or null.
4803
+ */
4804
+ value: string | null;
4805
+ }>;
4806
+ /**
4807
+ * Prevailing-wage / apprenticeship (PWA) compliance details to set on the job. Omit or send an empty object to make no PWA-details changes. Null or a non-object answers 422, and so does an unknown key or a wrongly typed field inside it, at its pointer. The accepted regional keys depend on the effective region and regional PWA mode.
4808
+ */
4809
+ pwa_details?: {
4810
+ /**
4811
+ * Role of the company on this job for PWA reporting: one of prime_contractor or sub_contractor; null when unset.
4812
+ */
4813
+ contractor_type?: 'prime_contractor' | 'sub_contractor' | null;
4814
+ /**
4815
+ * Whether new positions on the job default to paying the full fringe as cash. Omit to retain the current value (or use the database default on create); when sent, the value must be JSON true or false.
4816
+ */
4817
+ pay_full_cash_fringe_by_default?: boolean;
4818
+ /**
4819
+ * California DIR (Department of Industrial Relations) awarding-body ID; null when not applicable.
4820
+ */
4821
+ dir_awarding_body_id?: string | null;
4822
+ /**
4823
+ * California DIR project registration ID (an 11-digit number); null when not applicable.
4824
+ */
4825
+ dir_project_id?: string | null;
4826
+ /**
4827
+ * California DIR project name; null when not applicable.
4828
+ */
4829
+ dir_project_name?: string | null;
4830
+ /**
4831
+ * California DIR contract ID; null when not applicable.
4832
+ */
4833
+ dir_contract_id?: string | null;
4834
+ /**
4835
+ * California DIR awarding-body name; null when not applicable.
4836
+ */
4837
+ dir_project_awarding_body_name?: string | null;
4838
+ /**
4839
+ * California DIR project number; null when not applicable.
4840
+ */
4841
+ dir_project_number?: string | null;
4842
+ /**
4843
+ * Illinois DOL (Department of Labor) project ID; null when not applicable.
4844
+ */
4845
+ il_dol_project_id?: string | null;
4846
+ /**
4847
+ * Whether the Illinois project is funded with state capital funds, as JSON true or false; null when not applicable.
4848
+ */
4849
+ il_dol_state_capital_funds?: boolean | null;
4850
+ /**
4851
+ * Illinois DOL public-body name; null when not applicable.
4852
+ */
4853
+ il_dol_public_body_name?: string | null;
4854
+ /**
4855
+ * ID of the Illinois DOL public-body contact; null when not applicable.
4856
+ */
4857
+ il_dol_public_body_contact_id?: string | null;
4858
+ /**
4859
+ * ID of the Illinois DOL public-body address; null when not applicable.
4860
+ */
4861
+ il_dol_public_body_address_id?: string | null;
4862
+ /**
4863
+ * Illinois DOL contract number; null when not applicable.
4864
+ */
4865
+ il_dol_contract_number?: string | null;
4866
+ /**
4867
+ * Illinois SHINES project ID; null when not applicable.
4868
+ */
4869
+ il_shines_project_id?: string | null;
4870
+ /**
4871
+ * New York DOL prevailing-rate-case (PRC) number, a 10-digit identifier; null when not applicable.
4872
+ */
4873
+ ny_dol_prc_number?: string | null;
4874
+ };
4875
+ };
4876
+ /**
4877
+ * 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. Sending `created_by_user_id` returns 400 unknown_key, including when it matches the existing creator or is null. Undeclared body keys return 400, and a null for a field that is not nullable or a wrongly typed value returns 422 at its pointer, before any job or relationship changes.
4878
+ */
4879
+ export type JobUpdateParameters = {
4880
+ /**
4881
+ * Human-readable job name, unique within the creating company; null when unset.
4882
+ */
4883
+ name?: string | null;
4884
+ /**
4885
+ * Free-text description of the job. Null or a wrong type answers 422.
4886
+ */
4887
+ description?: string;
4888
+ /**
4889
+ * ID of the company that requested the job (for example a general contractor). Omit on update to preserve the existing requester. Null, a blank ID, or a wrong type answers 422.
4890
+ */
4891
+ requested_by_company_id?: string;
4892
+ /**
4893
+ * Purchase order number for the job; null when unset.
4894
+ */
4895
+ purchase_order_number?: string | null;
4896
+ /**
4897
+ * ID of the project this job belongs to; null when the job is not part of a project. A blank ID or a wrong type answers 422.
4898
+ */
4899
+ project_id?: string | null;
4900
+ /**
4901
+ * ID of a department belonging to the job's provider company. Retrieve department IDs from GET /api/v1/companies/departments. Send null to clear the assignment; omit on update to preserve it, or on create to preserve a copied template's assignment. A new job without a template starts unassigned. A blank ID or a wrong type answers 422.
4902
+ */
4903
+ companies_department_id?: string | null;
4904
+ /**
4905
+ * Federal prevailing-wage / apprenticeship (PWA) tracking mode: one of all (both prevailing wage and apprenticeship), pw_only, ap_only, or none. Null or any other value returns 422.
4906
+ */
4907
+ federal_pwa_mode?: 'all' | 'pw_only' | 'ap_only' | 'none';
4908
+ /**
4909
+ * Regional (state) prevailing-wage / apprenticeship tracking mode, with the same values as federal_pwa_mode; null or any other value returns 422.
4910
+ */
4911
+ regional_pwa_mode?: 'all' | 'pw_only' | 'ap_only' | 'none';
4912
+ /**
4913
+ * Two-letter state code (e.g. CA, IL, NY) that selects which regional prevailing-wage fields under pwa_details apply.
4914
+ */
4915
+ region?: string | null;
4916
+ /**
4917
+ * Start of the job's scheduled window (ISO 8601); the date is anchored to the start of that day in tz_name. Null to leave the job unscheduled; any other non-string, false included, answers 422.
4918
+ */
4919
+ start_time?: string | null;
4920
+ /**
4921
+ * End of the job's scheduled window (ISO 8601); the date is anchored to the start of that day in tz_name. Null to leave the job unscheduled; any other non-string, false included, answers 422.
4922
+ */
4923
+ end_time?: string | null;
4924
+ /**
4925
+ * Time zone the job's schedule and time tracking are anchored to (e.g. US/Central); defaults to US/Central when unset. Null, a blank or unlisted name, or a wrong type answers 422.
4926
+ */
4927
+ tz_name?: string;
4928
+ /**
4929
+ * Day of the week the job's workweek and time cards start on, as an integer: 0 (Sunday) through 6 (Saturday). Any other value, a numeric string included, answers 422.
4930
+ */
4931
+ time_card_start_day?: number;
4932
+ /**
4933
+ * Clock-in enforcement level: one of none (no guidance), warning (manual time entries fail the clock-in compliance check), or required (a technician's own time on the job must come from clocking in on DSPTCH Mobile; the technician's own web and user-API-key time-entry writes are refused). A time entry whose time code, as of the entry's start time, is PTO, holiday, or restricted to non-job time entries is exempt at every level. Time-entry writes made with a company API key are not gated. While the creating company requires clock-in company-wide, a create stores `required` whatever value is sent, and lowering an open job returns 422 with the error at `#/clock_in_requirement`. Omit the field to leave the current value unchanged.
4934
+ */
4935
+ clock_in_requirement?: 'none' | 'warning' | 'required';
4936
+ /**
4937
+ * Whether to send geofence-based clock-in/out reminders for this job; null when unset.
4938
+ */
4939
+ send_geofence_reminders?: boolean | null;
4940
+ /**
4941
+ * Whether customers granted access can view this job. A boolean; null or any other type returns 422.
4942
+ */
4943
+ allow_customer_access?: boolean;
4944
+ /**
4945
+ * Whether the feature-allocation selector is shown for this job. A boolean; null or any other type returns 422.
4946
+ */
4947
+ tracks_feature_allocations?: boolean;
4948
+ /**
4949
+ * Whether applicable time entries on this job must carry a feature allocation. A boolean; null or any other type returns 422.
4950
+ */
4951
+ requires_feature_allocation?: boolean;
4952
+ /**
4953
+ * Whether time entries on this job are capped at one feature allocation. A boolean; null or any other type returns 422.
4954
+ */
4955
+ max_one_feature_allocation?: boolean;
4718
4956
  /**
4719
4957
  * 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. Omit the field to leave the current value unchanged.
4720
4958
  */
4721
4959
  production_tracking_kind?: 'none' | 'feature' | 'quantity';
4722
4960
  /**
4723
- * Work types (trade or scope categories) to associate with the job; null when none.
4961
+ * Complete desired set of unique nonblank manager user IDs. Omit to preserve the set; send an empty array to clear it. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before any job or relationship is saved.
4962
+ */
4963
+ manager_user_ids?: Array<string>;
4964
+ /**
4965
+ * Complete desired set of unique nonblank timecode IDs. Omit to preserve the set; send an empty array to clear it. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before any job or relationship is saved.
4966
+ */
4967
+ timekeeping_timecode_ids?: Array<string>;
4968
+ /**
4969
+ * Work types (trade or scope categories) to associate with the job, one row each. Null, a non-array, or a row that is not an object answers 422.
4724
4970
  */
4725
4971
  job_work_types_attributes?: Array<{
4726
4972
  /**
@@ -4731,9 +4977,9 @@ export type JobParameters = {
4731
4977
  * ID of the work type to associate with the job.
4732
4978
  */
4733
4979
  work_type_id?: string;
4734
- }> | null;
4980
+ }>;
4735
4981
  /**
4736
- * The job's structured street address; null when unset.
4982
+ * The job's structured street address. Null or a non-object answers 422; an unknown key inside it answers 422 at its pointer.
4737
4983
  */
4738
4984
  job_address_attributes?: {
4739
4985
  /**
@@ -4773,20 +5019,33 @@ export type JobParameters = {
4773
5019
  */
4774
5020
  country?: string | null;
4775
5021
  /**
4776
- * IANA time zone of the address (e.g. America/Chicago); null when unset.
5022
+ * Time zone of the address (e.g. US/Central); null when unset. A blank or unlisted name answers 422.
4777
5023
  */
4778
5024
  timezone?: string | null;
4779
5025
  /**
4780
- * Whether the address has been verified; null when unset.
5026
+ * Whether the address has been verified. A boolean; null or any other type returns 422.
4781
5027
  */
4782
- verified?: boolean | null;
5028
+ verified?: boolean;
4783
5029
  /**
4784
- * Human-readable one-line address label; null when unset.
5030
+ * Human-readable one-line address label; null derives it from the other fields.
4785
5031
  */
4786
5032
  label?: string | null;
4787
- } | null;
5033
+ };
5034
+ /**
5035
+ * 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.
5036
+ */
5037
+ custom_fields?: Array<{
5038
+ /**
5039
+ * 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.
5040
+ */
5041
+ custom_field_config_id: string;
5042
+ /**
5043
+ * Replacement value as text or null. Null stores a value rather than removing the row.
5044
+ */
5045
+ value: string | null;
5046
+ }>;
4788
5047
  /**
4789
- * 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.
5048
+ * Prevailing-wage / apprenticeship (PWA) compliance details to set on the job. Omit or send an empty object to make no PWA-details changes. Null or a non-object answers 422, and so does an unknown key or a wrongly typed field inside it, at its pointer. The accepted regional keys depend on the effective region and regional PWA mode.
4790
5049
  */
4791
5050
  pwa_details?: {
4792
5051
  /**
@@ -4794,7 +5053,7 @@ export type JobParameters = {
4794
5053
  */
4795
5054
  contractor_type?: 'prime_contractor' | 'sub_contractor' | null;
4796
5055
  /**
4797
- * Whether new positions on the job default to paying the full fringe as cash. Omit to retain the current value (or use the database default on create); when sent, the value must be true or false.
5056
+ * Whether new positions on the job default to paying the full fringe as cash. Omit to retain the current value (or use the database default on create); when sent, the value must be JSON true or false.
4798
5057
  */
4799
5058
  pay_full_cash_fringe_by_default?: boolean;
4800
5059
  /**
@@ -4826,7 +5085,7 @@ export type JobParameters = {
4826
5085
  */
4827
5086
  il_dol_project_id?: string | null;
4828
5087
  /**
4829
- * Whether the Illinois project is funded with state capital funds; null when not applicable.
5088
+ * Whether the Illinois project is funded with state capital funds, as JSON true or false; null when not applicable.
4830
5089
  */
4831
5090
  il_dol_state_capital_funds?: boolean | null;
4832
5091
  /**
@@ -4854,54 +5113,10 @@ export type JobParameters = {
4854
5113
  */
4855
5114
  ny_dol_prc_number?: string | null;
4856
5115
  };
4857
- };
4858
- /**
4859
- * 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.
4860
- */
4861
- export type JobCreateParameters = JobParameters & {
4862
- /**
4863
- * ID of the user creating the job. Required on create; the creator cannot be changed afterward.
4864
- */
4865
- created_by_user_id: string;
4866
5116
  /**
4867
- * 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.
4868
- */
4869
- template_id?: string | null;
4870
- /**
4871
- * 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.
4872
- */
4873
- custom_fields?: Array<{
4874
- /**
4875
- * ID of a visible custom-field configuration owned by the credential company and applicable to jobs.
4876
- */
4877
- custom_field_config_id: string;
4878
- /**
4879
- * Value as text or null.
4880
- */
4881
- value: string | null;
4882
- }>;
4883
- };
4884
- /**
4885
- * 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. Sending `created_by_user_id` returns 400 unknown_key, including when it matches the existing creator or is null.
4886
- */
4887
- export type JobUpdateParameters = JobParameters & {
4888
- /**
4889
- * Settable status values. Other statuses are derived from job and position state and cannot be set directly.
5117
+ * Settable status values. Other statuses are derived from job and position state and cannot be set directly; null or any other value returns 422.
4890
5118
  */
4891
5119
  status?: 'completed' | 'cancelled' | 'disputed';
4892
- /**
4893
- * 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.
4894
- */
4895
- custom_fields?: Array<{
4896
- /**
4897
- * 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.
4898
- */
4899
- custom_field_config_id: string;
4900
- /**
4901
- * Replacement value as text or null. Null stores a value rather than removing the row.
4902
- */
4903
- value: string | null;
4904
- }>;
4905
5120
  };
4906
5121
  /**
4907
5122
  * A reusable job template — a saved job pattern for quickly creating new jobs with the same setup. Read-only through the API (listing only).
@@ -5065,21 +5280,21 @@ export type UserResponseObject = {
5065
5280
  */
5066
5281
  compensation_type: 'hourly' | 'salary' | null;
5067
5282
  /**
5068
- * 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.
5283
+ * Base hourly pay in cents as a decimal string. Present for company keys, company administrators, and the employed person, and omitted otherwise; null when authorized but unset.
5069
5284
  */
5070
- hourly_rate?: string | null;
5285
+ hourly_rate_cents?: string | null;
5071
5286
  /**
5072
- * 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.
5287
+ * Annual training-fund contribution for the worker in cents as a decimal 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.
5073
5288
  */
5074
- training_annual_amount?: string | null;
5289
+ training_annual_amount_cents?: string | null;
5075
5290
  /**
5076
- * 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.
5291
+ * Employer-paid annual combined health benefit in cents as a decimal 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.
5077
5292
  */
5078
- employer_combined_health_amount?: string | null;
5293
+ employer_combined_health_amount_cents?: string | null;
5079
5294
  /**
5080
- * 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.
5295
+ * Employer-paid annual combined savings and retirement benefit in cents as a decimal 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.
5081
5296
  */
5082
- employer_combined_savings?: string | null;
5297
+ employer_combined_savings_cents?: string | null;
5083
5298
  /**
5084
5299
  * Annualized minutes the worker is expected to work, used to annualize fringe benefits. Null to fall back to the standard full-time year.
5085
5300
  */
@@ -5276,22 +5491,10 @@ export type UserUpdateParameters = {
5276
5491
  */
5277
5492
  avatar_signed_id?: string | null;
5278
5493
  };
5279
- export type UserParameters = ({
5280
- /**
5281
- * 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.
5282
- */
5283
- email: string;
5284
- } | {
5285
- /**
5286
- * Contact phone number. Null when the worker has none. Required to send an invite unless a work email is given.
5287
- */
5288
- phone_number: string;
5289
- } | {
5290
- /**
5291
- * Non-stored field. If true, no invite is created and work email / phone are not required.
5292
- */
5293
- skip_invite: true;
5294
- }) & {
5494
+ /**
5495
+ * Request body for onboarding a worker into your company. In one call it creates the person (if new), their employment record and its custom-field values, roles, group memberships, an optional invite, and optional compliance details. first_name and last_name are required, and omitting either answers 400. Unless skip_invite is true, the invite needs a work email or a phone number, and a request with neither answers 422 at both fields. An unlisted key answers 400. A value of the wrong JSON type, a null for a field that is not nullable, or a value outside a listed set answers 422 at its pointer, and nothing is written.
5496
+ */
5497
+ export type UserParameters = {
5295
5498
  /**
5296
5499
  * 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.
5297
5500
  */
@@ -5305,11 +5508,11 @@ export type UserParameters = ({
5305
5508
  */
5306
5509
  phone_number?: string | null;
5307
5510
  /**
5308
- * Legal first name. Used for compliance and other exports.
5511
+ * Legal first name. Used for compliance and other exports. Null or blank text answers 422.
5309
5512
  */
5310
5513
  first_name: string;
5311
5514
  /**
5312
- * Legal last name. Used for compliance and other exports.
5515
+ * Legal last name. Used for compliance and other exports. Null or blank text answers 422.
5313
5516
  */
5314
5517
  last_name: string;
5315
5518
  /**
@@ -5323,116 +5526,115 @@ export type UserParameters = ({
5323
5526
  /**
5324
5527
  * City of the worker's contact address.
5325
5528
  */
5326
- city?: string;
5529
+ city?: string | null;
5327
5530
  /**
5328
5531
  * Two-letter US state code of the worker's contact address.
5329
5532
  */
5330
- state?: string;
5533
+ state?: string | null;
5331
5534
  /**
5332
- * Date of birth (YYYY-MM-DD).
5535
+ * Date of birth as a YYYY-MM-DD calendar date; any other form answers 422.
5333
5536
  */
5334
- birth_date?: string;
5537
+ birth_date?: string | null;
5335
5538
  /**
5336
5539
  * US Department of Labor apprentice number, when the worker is a registered apprentice.
5337
5540
  */
5338
- dol_apprentice_no?: string;
5541
+ dol_apprentice_no?: string | null;
5339
5542
  /**
5340
5543
  * GWO WINDA training record id (Global Wind Organisation), formatted as two letters, six digits, then two letters.
5341
5544
  */
5342
- winda_id?: string;
5545
+ winda_id?: string | null;
5343
5546
  /**
5344
5547
  * URL of the worker's LinkedIn profile.
5345
5548
  */
5346
- linkedin_url?: string;
5549
+ linkedin_url?: string | null;
5347
5550
  /**
5348
- * Roles to grant the worker at your company, as an array of role strings such as TECHNICIAN, FIELD_LEAD, MANAGER, SAFETY_MANAGER, and ADMIN.
5551
+ * Roles to grant the worker at your company, as an array of role strings such as TECHNICIAN, FIELD_LEAD, MANAGER, SAFETY_MANAGER, and ADMIN. Omit or send an empty array to grant none. Null, a non-string, blank or repeated role answers 422.
5349
5552
  */
5350
- roles?: Array<string> | null;
5553
+ roles?: Array<string>;
5351
5554
  /**
5352
5555
  * Signed ID of a direct-upload blob to attach as the profile picture. Obtain it by first uploading the image to POST /api/v1/direct_uploads. Null creates the worker without one; a blank string answers 422.
5353
5556
  */
5354
5557
  avatar_signed_id?: string | null;
5355
5558
  /**
5356
- * Id of the internal user recorded as the creator of the worker's invite, and named to the recipient as the person inviting them. A user key always records its own user and answers 403 if the body names one; a company key must name a user your company can see, or the request answers 404. Ignored when skip_invite is set.
5559
+ * Id of the internal user recorded as the creator of the worker's invite, and named to the recipient as the person inviting them. A user key always records its own user and answers 403 if the body names one; a company key must name a user your company can see, or the request answers 404. Omit or send null to record none; blank text answers 422. Ignored when skip_invite is set.
5357
5560
  */
5358
- created_by_user_id?: string;
5561
+ created_by_user_id?: string | null;
5359
5562
  /**
5360
5563
  * Id of the internal user recorded as having last sent the worker's invite, and named as the sender on that person's in-app notification. Read like created_by_user_id. Null, and ignored, when skip_invite is set.
5361
5564
  */
5362
5565
  last_sent_by_user_id?: string | null;
5363
5566
  /**
5364
- * Non-stored field. If true will not send an invite notification.
5567
+ * Non-stored field. If true, the invite is created without notifying the worker. Null is not accepted.
5365
5568
  */
5366
5569
  skip_notify?: boolean;
5367
5570
  /**
5368
- * Non-stored field. If true, no invite is created and work email / phone are not required.
5571
+ * Non-stored field. If true, no invite is created and work email / phone are not required. Null is not accepted.
5369
5572
  */
5370
5573
  skip_invite?: boolean;
5371
- type?: UserCompanyType;
5372
5574
  /**
5373
- * Job title at your company.
5575
+ * First day of employment (YYYY-MM-DD). Sets the start of the employment record; defaults to today when omitted. Null, blank text, or any other form answers 422.
5374
5576
  */
5375
- title?: string;
5577
+ hire_date?: string;
5376
5578
  /**
5377
- * Id of the worker's manager at your company (another user).
5579
+ * Whether the worker is an `EMPLOYEE` (W-2) or a `CONTRACTOR` (1099), in upper case. Omit to use `EMPLOYEE`; null is not accepted.
5378
5580
  */
5379
- manager_user_id?: string;
5581
+ type?: 'EMPLOYEE' | 'CONTRACTOR';
5380
5582
  /**
5381
- * The worker's identifier in your payroll system of record.
5583
+ * Job title at your company.
5382
5584
  */
5383
- payroll_id?: string;
5585
+ title?: string | null;
5384
5586
  /**
5385
- * Base pay rate as a decimal string (for example "32.50"), in the company's currency.
5587
+ * Id of the worker's manager at your company (another user). Omit or send null for no manager; blank text answers 422.
5386
5588
  */
5387
- hourly_rate?: string;
5589
+ manager_user_id?: string | null;
5388
5590
  /**
5389
- * How the worker is paid: `hourly` or `salary`. Omit to use `hourly`; null is not accepted.
5591
+ * The worker's identifier in your payroll system of record.
5390
5592
  */
5391
- compensation_type?: 'hourly' | 'salary';
5593
+ payroll_id?: string | null;
5392
5594
  /**
5393
- * Whether the worker is eligible for overtime pay.
5595
+ * Whether to enroll the worker in Time and Attendance (time tracking). Omit to use true; null is not accepted.
5394
5596
  */
5395
- overtime_eligible?: string;
5597
+ enrolled_in_t_and_a?: boolean;
5396
5598
  /**
5397
- * Whether to enroll the worker in Time and Attendance (time tracking).
5599
+ * How the worker is paid: `hourly` or `salary`, in lower case. Omit to use `hourly`; null is not accepted.
5398
5600
  */
5399
- enrolled_in_t_and_a?: string;
5601
+ compensation_type?: 'hourly' | 'salary';
5400
5602
  /**
5401
- * Annual training-fund contribution as a decimal string. Used in prevailing-wage fringe calculations.
5603
+ * Base hourly pay in cents as a decimal string (for example "3250" for 32.50). Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422; send the amount as a string.
5402
5604
  */
5403
- training_annual_amount?: string;
5605
+ hourly_rate_cents?: string | null;
5404
5606
  /**
5405
- * Employer-paid annual combined health benefit as a decimal string. Null to leave unset.
5607
+ * Annual training-fund contribution in cents as a decimal string. Used in prevailing-wage fringe calculations. Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422.
5406
5608
  */
5407
- employer_combined_health_amount?: string | null;
5609
+ training_annual_amount_cents?: string | null;
5408
5610
  /**
5409
- * Employer-paid annual combined savings and retirement benefit as a decimal string. Null to leave unset.
5611
+ * Employer-paid annual combined health benefit in cents as a decimal string. Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422.
5410
5612
  */
5411
- employer_combined_savings?: string | null;
5613
+ employer_combined_health_amount_cents?: string | null;
5412
5614
  /**
5413
- * Annualized minutes the worker is expected to work, used to annualize fringe benefits.
5615
+ * Employer-paid annual combined savings and retirement benefit in cents as a decimal string. Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422.
5414
5616
  */
5415
- worked_annual_minutes?: string;
5617
+ employer_combined_savings_cents?: string | null;
5416
5618
  /**
5417
- * Paid time off accrued for the year, in minutes.
5619
+ * Whether the worker is eligible for overtime pay. Omit to use true; null is not accepted.
5418
5620
  */
5419
- pto_annual_minutes?: string;
5621
+ overtime_eligible?: boolean;
5420
5622
  /**
5421
- * Holiday time accrued for the year, in minutes.
5623
+ * Annualized minutes the worker is expected to work, used to annualize fringe benefits, as a whole number.
5422
5624
  */
5423
- holiday_annual_minutes?: string;
5625
+ worked_annual_minutes?: number | null;
5424
5626
  /**
5425
- * Paid training time for the year, in minutes.
5627
+ * Paid time off accrued for the year, in whole minutes.
5426
5628
  */
5427
- training_annual_minutes?: string;
5629
+ pto_annual_minutes?: number | null;
5428
5630
  /**
5429
- * First day of employment (YYYY-MM-DD). Sets the start of the employment record; defaults to today when omitted.
5631
+ * Holiday time accrued for the year, in whole minutes.
5430
5632
  */
5431
- hire_date?: string;
5633
+ holiday_annual_minutes?: number | null;
5432
5634
  /**
5433
- * Unique nonblank IDs of the groups at your company to add the worker to. Omit or send an empty array to add the worker to none. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before the worker is created.
5635
+ * Paid training time for the year, in whole minutes.
5434
5636
  */
5435
- group_ids?: Array<string>;
5637
+ training_annual_minutes?: number | null;
5436
5638
  /**
5437
5639
  * 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.
5438
5640
  */
@@ -5447,7 +5649,11 @@ export type UserParameters = ({
5447
5649
  value: string | null;
5448
5650
  }>;
5449
5651
  /**
5450
- * 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.
5652
+ * Unique nonblank IDs of the groups at your company to add the worker to. Omit or send an empty array to add the worker to none. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before the worker is created.
5653
+ */
5654
+ group_ids?: Array<string>;
5655
+ /**
5656
+ * Prevailing-wage and apprenticeship compliance details to create for the worker (home address, demographics, and jurisdiction-specific reporting fields). Omit it, or send an empty object, when the worker has no compliance record; null answers 422.
5451
5657
  */
5452
5658
  company_user_pwa_info?: {
5453
5659
  /**
@@ -5534,7 +5740,7 @@ export type UserParameters = ({
5534
5740
  * Oregon BOLI race classification, as an array of codes such as white, asian, hispanic_or_latino, and black_or_african_american.
5535
5741
  */
5536
5742
  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'>;
5537
- } | null;
5743
+ };
5538
5744
  };
5539
5745
  /**
5540
5746
  * A page of time entries, with pagination metadata and navigation links.
@@ -5633,11 +5839,11 @@ export type TimeEntryResponseObject = {
5633
5839
  */
5634
5840
  timekeeping_pay_period_id: string;
5635
5841
  /**
5636
- * ISO8601 timestamp when work began; falls on a whole-minute boundary.
5842
+ * ISO8601 timestamp in UTC (`Z`) when work began; falls on a whole-minute boundary.
5637
5843
  */
5638
5844
  start_time: string;
5639
5845
  /**
5640
- * ISO8601 timestamp when work ended; falls on a whole-minute boundary.
5846
+ * ISO8601 timestamp in UTC (`Z`) when work ended; falls on a whole-minute boundary.
5641
5847
  */
5642
5848
  end_time: string;
5643
5849
  /**
@@ -5713,11 +5919,11 @@ export type TimeEntryCreateParameters = {
5713
5919
  */
5714
5920
  timekeeping_time_card_id: string;
5715
5921
  /**
5716
- * Start of the work as a timestamp string, rounded to the nearest second. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5922
+ * Start of the work as a timestamp string, rounded to the nearest second. A time with an offset (`Z` or `-05:00`) is read at that instant. A time without one is read in the time card's pay schedule zone (`tz_name`); a time the clocks skip when they spring forward is read an hour later, and a time they repeat when they fall back is read as its first occurrence. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5717
5923
  */
5718
5924
  start_time: string;
5719
5925
  /**
5720
- * End of the work as a timestamp string, rounded to the nearest second. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5926
+ * End of the work as a timestamp string, rounded to the nearest second. A time with an offset (`Z` or `-05:00`) is read at that instant. A time without one is read in the time card's pay schedule zone (`tz_name`); a time the clocks skip when they spring forward is read an hour later, and a time they repeat when they fall back is read as its first occurrence. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5721
5927
  */
5722
5928
  end_time: string;
5723
5929
  /**
@@ -5754,11 +5960,11 @@ export type TimeEntryCreateParameters = {
5754
5960
  */
5755
5961
  export type TimeEntryUpdateParameters = {
5756
5962
  /**
5757
- * Start of the work as a timestamp string, rounded to the nearest second. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5963
+ * Start of the work as a timestamp string, rounded to the nearest second. A time with an offset (`Z` or `-05:00`) is read at that instant. A time without one is read in the time card's pay schedule zone (`tz_name`); a time the clocks skip when they spring forward is read an hour later, and a time they repeat when they fall back is read as its first occurrence. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5758
5964
  */
5759
5965
  start_time?: string;
5760
5966
  /**
5761
- * End of the work as a timestamp string, rounded to the nearest second. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5967
+ * End of the work as a timestamp string, rounded to the nearest second. A time with an offset (`Z` or `-05:00`) is read at that instant. A time without one is read in the time card's pay schedule zone (`tz_name`); a time the clocks skip when they spring forward is read an hour later, and a time they repeat when they fall back is read as its first occurrence. Null or a non-string answers 422 at its pointer; a string that does not parse as a date and time answers 422 invalid_date.
5762
5968
  */
5763
5969
  end_time?: string;
5764
5970
  /**
@@ -6027,25 +6233,25 @@ export type UserCompanyCreateParameters = {
6027
6233
  */
6028
6234
  compensation_type?: 'hourly' | 'salary';
6029
6235
  /**
6030
- * Base pay rate as a decimal string (for example "32.50"), in the company's currency. A JSON number answers 422; send the amount as a string.
6236
+ * Base hourly pay in cents as a decimal string (for example "3250" for 32.50). Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422; send the amount as a string.
6031
6237
  */
6032
- hourly_rate?: string | null;
6238
+ hourly_rate_cents?: string | null;
6033
6239
  /**
6034
- * Whether the worker is eligible for overtime pay. Omit to use true; null is not accepted.
6240
+ * Annual training-fund contribution in cents as a decimal string. Used in prevailing-wage fringe calculations. Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422.
6035
6241
  */
6036
- overtime_eligible?: boolean;
6242
+ training_annual_amount_cents?: string | null;
6037
6243
  /**
6038
- * Annual training-fund contribution as a decimal string. Used in prevailing-wage fringe calculations. A JSON number answers 422.
6244
+ * Employer-paid annual combined health benefit in cents as a decimal string. Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422.
6039
6245
  */
6040
- training_annual_amount?: string | null;
6246
+ employer_combined_health_amount_cents?: string | null;
6041
6247
  /**
6042
- * Employer-paid annual combined health benefit as a decimal string. A JSON number answers 422.
6248
+ * Employer-paid annual combined savings and retirement benefit in cents as a decimal string. Omit or send null to leave it unset; send "0" for zero. A JSON number answers 422.
6043
6249
  */
6044
- employer_combined_health_amount?: string | null;
6250
+ employer_combined_savings_cents?: string | null;
6045
6251
  /**
6046
- * Employer-paid annual combined savings and retirement benefit as a decimal string. A JSON number answers 422.
6252
+ * Whether the worker is eligible for overtime pay. Omit to use true; null is not accepted.
6047
6253
  */
6048
- employer_combined_savings?: string | null;
6254
+ overtime_eligible?: boolean;
6049
6255
  /**
6050
6256
  * Annualized minutes the worker is expected to work, used to annualize fringe benefits.
6051
6257
  */
@@ -6099,29 +6305,29 @@ export type UserCompanyScheduledChangesParameters = {
6099
6305
  */
6100
6306
  effective_date: string;
6101
6307
  /**
6102
- * Base pay rate as a decimal string (for example "32.50"), in the company's currency.
6308
+ * Base hourly pay in cents as a decimal string (for example "3250" for 32.50). Omit to carry forward the preceding version, or send null to clear it; send "0" for zero.
6103
6309
  */
6104
- hourly_rate?: string | null;
6310
+ hourly_rate_cents?: string | null;
6105
6311
  /**
6106
- * How the worker is paid: hourly or salary.
6312
+ * Annual training-fund contribution in cents as a decimal string. Omit to carry forward the preceding version, or send null to clear it; send "0" for zero.
6107
6313
  */
6108
- compensation_type?: 'hourly' | 'salary';
6314
+ training_annual_amount_cents?: string | null;
6109
6315
  /**
6110
- * Whether the worker is eligible for overtime pay.
6316
+ * Employer-paid annual combined health benefit in cents as a decimal string. Omit to carry forward the preceding version, or send null to clear it; send "0" for zero.
6111
6317
  */
6112
- overtime_eligible?: boolean;
6318
+ employer_combined_health_amount_cents?: string | null;
6113
6319
  /**
6114
- * Annual training-fund contribution as a decimal string.
6320
+ * Employer-paid annual combined savings and retirement benefit in cents as a decimal string. Omit to carry forward the preceding version, or send null to clear it; send "0" for zero.
6115
6321
  */
6116
- training_annual_amount?: string | null;
6322
+ employer_combined_savings_cents?: string | null;
6117
6323
  /**
6118
- * Employer-paid annual combined health benefit as a decimal string.
6324
+ * How the worker is paid: hourly or salary.
6119
6325
  */
6120
- employer_combined_health_amount?: string | null;
6326
+ compensation_type?: 'hourly' | 'salary';
6121
6327
  /**
6122
- * Employer-paid annual combined savings and retirement benefit as a decimal string.
6328
+ * Whether the worker is eligible for overtime pay.
6123
6329
  */
6124
- employer_combined_savings?: string | null;
6330
+ overtime_eligible?: boolean;
6125
6331
  /**
6126
6332
  * Annualized minutes the worker is expected to work, used to annualize fringe benefits.
6127
6333
  */
@@ -6501,9 +6707,9 @@ export type UserCompanyScheduledChange = {
6501
6707
  */
6502
6708
  start_date: string;
6503
6709
  /**
6504
- * Base pay rate for this version, formatted as a currency string; null when unset.
6710
+ * Base hourly pay for this version in cents as a decimal string; null when unset.
6505
6711
  */
6506
- hourly_rate: string | null;
6712
+ hourly_rate_cents: string | null;
6507
6713
  /**
6508
6714
  * How the worker is paid: hourly or salary.
6509
6715
  */
@@ -6513,17 +6719,17 @@ export type UserCompanyScheduledChange = {
6513
6719
  */
6514
6720
  overtime_eligible: boolean;
6515
6721
  /**
6516
- * Annual training-fund contribution, formatted as a currency string; null when unset.
6722
+ * Annual training-fund contribution in cents as a decimal string; null when unset.
6517
6723
  */
6518
- training_annual_amount: string | null;
6724
+ training_annual_amount_cents: string | null;
6519
6725
  /**
6520
- * Employer-paid annual combined health benefit, formatted as a currency string; null when unset.
6726
+ * Employer-paid annual combined health benefit in cents as a decimal string; null when unset.
6521
6727
  */
6522
- employer_combined_health_amount: string | null;
6728
+ employer_combined_health_amount_cents: string | null;
6523
6729
  /**
6524
- * Employer-paid annual combined savings and retirement benefit, formatted as a currency string; null when unset.
6730
+ * Employer-paid annual combined savings and retirement benefit in cents as a decimal string; null when unset.
6525
6731
  */
6526
- employer_combined_savings: string | null;
6732
+ employer_combined_savings_cents: string | null;
6527
6733
  /**
6528
6734
  * Annualized minutes the worker is expected to work in this version; null when unset.
6529
6735
  */
@@ -6865,7 +7071,7 @@ export type TimeEntryImportResponseObject = {
6865
7071
  updated_at: string;
6866
7072
  };
6867
7073
  /**
6868
- * Submit a spreadsheet of time entries for a pay period. All seven of payroll_id, start_time, end_time, timecode, job_id, state and description must be present as column headers, or the file is refused naming the ones missing. Of those, payroll_id, start_time, end_time, timecode and state must also carry a value on every row. features, federal_labor_classification and regional_labor_classification are read when present. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
7074
+ * Submit a spreadsheet of time entries for a pay period. All six of payroll_id, start_time, end_time, timecode, job_id and description must be present as column headers, or the file is refused naming the ones missing. The payroll_id, start_time, end_time and timecode columns must carry a value on every row. The state column may be omitted, or its cells left blank, when the row's Job resolves a recognized state through its operating region, address, then oldest qualifying Site address. A valid explicit state overrides this fallback; an invalid supplied state fails. Missing or blank state without a Job, unresolved geography, or an unrecognized address region rejects the whole file with row-specific errors. The original file retains omissions and blank values, so background processing resolves current Job geography again. features, federal_labor_classification and regional_labor_classification are read when present. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
6869
7075
  *
6870
7076
  * Because acceptance is synchronous but the write happens in the background, only one import at a time is accepted for a pay period: while an earlier one is still `pending` or `processing`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
6871
7077
  */
@@ -8047,11 +8253,11 @@ export type ProjectResponseObject = {
8047
8253
  /**
8048
8254
  * Project budget as a money amount in cents, serialized as a decimal string (e.g. "500000.0" for a $5,000 budget), or null.
8049
8255
  */
8050
- budget_cents: string | null;
8256
+ budget_cents?: string | null;
8051
8257
  /**
8052
8258
  * ISO 4217 currency code for the budget, or null; defaults to "USD".
8053
8259
  */
8054
- budget_currency: string | null;
8260
+ budget_currency?: string | null;
8055
8261
  /**
8056
8262
  * Schedule start date as an ISO8601 date (YYYY-MM-DD), or null.
8057
8263
  */
@@ -8150,9 +8356,9 @@ export type ProjectParameters = {
8150
8356
  */
8151
8357
  administrator_phone?: string | null;
8152
8358
  /**
8153
- * Decimal string (e.g. "5000.0"), or null to clear it; a JSON number or any other type returns 422. Applies only while `federal_pwa_mode` is not `none` — sending it while federal tracking is off, even as null, returns 422, and switching to `none` clears the stored value.
8359
+ * Budget in cents as a decimal string (e.g. "500000" or the read form "500000.0" for $5,000), or null to clear it; a JSON number or any other type returns 422, and a fraction rounds to two decimal places. Applies only while `federal_pwa_mode` is not `none` — sending it while federal tracking is off, even as null, returns 422, and switching to `none` clears the stored value.
8154
8360
  */
8155
- budget?: string | null;
8361
+ budget_cents?: string | null;
8156
8362
  /**
8157
8363
  * Prevailing-wage lock-in date as an ISO8601 date (YYYY-MM-DD); any other string, a timestamp included, answers 422. Applies only while `federal_pwa_mode` is not `none` — sending it while federal tracking is off, even as null, returns 422, and switching to `none` clears the stored value.
8158
8364
  */
@@ -8239,9 +8445,9 @@ export type ProjectUpdateParameters = {
8239
8445
  */
8240
8446
  administrator_phone?: string | null;
8241
8447
  /**
8242
- * Decimal string (e.g. "5000.0"), or null to clear it; a JSON number or any other type returns 422. Applies only while `federal_pwa_mode` is not `none` — sending it while federal tracking is off, even as null, returns 422, and switching to `none` clears the stored value.
8448
+ * Budget in cents as a decimal string (e.g. "500000" or the read form "500000.0" for $5,000), or null to clear it; a JSON number or any other type returns 422, and a fraction rounds to two decimal places. Applies only while `federal_pwa_mode` is not `none` — sending it while federal tracking is off, even as null, returns 422, and switching to `none` clears the stored value.
8243
8449
  */
8244
- budget?: string | null;
8450
+ budget_cents?: string | null;
8245
8451
  /**
8246
8452
  * Prevailing-wage lock-in date as an ISO8601 date (YYYY-MM-DD); any other string, a timestamp included, answers 422. Applies only while `federal_pwa_mode` is not `none` — sending it while federal tracking is off, even as null, returns 422, and switching to `none` clears the stored value.
8247
8453
  */
@@ -8441,6 +8647,10 @@ export type SiteCheckInResponseObject = {
8441
8647
  longitude: number | null;
8442
8648
  start_time: string;
8443
8649
  end_time: string | null;
8650
+ /**
8651
+ * Whole minutes between start_time and end_time, rounded to the nearest minute; null while the check-in is still open.
8652
+ */
8653
+ duration_minutes: number | null;
8444
8654
  verified_at: string | null;
8445
8655
  created_at: string;
8446
8656
  updated_at: string;
@@ -8868,7 +9078,7 @@ export type ComplianceCheckParameters = {
8868
9078
  */
8869
9079
  status?: 'dismissed' | 'pending';
8870
9080
  /**
8871
- * When the check is due, as an ISO 8601 date-time; send null to clear it, or omit to leave it unchanged. A value that is not a string answers 422.
9081
+ * When the check is due, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`). Send null to clear it, or omit to leave it unchanged. A value that is not a string answers 422.
8872
9082
  */
8873
9083
  time_due?: string | null;
8874
9084
  /**
@@ -8905,6 +9115,8 @@ export type TodoInboxTodoResponseObject = {
8905
9115
  created_by_user_id: string;
8906
9116
  updated_by_user_id: string;
8907
9117
  completed: boolean;
9118
+ priority: 'critical' | 'high' | 'medium' | 'low' | null;
9119
+ category: 'apprenticeship' | 'certified_payroll' | 'company' | 'job' | 'payroll' | 'project' | 'regional' | 'tax_credit' | 'timekeeping' | 'worker';
8908
9120
  task_assignee_user_ids: Array<string>;
8909
9121
  description: RichTextObject;
8910
9122
  time_due: string | null;
@@ -9584,7 +9796,7 @@ export type PaystubLineItemResponseObject = {
9584
9796
  updated_at: string;
9585
9797
  };
9586
9798
  /**
9587
- * Request body for creating a paystub line item. All four fields are required. Undeclared body keys are rejected with 400; references outside the authenticated company return 404.
9799
+ * Request body for creating a paystub line item. All four fields are required. Undeclared body keys or an omitted field answer 400; a null or blank value, or any wrong-typed value, answers 422; references outside the authenticated company return 404.
9588
9800
  */
9589
9801
  export type PaystubLineItemParameters = {
9590
9802
  /**
@@ -9592,7 +9804,7 @@ export type PaystubLineItemParameters = {
9592
9804
  */
9593
9805
  payrolls_paystub_id: string;
9594
9806
  /**
9595
- * Amount of this line, in cents as a decimal string (e.g. "5000.0" is $50.00). Required.
9807
+ * Amount of this line, in cents as a decimal string (e.g. "5000.0" is $50.00); a JSON number answers 422. Required.
9596
9808
  */
9597
9809
  amount_cents: string;
9598
9810
  /**
@@ -9605,7 +9817,7 @@ export type PaystubLineItemParameters = {
9605
9817
  payrolls_external_map_id: string;
9606
9818
  };
9607
9819
  /**
9608
- * Request body for updating a paystub line item. Send only the fields to change. Undeclared body keys are rejected with 400; newly supplied references outside the authenticated company return 404.
9820
+ * Request body for updating a paystub line item. Send only the fields to change. Undeclared body keys are rejected with 400; a null or blank value, or any wrong-typed value, answers 422; newly supplied references outside the authenticated company return 404.
9609
9821
  */
9610
9822
  export type PaystubLineItemUpdateParameters = {
9611
9823
  /**
@@ -9613,7 +9825,7 @@ export type PaystubLineItemUpdateParameters = {
9613
9825
  */
9614
9826
  payrolls_paystub_id?: string;
9615
9827
  /**
9616
- * Amount of this line, in cents as a decimal string (e.g. "5000.0" is $50.00). Omit to leave it unchanged.
9828
+ * Amount of this line, in cents as a decimal string (e.g. "5000.0" is $50.00); a JSON number answers 422. Omit to leave it unchanged.
9617
9829
  */
9618
9830
  amount_cents?: string;
9619
9831
  /**
@@ -9675,6 +9887,137 @@ export type JobSiteUpdateParameters = {
9675
9887
  */
9676
9888
  feature_ids?: Array<string>;
9677
9889
  };
9890
+ /**
9891
+ * A document attached to a job — either an uploaded file or an external URL, never both. Includes PWA documentation when the caller may see it.
9892
+ */
9893
+ export type JobDocumentResponseObject = {
9894
+ /**
9895
+ * Id of the job document.
9896
+ */
9897
+ id: string;
9898
+ /**
9899
+ * Id of the job this document belongs to. Taken from the path on writes.
9900
+ */
9901
+ job_id: string;
9902
+ /**
9903
+ * Human-readable document name.
9904
+ */
9905
+ name: string;
9906
+ /**
9907
+ * Document type code from the DocumentType catalog, including `PWA_DOCUMENTATION`.
9908
+ */
9909
+ type: 'CERTIFICATIONS' | 'CHECKLIST' | 'MAP' | 'MSA' | 'ONSITE_POSTER' | 'OTHER' | 'PARTS_INSTRUCTIONS' | 'PHOTO' | 'PO' | 'PWA_DOCUMENTATION' | 'RESUME' | 'WO';
9910
+ /**
9911
+ * Optional description; null when absent.
9912
+ */
9913
+ description: string | null;
9914
+ /**
9915
+ * True when only callers with job financial access may see the document. PWA documentation is always true.
9916
+ */
9917
+ admin_only: boolean;
9918
+ /**
9919
+ * External link when the document is a URL rather than an uploaded file; null when a file is attached.
9920
+ */
9921
+ url: string | null;
9922
+ /**
9923
+ * The attached file's filename, content type, size, and URL; null when the document is a URL.
9924
+ */
9925
+ file: {
9926
+ /**
9927
+ * Stored name of the uploaded file.
9928
+ */
9929
+ filename: string;
9930
+ /**
9931
+ * MIME type of the file; null when not recorded.
9932
+ */
9933
+ content_type: string | null;
9934
+ /**
9935
+ * Size of the file in bytes.
9936
+ */
9937
+ byte_size: number;
9938
+ /**
9939
+ * A URL to download the file.
9940
+ */
9941
+ url: string;
9942
+ } | null;
9943
+ /**
9944
+ * When the document was created.
9945
+ */
9946
+ created_at: string;
9947
+ /**
9948
+ * When the document was last updated.
9949
+ */
9950
+ updated_at: string;
9951
+ };
9952
+ /**
9953
+ * A page of a job's documents, with pagination metadata and navigation links.
9954
+ */
9955
+ export type JobDocumentsResponseObject = {
9956
+ meta: Meta;
9957
+ links: Links;
9958
+ /**
9959
+ * The page of job documents.
9960
+ */
9961
+ data: Array<JobDocumentResponseObject>;
9962
+ };
9963
+ /**
9964
+ * Request body for creating a job document. The job is taken from the path and is not part of the body. Supply exactly one of `url` or `file`.
9965
+ */
9966
+ export type JobDocumentParameters = {
9967
+ /**
9968
+ * Document type code from the DocumentType catalog. Omission or a blank value answers 422. `PWA_DOCUMENTATION` is persisted as admin-only.
9969
+ */
9970
+ type?: string;
9971
+ /**
9972
+ * Human-readable document name. Omission or a blank value answers 422.
9973
+ */
9974
+ name?: string;
9975
+ /**
9976
+ * Optional description. Null clears it on create to absent.
9977
+ */
9978
+ description?: string | null;
9979
+ /**
9980
+ * A signed_id from POST /api/v1/direct_uploads identifying the uploaded blob to attach. Register the upload naming `jobs.documents` — a signed_id issued for any other resource will not resolve here. Omit when supplying `url`. Null and a blank string answer 422.
9981
+ */
9982
+ file?: string;
9983
+ /**
9984
+ * When true, only callers with job financial access may see the document. Forced true when `type` is `PWA_DOCUMENTATION`.
9985
+ */
9986
+ admin_only?: boolean;
9987
+ /**
9988
+ * External https URL. Omit when supplying `file`. Sending both `url` and `file`, or neither, answers 422.
9989
+ */
9990
+ url?: string | null;
9991
+ };
9992
+ /**
9993
+ * Request body for updating a job document. Every field is optional; omit a field to preserve its current value. The resulting document must still be exactly one of `url` or `file`.
9994
+ */
9995
+ export type JobDocumentUpdateParameters = {
9996
+ /**
9997
+ * Replacement document type code from the DocumentType catalog. `PWA_DOCUMENTATION` is persisted as admin-only.
9998
+ */
9999
+ type?: string;
10000
+ /**
10001
+ * Replacement human-readable document name. A blank value answers 422.
10002
+ */
10003
+ name?: string;
10004
+ /**
10005
+ * Replacement description. Null clears it.
10006
+ */
10007
+ description?: string | null;
10008
+ /**
10009
+ * A signed_id from POST /api/v1/direct_uploads identifying a replacement blob. Register the upload naming `jobs.documents` — a signed_id issued for any other resource will not resolve here. Null removes the attachment; the document must then have a `url`.
10010
+ */
10011
+ file?: string | null;
10012
+ /**
10013
+ * When true, only callers with job financial access may see the document. Forced true when `type` is `PWA_DOCUMENTATION`.
10014
+ */
10015
+ admin_only?: boolean;
10016
+ /**
10017
+ * Replacement external https URL. Null clears it; the document must then have a file.
10018
+ */
10019
+ url?: string | null;
10020
+ };
9678
10021
  /**
9679
10022
  * A good-faith-effort exception on a job — a record that the employer requested apprentices from a registered program and did not receive the full request, or that no qualifying program existed. Read-only. Does not include supporting document slots.
9680
10023
  */
@@ -10497,65 +10840,65 @@ export type PositionsResponseObject = {
10497
10840
  data: Array<PositionResponseObject>;
10498
10841
  };
10499
10842
  /**
10500
- * Request body for creating or updating a position on a job. The job is taken from the URL path.
10843
+ * Request body for creating or updating a position on a job. The job is taken from the URL path. Send only the fields to set; omitted fields keep their stored values. An undeclared key answers 400; a wrong type, null where it is not accepted, or a blank ID answers 422 at the field's pointer.
10501
10844
  */
10502
10845
  export type PositionParameters = {
10503
10846
  /**
10504
- * ID of the worker to assign; cannot be changed once the position has tracked time.
10847
+ * ID of the worker to assign, or null to leave the position unfilled; cannot be changed once the position has tracked time.
10505
10848
  */
10506
10849
  fulfilled_by_user_id?: string | null;
10507
10850
  /**
10508
- * The position's first day, as a calendar date (`YYYY-MM-DD`) in the job's tz_name. Required when the job has a schedule, and must fall within it. A time is refused with `422`. On update, null leaves the stored date unchanged.
10851
+ * The position's first day, as a calendar date (`YYYY-MM-DD`) in the job's tz_name. Required when the job has a schedule, and must fall within it. Omit both dates on create to leave the position unscheduled, and on update to keep the stored days; null, a blank, or a time answers 422.
10509
10852
  */
10510
- start_time?: string | null;
10853
+ start_time?: string;
10511
10854
  /**
10512
- * The position's last day, as a calendar date (`YYYY-MM-DD`) in the job's tz_name. Required when the job has a schedule, and must be on or after start_time and within it. A time is refused with `422`. On update, null leaves the stored date unchanged.
10855
+ * The position's last day, as a calendar date (`YYYY-MM-DD`) in the job's tz_name. Required when the job has a schedule, and must be on or after start_time and within it. Omit both dates on create to leave the position unscheduled, and on update to keep the stored days; null, a blank, or a time answers 422.
10513
10856
  */
10514
- end_time?: string | null;
10857
+ end_time?: string;
10515
10858
  /**
10516
10859
  * ID of the position function (role) to assign; null for none. Must be a global function or one of the job's company.
10517
10860
  */
10518
10861
  position_function_id?: string | null;
10519
10862
  /**
10520
- * ID of the per diem to apply; its rate and currency are copied onto the position. Must belong to the job's company.
10863
+ * ID of the per diem to apply, or null for none; the position takes its rate and currency on every save. Must belong to the job's company.
10521
10864
  */
10522
10865
  per_diem_id?: string | null;
10523
10866
  /**
10524
- * Per-diem amount in cents; the effective rate is derived from the chosen per diem.
10867
+ * ID of a selectable pay-rate rule package scoped to this job, or null to clear it. Omit on create to leave the assignment unset — the job's default is not copied. A package the key cannot see, scoped to another job, or not selectable answers 404. A package with cash-fringe rules on a non-PWA position answers 422.
10525
10868
  */
10526
- per_diem_rate_cents?: number | null;
10869
+ pay_rates_rule_package_id?: string | null;
10527
10870
  /**
10528
10871
  * Whether the position tracks PWA compliance; must be true to attach wage determinations or set the PWA rate fields.
10529
10872
  */
10530
10873
  pwa?: boolean;
10531
10874
  /**
10532
- * Desired hourly cash-fringe rate in cents. Admin only on user-scoped keys.
10875
+ * Desired hourly cash-fringe rate in cents, as a decimal string like the response's. Admin only on user-scoped keys; another user's key sending it answers 403.
10533
10876
  */
10534
- cash_fringe_rate_cents?: number | null;
10877
+ cash_fringe_rate_cents?: string | null;
10535
10878
  /**
10536
- * Desired base hourly rate in cents. Admin only on user-scoped keys.
10879
+ * Desired base hourly rate in cents, as a decimal string like the response's. Admin only on user-scoped keys; another user's key sending it answers 403.
10537
10880
  */
10538
- hourly_rate_cents?: number | null;
10881
+ hourly_rate_cents?: string | null;
10539
10882
  /**
10540
- * Desired PWA wage-pay rate in cents (PWA positions only). Admin only on user-scoped keys.
10883
+ * Desired PWA wage-pay rate in cents, as a decimal string like the response's (PWA positions only). Admin only on user-scoped keys; another user's key sending it answers 403.
10541
10884
  */
10542
- pwa_wage_pay_rate_cents?: number | null;
10885
+ pwa_wage_pay_rate_cents?: string | null;
10543
10886
  /**
10544
- * Desired hourly wage-adder rate in cents. Admin only on user-scoped keys.
10887
+ * Desired hourly wage-adder rate in cents, as a decimal string like the response's. Admin only on user-scoped keys; another user's key sending it answers 403.
10545
10888
  */
10546
- wage_adder_rate_cents?: number | null;
10889
+ wage_adder_rate_cents?: string | null;
10547
10890
  /**
10548
10891
  * The complete desired set of unique nonblank job wage determination IDs. On PATCH, this replaces the current set; omit the field to leave assignments unchanged. Required federal and regional assignments cannot be removed from a PWA position. Null, null members, wrong types, blank IDs, and duplicate IDs answer 422 before any changes are written.
10549
10892
  */
10550
10893
  job_wage_determination_ids?: Array<string>;
10551
10894
  /**
10552
- * PWA classification detail to set; skill_level sets the apprenticeship or skill classification.
10895
+ * The position's PWA classification detail. Sending it replaces the stored detail with one carrying skill_level; omit it to keep the stored detail.
10553
10896
  */
10554
10897
  pwa_details_attributes?: {
10555
10898
  /**
10556
- * The apprenticeship or skill classification to set.
10899
+ * The Illinois skill classification, `journeyman` or `foreman`; null records none. Required whenever pwa_details_attributes is sent.
10557
10900
  */
10558
- skill_level?: string | null;
10901
+ skill_level: 'journeyman' | 'foreman' | null;
10559
10902
  };
10560
10903
  };
10561
10904
  /**
@@ -11075,7 +11418,7 @@ export type UserCertificationParameters = {
11075
11418
  */
11076
11419
  certification_id: string;
11077
11420
  /**
11078
- * When the worker earned the certification (ISO 8601). Required.
11421
+ * When the worker earned the certification, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`). Required.
11079
11422
  */
11080
11423
  received_at: string;
11081
11424
  /**
@@ -11117,7 +11460,7 @@ export type UserCertificationUpdateParameters = {
11117
11460
  */
11118
11461
  certification_id?: string;
11119
11462
  /**
11120
- * When the worker earned the certification (ISO 8601). Omit to preserve the current receipt date.
11463
+ * When the worker earned the certification, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`). Omit to preserve the current receipt date.
11121
11464
  */
11122
11465
  received_at?: string;
11123
11466
  /**
@@ -13484,11 +13827,11 @@ export type AssetsItemResponseObject = {
13484
13827
  */
13485
13828
  status: 'available' | 'assigned' | null;
13486
13829
  /**
13487
- * When the item was purchased (ISO 8601).
13830
+ * When the item was purchased, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`).
13488
13831
  */
13489
13832
  purchase_date: string | null;
13490
13833
  /**
13491
- * Purchase price in cents, in the item's currency.
13834
+ * Purchase price in cents as a decimal string (e.g. "12345.0" is $123.45), in the item's currency.
13492
13835
  */
13493
13836
  purchase_price_cents: string | null;
13494
13837
  /**
@@ -13576,13 +13919,13 @@ export type AssetsItemParameters = {
13576
13919
  */
13577
13920
  status?: 'available' | 'assigned';
13578
13921
  /**
13579
- * When the item was purchased (ISO 8601).
13922
+ * When the item was purchased, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`).
13580
13923
  */
13581
13924
  purchase_date?: string | null;
13582
13925
  /**
13583
- * Purchase price in cents, in the item's currency.
13926
+ * Purchase price in cents as a decimal string (e.g. "12345.0" is $123.45), in the item's currency.
13584
13927
  */
13585
- purchase_price_cents?: number | null;
13928
+ purchase_price_cents?: string | null;
13586
13929
  /**
13587
13930
  * Identifier for this item in an external system.
13588
13931
  */
@@ -13671,13 +14014,13 @@ export type AssetsItemUpdateParameters = {
13671
14014
  */
13672
14015
  status?: 'available' | 'assigned';
13673
14016
  /**
13674
- * When the item was purchased (ISO 8601).
14017
+ * When the item was purchased, as a calendar date (`YYYY-MM-DD`) stored as midnight UTC. A time sent with it is kept, not dropped, and is read as UTC unless it carries an offset (`Z` or `-05:00`).
13675
14018
  */
13676
14019
  purchase_date?: string | null;
13677
14020
  /**
13678
- * Purchase price in cents, in the item's currency.
14021
+ * Purchase price in cents as a decimal string (e.g. "12345.0" is $123.45), in the item's currency.
13679
14022
  */
13680
- purchase_price_cents?: number | null;
14023
+ purchase_price_cents?: string | null;
13681
14024
  /**
13682
14025
  * Identifier for this item in an external system.
13683
14026
  */
@@ -18035,9 +18378,9 @@ export type DeleteDocumentErrors = {
18035
18378
  export type DeleteDocumentError = DeleteDocumentErrors[keyof DeleteDocumentErrors];
18036
18379
  export type DeleteDocumentResponses = {
18037
18380
  /**
18038
- * Success
18381
+ * No Content
18039
18382
  */
18040
- 200: AssetsDocumentResponseObject;
18383
+ 204: void;
18041
18384
  };
18042
18385
  export type DeleteDocumentResponse = DeleteDocumentResponses[keyof DeleteDocumentResponses];
18043
18386
  export type GetDocumentData = {
@@ -20407,7 +20750,7 @@ export type GetAssessmentResponses = {
20407
20750
  200: CompetencyAssessmentResponseObject;
20408
20751
  };
20409
20752
  export type GetAssessmentResponse = GetAssessmentResponses[keyof GetAssessmentResponses];
20410
- export type ListAssessmentKeyActivitiesData = {
20753
+ export type ListAssessmentCriteriaData = {
20411
20754
  body?: never;
20412
20755
  path: {
20413
20756
  assessment_id: string;
@@ -20416,9 +20759,9 @@ export type ListAssessmentKeyActivitiesData = {
20416
20759
  filter?: string;
20417
20760
  'filter[unexpected]'?: string;
20418
20761
  };
20419
- url: '/api/v1/competencies/assessments/{assessment_id}/key_activities';
20762
+ url: '/api/v1/competencies/assessments/{assessment_id}/criteria';
20420
20763
  };
20421
- export type ListAssessmentKeyActivitiesErrors = {
20764
+ export type ListAssessmentCriteriaErrors = {
20422
20765
  /**
20423
20766
  * Bad Request
20424
20767
  */
@@ -20428,46 +20771,46 @@ export type ListAssessmentKeyActivitiesErrors = {
20428
20771
  */
20429
20772
  403: Problem;
20430
20773
  };
20431
- export type ListAssessmentKeyActivitiesError = ListAssessmentKeyActivitiesErrors[keyof ListAssessmentKeyActivitiesErrors];
20432
- export type ListAssessmentKeyActivitiesResponses = {
20774
+ export type ListAssessmentCriteriaError = ListAssessmentCriteriaErrors[keyof ListAssessmentCriteriaErrors];
20775
+ export type ListAssessmentCriteriaResponses = {
20433
20776
  /**
20434
20777
  * Candidate sees a decided review
20435
20778
  */
20436
20779
  200: {
20437
20780
  meta: Meta;
20438
20781
  links: Links;
20439
- data: Array<CompetencyAssessmentKeyActivityResponseObject>;
20782
+ data: Array<CompetencyAssessmentCriterionResponseObject>;
20440
20783
  };
20441
20784
  };
20442
- export type ListAssessmentKeyActivitiesResponse = ListAssessmentKeyActivitiesResponses[keyof ListAssessmentKeyActivitiesResponses];
20443
- export type GetAssessmentKeyActivityData = {
20785
+ export type ListAssessmentCriteriaResponse = ListAssessmentCriteriaResponses[keyof ListAssessmentCriteriaResponses];
20786
+ export type GetAssessmentCriterionData = {
20444
20787
  body?: never;
20445
20788
  path: {
20446
20789
  assessment_id: string;
20447
20790
  id: string;
20448
20791
  };
20449
20792
  query?: never;
20450
- url: '/api/v1/competencies/assessments/{assessment_id}/key_activities/{id}';
20793
+ url: '/api/v1/competencies/assessments/{assessment_id}/criteria/{id}';
20451
20794
  };
20452
- export type GetAssessmentKeyActivityErrors = {
20795
+ export type GetAssessmentCriterionErrors = {
20453
20796
  /**
20454
20797
  * Forbidden
20455
20798
  */
20456
20799
  403: Problem;
20457
20800
  };
20458
- export type GetAssessmentKeyActivityError = GetAssessmentKeyActivityErrors[keyof GetAssessmentKeyActivityErrors];
20459
- export type GetAssessmentKeyActivityResponses = {
20801
+ export type GetAssessmentCriterionError = GetAssessmentCriterionErrors[keyof GetAssessmentCriterionErrors];
20802
+ export type GetAssessmentCriterionResponses = {
20460
20803
  /**
20461
20804
  * Candidate sees a decided review
20462
20805
  */
20463
- 200: CompetencyAssessmentKeyActivityResponseObject;
20806
+ 200: CompetencyAssessmentCriterionResponseObject;
20464
20807
  };
20465
- export type GetAssessmentKeyActivityResponse = GetAssessmentKeyActivityResponses[keyof GetAssessmentKeyActivityResponses];
20808
+ export type GetAssessmentCriterionResponse = GetAssessmentCriterionResponses[keyof GetAssessmentCriterionResponses];
20466
20809
  export type ListEvidenceItemsData = {
20467
20810
  body?: never;
20468
20811
  path: {
20469
20812
  assessment_id: string;
20470
- key_activity_id: string;
20813
+ criterion_id: string;
20471
20814
  };
20472
20815
  query?: {
20473
20816
  /**
@@ -20477,7 +20820,7 @@ export type ListEvidenceItemsData = {
20477
20820
  filter?: string;
20478
20821
  'filter[unexpected]'?: string;
20479
20822
  };
20480
- url: '/api/v1/competencies/assessments/{assessment_id}/key_activities/{key_activity_id}/evidence_items';
20823
+ url: '/api/v1/competencies/assessments/{assessment_id}/criteria/{criterion_id}/evidence_items';
20481
20824
  };
20482
20825
  export type ListEvidenceItemsErrors = {
20483
20826
  /**
@@ -20505,11 +20848,11 @@ export type GetEvidenceItemData = {
20505
20848
  body?: never;
20506
20849
  path: {
20507
20850
  assessment_id: string;
20508
- key_activity_id: string;
20851
+ criterion_id: string;
20509
20852
  id: string;
20510
20853
  };
20511
20854
  query?: never;
20512
- url: '/api/v1/competencies/assessments/{assessment_id}/key_activities/{key_activity_id}/evidence_items/{id}';
20855
+ url: '/api/v1/competencies/assessments/{assessment_id}/criteria/{criterion_id}/evidence_items/{id}';
20513
20856
  };
20514
20857
  export type GetEvidenceItemErrors = {
20515
20858
  /**
@@ -22581,6 +22924,140 @@ export type UpdateGroupResponses = {
22581
22924
  200: GroupResponseObject;
22582
22925
  };
22583
22926
  export type UpdateGroupResponse = UpdateGroupResponses[keyof UpdateGroupResponses];
22927
+ export type ListJobDocumentsData = {
22928
+ body?: never;
22929
+ path: {
22930
+ job_id: string;
22931
+ };
22932
+ query?: {
22933
+ /**
22934
+ * Returns documents whose type is any of the given DocumentType values. Comma-separate to match multiple (e.g. `PWA_DOCUMENTATION,OTHER`).
22935
+ */
22936
+ 'filter[type]'?: Array<'CERTIFICATIONS' | 'CHECKLIST' | 'MAP' | 'MSA' | 'ONSITE_POSTER' | 'OTHER' | 'PARTS_INSTRUCTIONS' | 'PHOTO' | 'PO' | 'PWA_DOCUMENTATION' | 'RESUME' | 'WO'>;
22937
+ };
22938
+ url: '/api/v1/jobs/{job_id}/documents';
22939
+ };
22940
+ export type ListJobDocumentsErrors = {
22941
+ /**
22942
+ * Forbidden
22943
+ */
22944
+ 403: Problem;
22945
+ /**
22946
+ * Not Found
22947
+ */
22948
+ 404: Problem;
22949
+ };
22950
+ export type ListJobDocumentsError = ListJobDocumentsErrors[keyof ListJobDocumentsErrors];
22951
+ export type ListJobDocumentsResponses = {
22952
+ /**
22953
+ * Success
22954
+ */
22955
+ 200: JobDocumentsResponseObject;
22956
+ };
22957
+ export type ListJobDocumentsResponse = ListJobDocumentsResponses[keyof ListJobDocumentsResponses];
22958
+ export type CreateJobDocumentData = {
22959
+ body: JobDocumentParameters;
22960
+ path: {
22961
+ job_id: string;
22962
+ };
22963
+ query?: never;
22964
+ url: '/api/v1/jobs/{job_id}/documents';
22965
+ };
22966
+ export type CreateJobDocumentErrors = {
22967
+ /**
22968
+ * Forbidden
22969
+ */
22970
+ 403: Problem;
22971
+ /**
22972
+ * Unprocessable Content
22973
+ */
22974
+ 422: Problem;
22975
+ };
22976
+ export type CreateJobDocumentError = CreateJobDocumentErrors[keyof CreateJobDocumentErrors];
22977
+ export type CreateJobDocumentResponses = {
22978
+ /**
22979
+ * Created
22980
+ */
22981
+ 201: JobDocumentResponseObject;
22982
+ };
22983
+ export type CreateJobDocumentResponse = CreateJobDocumentResponses[keyof CreateJobDocumentResponses];
22984
+ export type DeleteJobDocumentData = {
22985
+ body?: never;
22986
+ path: {
22987
+ job_id: string;
22988
+ id: string;
22989
+ };
22990
+ query?: never;
22991
+ url: '/api/v1/jobs/{job_id}/documents/{id}';
22992
+ };
22993
+ export type DeleteJobDocumentErrors = {
22994
+ /**
22995
+ * Forbidden
22996
+ */
22997
+ 403: Problem;
22998
+ };
22999
+ export type DeleteJobDocumentError = DeleteJobDocumentErrors[keyof DeleteJobDocumentErrors];
23000
+ export type DeleteJobDocumentResponses = {
23001
+ /**
23002
+ * No Content
23003
+ */
23004
+ 204: void;
23005
+ };
23006
+ export type DeleteJobDocumentResponse = DeleteJobDocumentResponses[keyof DeleteJobDocumentResponses];
23007
+ export type GetJobDocumentData = {
23008
+ body?: never;
23009
+ path: {
23010
+ job_id: string;
23011
+ id: string;
23012
+ };
23013
+ query?: never;
23014
+ url: '/api/v1/jobs/{job_id}/documents/{id}';
23015
+ };
23016
+ export type GetJobDocumentErrors = {
23017
+ /**
23018
+ * Forbidden
23019
+ */
23020
+ 403: Problem;
23021
+ /**
23022
+ * Not Found
23023
+ */
23024
+ 404: Problem;
23025
+ };
23026
+ export type GetJobDocumentError = GetJobDocumentErrors[keyof GetJobDocumentErrors];
23027
+ export type GetJobDocumentResponses = {
23028
+ /**
23029
+ * Success
23030
+ */
23031
+ 200: JobDocumentResponseObject;
23032
+ };
23033
+ export type GetJobDocumentResponse = GetJobDocumentResponses[keyof GetJobDocumentResponses];
23034
+ export type UpdateJobDocumentData = {
23035
+ body: JobDocumentUpdateParameters;
23036
+ path: {
23037
+ job_id: string;
23038
+ id: string;
23039
+ };
23040
+ query?: never;
23041
+ url: '/api/v1/jobs/{job_id}/documents/{id}';
23042
+ };
23043
+ export type UpdateJobDocumentErrors = {
23044
+ /**
23045
+ * Forbidden
23046
+ */
23047
+ 403: Problem;
23048
+ /**
23049
+ * Not Found
23050
+ */
23051
+ 404: Problem;
23052
+ };
23053
+ export type UpdateJobDocumentError = UpdateJobDocumentErrors[keyof UpdateJobDocumentErrors];
23054
+ export type UpdateJobDocumentResponses = {
23055
+ /**
23056
+ * Success
23057
+ */
23058
+ 200: JobDocumentResponseObject;
23059
+ };
23060
+ export type UpdateJobDocumentResponse = UpdateJobDocumentResponses[keyof UpdateJobDocumentResponses];
22584
23061
  export type ListJobFormAssignmentTasksData = {
22585
23062
  body?: never;
22586
23063
  path: {
@@ -33182,6 +33659,12 @@ export type CreateCompanyResponses = {
33182
33659
  export type CreateCompanyResponse = CreateCompanyResponses[keyof CreateCompanyResponses];
33183
33660
  export type RemoveUserFromCompanyData = {
33184
33661
  body?: never;
33662
+ headers: {
33663
+ /**
33664
+ * Version validator for the whole employment family, or `*` to remove its current state.
33665
+ */
33666
+ 'If-Match': string;
33667
+ };
33185
33668
  path: {
33186
33669
  user_id: string;
33187
33670
  id: string;
@@ -33198,6 +33681,14 @@ export type RemoveUserFromCompanyErrors = {
33198
33681
  * Not Found
33199
33682
  */
33200
33683
  404: Problem;
33684
+ /**
33685
+ * Precondition Failed
33686
+ */
33687
+ 412: Problem;
33688
+ /**
33689
+ * Precondition Required
33690
+ */
33691
+ 428: Problem;
33201
33692
  };
33202
33693
  export type RemoveUserFromCompanyError = RemoveUserFromCompanyErrors[keyof RemoveUserFromCompanyErrors];
33203
33694
  export type RemoveUserFromCompanyResponses = {