/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { contractorsCreate } from "../funcs/contractorsCreate.js"; import { contractorsDelete } from "../funcs/contractorsDelete.js"; import { contractorsDeleteV1ContractorsContractorUuidRehire } from "../funcs/contractorsDeleteV1ContractorsContractorUuidRehire.js"; import { contractorsDeleteV1ContractorsContractorUuidTermination } from "../funcs/contractorsDeleteV1ContractorsContractorUuidTermination.js"; import { contractorsGet } from "../funcs/contractorsGet.js"; import { contractorsGetAddress } from "../funcs/contractorsGetAddress.js"; import { contractorsGetOnboardingStatus } from "../funcs/contractorsGetOnboardingStatus.js"; import { contractorsGetV1CompaniesCompanyIdContractorsPaymentDetails } from "../funcs/contractorsGetV1CompaniesCompanyIdContractorsPaymentDetails.js"; import { contractorsList } from "../funcs/contractorsList.js"; import { contractorsPostV1ContractorsContractorUuidRehire } from "../funcs/contractorsPostV1ContractorsContractorUuidRehire.js"; import { contractorsPostV1ContractorsContractorUuidTermination } from "../funcs/contractorsPostV1ContractorsContractorUuidTermination.js"; import { contractorsUpdate } from "../funcs/contractorsUpdate.js"; import { contractorsUpdateAddress } from "../funcs/contractorsUpdateAddress.js"; import { contractorsUpdateOnboardingStatus } from "../funcs/contractorsUpdateOnboardingStatus.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import { DeleteV1ContractorsContractorUuidRequest, DeleteV1ContractorsContractorUuidResponse, } from "../models/operations/deletev1contractorscontractoruuid.js"; import { DeleteV1ContractorsContractorUuidRehireRequest, DeleteV1ContractorsContractorUuidRehireResponse, } from "../models/operations/deletev1contractorscontractoruuidrehire.js"; import { DeleteV1ContractorsContractorUuidTerminationRequest, DeleteV1ContractorsContractorUuidTerminationResponse, } from "../models/operations/deletev1contractorscontractoruuidtermination.js"; import { GetV1CompaniesCompanyIdContractorsPaymentDetailsRequest, GetV1CompaniesCompanyIdContractorsPaymentDetailsResponse, } from "../models/operations/getv1companiescompanyidcontractorspaymentdetails.js"; import { GetV1CompaniesCompanyUuidContractorsRequest, GetV1CompaniesCompanyUuidContractorsResponse, } from "../models/operations/getv1companiescompanyuuidcontractors.js"; import { GetV1ContractorsContractorUuidRequest, GetV1ContractorsContractorUuidResponse, } from "../models/operations/getv1contractorscontractoruuid.js"; import { GetV1ContractorsContractorUuidAddressRequest, GetV1ContractorsContractorUuidAddressResponse, } from "../models/operations/getv1contractorscontractoruuidaddress.js"; import { GetV1ContractorsContractorUuidOnboardingStatusRequest, GetV1ContractorsContractorUuidOnboardingStatusResponse, } from "../models/operations/getv1contractorscontractoruuidonboardingstatus.js"; import { PostV1CompaniesCompanyUuidContractorsRequest, PostV1CompaniesCompanyUuidContractorsResponse, } from "../models/operations/postv1companiescompanyuuidcontractors.js"; import { PostV1ContractorsContractorUuidRehireRequest, PostV1ContractorsContractorUuidRehireResponse, } from "../models/operations/postv1contractorscontractoruuidrehire.js"; import { PostV1ContractorsContractorUuidTerminationRequest, PostV1ContractorsContractorUuidTerminationResponse, } from "../models/operations/postv1contractorscontractoruuidtermination.js"; import { PutV1ContractorsContractorUuidRequest, PutV1ContractorsContractorUuidResponse, } from "../models/operations/putv1contractorscontractoruuid.js"; import { PutV1ContractorsContractorUuidAddressRequest, PutV1ContractorsContractorUuidAddressResponse, } from "../models/operations/putv1contractorscontractoruuidaddress.js"; import { PutV1ContractorsContractorUuidOnboardingStatusRequest, PutV1ContractorsContractorUuidOnboardingStatusResponse, } from "../models/operations/putv1contractorscontractoruuidonboardingstatus.js"; import { unwrapAsync } from "../types/fp.js"; export class Contractors extends ClientSDK { /** * Get contractors of a company * * @remarks * Get all contractors, active and inactive, individual and business, for a company. * * scope: `contractors:read` */ async list( request: GetV1CompaniesCompanyUuidContractorsRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsList( this, request, options, )); } /** * Create a contractor * * @remarks * Create an individual or business contractor. * * scope: `contractors:manage` */ async create( request: PostV1CompaniesCompanyUuidContractorsRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsCreate( this, request, options, )); } /** * Get a contractor * * @remarks * Get a contractor. * * scope: `contractors:read` */ async get( request: GetV1ContractorsContractorUuidRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsGet( this, request, options, )); } /** * Update a contractor * * @remarks * Update a contractor. * * > 🚧 Warning * > * > Watch out when changing a contractor's type (when the contractor is finished onboarding). Specifically, changing contractor type can be dangerous since Gusto won't recognize and file two separate 1099s if they simply change from business to individual * * scope: `contractors:write` */ async update( request: PutV1ContractorsContractorUuidRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsUpdate( this, request, options, )); } /** * Delete a contractor * * @remarks * A contractor can only be deleted when there are no contractor payments. * * scope: `contractors:manage` */ async delete( request: DeleteV1ContractorsContractorUuidRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsDelete( this, request, options, )); } /** * Get the contractor's onboarding status * * @remarks * Retrieves a contractor's onboarding status. The data returned helps inform the required onboarding steps and respective completion status. * * ## onboarding_status * * ### Admin-facilitated onboarding * | onboarding_status | Description | * |:------------------|------------:| * | `admin_onboarding_incomplete` | Admin needs to enter basic information about the contractor. | * | `admin_onboarding_review` | All information has been completed and admin needs to confirm onboarding. | * | `onboarding_completed` | Contractor has been fully onboarded and verified. | * * ### Contractor self-onboarding * * | onboarding_status | Description | * | --- | ----------- | * | `admin_onboarding_incomplete` | Admin needs to enter basic information about the contractor. | * | `self_onboarding_not_invited` | Admin has the intention to invite the contractor to self-onboard (e.g., marking a checkbox), but the system has not yet sent the invitation. | * | `self_onboarding_invited` | Contractor has been sent an invitation to self-onboard. | * | `self_onboarding_started` | Contractor has started the self-onboarding process. | * | `self_onboarding_review` | Admin needs to review contractors's entered information and confirm onboarding. | * | `onboarding_completed` | Contractor has been fully onboarded and verified. | * * ## onboarding_steps * * | onboarding_steps | Requirement(s) to be completed | * |:-----------------|-------------------------------:| * | `basic_details` | Add individual contractor's first name, last name, social security number or Business name and EIN depending on the contractor type | * | `add_address` | Add contractor address. | * | `compensation_details` | Add contractor compensation. | * | `payment_details` | (optional) Set up contractor's direct deposit or set to check. | * | `sign_documents` | Contractor forms (e.g., W9) are generated & signed. | * | `file_new_hire_report` | Contractor new hire report is generated. | * * scope: `contractors:read` */ async getOnboardingStatus( request: GetV1ContractorsContractorUuidOnboardingStatusRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsGetOnboardingStatus( this, request, options, )); } /** * Change the contractor's onboarding status * * @remarks * Updates a contractor's onboarding status. * * Below is a list of valid onboarding status changes depending on the intended action to be performed on behalf of the contractor. * * | Action | current onboarding_status | new onboarding_status | * |:------------------|:------------:|----------:| * | Mark a contractor as self-onboarding | `admin_onboarding_incomplete` | `self_onboarding_not_invited` | * | Invite a contractor to self-onboard | `admin_onboarding_incomplete` or `self_onboarding_not_invited` | `self_onboarding_invited` | * | Cancel a contractor's self-onboarding | `self_onboarding_invited` or `self_onboarding_not_invited` | `admin_onboarding_incomplete` | * | Review a contractor's self-onboarded info | `self_onboarding_started` | `self_onboarding_review` | * | Finish a contractor's onboarding | `admin_onboarding_review` or `self_onboarding_review` | `onboarding_completed` | * * scope: `contractors:write` */ async updateOnboardingStatus( request: PutV1ContractorsContractorUuidOnboardingStatusRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsUpdateOnboardingStatus( this, request, options, )); } /** * Get a contractor address * * @remarks * The address of a contractor is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity. * * scope: `contractors:read` */ async getAddress( request: GetV1ContractorsContractorUuidAddressRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsGetAddress( this, request, options, )); } /** * Create or update a contractor's address * * @remarks * The address of a contractor is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity. * * > 🚧 Contractors can only have one address. * > * > When a contractor is created, an address is created for them by default. Updating the address will replace the existing address. * * scope: `contractors:write` */ async updateAddress( request: PutV1ContractorsContractorUuidAddressRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsUpdateAddress( this, request, options, )); } /** * List contractor payment details * * @remarks * Get payment details for contractors in a company. This endpoint returns a list of all contractors * associated with the specified company, including their payment methods and bank account details * if they are paid via direct deposit. * * For contractors paid by direct deposit, the response includes their bank account information * with sensitive data masked for security. The payment details also include information about * how their payments are split if they have multiple bank accounts configured. * * For contractors paid by check, only the basic payment method information is returned. * * ### Response Details * - For direct deposit contractors: * - Bank account details (masked) * - Payment splits configuration * - Routing numbers * - Account types * - For check payments: * - Basic payment method designation * * ### Common Use Cases * - Fetching contractor payment information for payroll processing * - Verifying contractor payment methods * - Reviewing payment split configurations * * `encrypted_account_number` is available only with the additional scope `contractor_payment_methods:read:account_numbers`. * * scope: `contractor_payment_methods:read` */ async getV1CompaniesCompanyIdContractorsPaymentDetails( request: GetV1CompaniesCompanyIdContractorsPaymentDetailsRequest, options?: RequestOptions, ): Promise { return unwrapAsync( contractorsGetV1CompaniesCompanyIdContractorsPaymentDetails( this, request, options, ), ); } /** * Schedule a contractor rehire * * @remarks * ## Purpose * Schedules a contractor rehire for a given date. Creates a new employment record for the contractor. * * ## Prerequisites * Before calling this endpoint: * 1. The contractor must be inactive (previously dismissed) * 2. The contractor must not already have an upcoming employment * * ## Related webhooks * - `contractor.reactivated`: Fires when the contractor becomes active again (on or after start_date) * * scope: `contractors:write` */ async postV1ContractorsContractorUuidRehire( request: PostV1ContractorsContractorUuidRehireRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsPostV1ContractorsContractorUuidRehire( this, request, options, )); } /** * Cancel a pending contractor rehire * * @remarks * ## Purpose * Cancels a pending contractor rehire. For future-dated rehires, cancellation is available anytime before the date. * For past-dated rehires, cancellation is only available within the 2-day grace period. * * ## Prerequisites * Before calling this endpoint: * - The contractor must have a pending rehire (upcoming employment) * * ## Related webhooks * - `contractor.deactivated`: Fires when the contractor returns to inactive state after cancellation * * scope: `contractors:write` */ async deleteV1ContractorsContractorUuidRehire( request: DeleteV1ContractorsContractorUuidRehireRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsDeleteV1ContractorsContractorUuidRehire( this, request, options, )); } /** * Schedule a contractor termination * * @remarks * ## Purpose * Schedules a contractor dismissal for a given date. Supports both immediate (past dates) and future-dated dismissals. * * ## Prerequisites * Before calling this endpoint: * 1. The contractor must be active (no existing pending dismissal) * 2. The contractor must have a current employment * * ## Related webhooks * - `contractor.deactivated`: Fires when the contractor becomes inactive (on or after end_date) * * scope: `contractors:write` */ async postV1ContractorsContractorUuidTermination( request: PostV1ContractorsContractorUuidTerminationRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsPostV1ContractorsContractorUuidTermination( this, request, options, )); } /** * Cancel a pending contractor termination * * @remarks * ## Purpose * Cancels a pending contractor dismissal. For future-dated dismissals, cancellation is available anytime before the date. * For past-dated dismissals, cancellation is only available within the 2-day grace period. * * ## Prerequisites * Before calling this endpoint: * - The contractor must have a pending dismissal (scheduled or within the grace period) * * ## Related webhooks * - `contractor.reactivated`: Fires when the contractor becomes active again after cancellation * * scope: `contractors:write` */ async deleteV1ContractorsContractorUuidTermination( request: DeleteV1ContractorsContractorUuidTerminationRequest, options?: RequestOptions, ): Promise { return unwrapAsync(contractorsDeleteV1ContractorsContractorUuidTermination( this, request, options, )); } }