openapi: 3.1.0
tags:
- name: Introspection
- name: Companies
- name: Flows
- name: Locations
- name: Bank Accounts
- name: Payment Configs
- name: Pay Schedules
- name: Employees
- name: Employee Tax Setup
- name: Employee Payment Method
- name: Employee Employments
- name: Employee Addresses
- name: Jobs and Compensations
- name: Earning Types
- name: I-9 Verification
- name: Information Requests
- name: Contractor Payment Groups
- name: Contractor Payment Method
- name: Contractor Payments
- name: Contractors
- name: Payrolls
- name: Payroll Digests
- name: Payroll Cancellations
- name: People Batches
- name: Company Forms
- name: Contractor Documents
- name: Employee Forms
- name: Company Benefits
- name: Employee Benefits
- name: Garnishments
- name: Federal Tax Details
- name: Industry Selection
- name: Signatories
- name: External Payrolls
- name: Tax Requirements
- name: Tax Payments
- name: Tax Filings
- name: Contractor Forms
- name: Time Off Policies
- name: Time Off Requests
- name: Time Tracking
- name: Holiday Pay Policies
- name: Departments
- name: Reports
- name: Generated Documents
- name: Notifications
- name: Webhooks
- name: Events
- name: Invoices
- name: Recovery Cases
- name: Company Attachment
- name: Wire In Requests
- name: ACH Transactions
- name: Reverse Wire Transactions
- name: Salary Estimates
- name: Reimbursements
- name: Member Portal Invitations
info:
title: Gusto API
version: '2025-06-15'
termsOfService: https://gusto.com/about/terms/developer-terms-of-service
description: Welcome to Gusto's Embedded Payroll API documentation!
contact:
name: Developer Relations
email: developer@gusto.com
x-release-status: deprecated
servers:
- url: https://api.gusto-demo.com
description: Demo
x-speakeasy-server-id: demo
- url: https://api.gusto.com
description: Prod
x-speakeasy-server-id: prod
security:
- CompanyAccessAuth: []
components:
schemas:
Versionable-Required:
type: object
properties:
version:
type: string
example: 56d00c178bc7393b2a206ed6a86afcb4
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
required:
- version
Minimum-Wage-List:
type: array
x-examples:
success_status:
- uuid: 1b71bb5b-4811-46e9-8a8a-cf5521cbeda6
authority: City
wage: '15.0'
wage_type: Regular
effective_date: '2017-01-01'
notes: large companies
- uuid: 87434623-b57d-4630-8da5-9dde599c7840
authority: City
wage: '10.5'
wage_type: Regular
effective_date: '2017-01-01'
notes: large companies
- uuid: fa055c11-bfe4-4ac3-84dd-8502cf046b20
authority: State
wage: '10.5'
wage_type: Regular
effective_date: '2017-01-01'
notes: large companies
- uuid: cdd9dfc2-6465-4693-ae60-0eecff35038c
authority: Federal
wage: '10.5'
wage_type: Regular
effective_date: '2017-01-01'
notes: large companies
items:
"$ref": "#/components/schemas/Minimum-Wage"
Minimum-Wage:
type: object
description: Representation of a Minimum Wage
properties:
uuid:
type: string
description: unique identifier of a minimum wage
wage:
type: string
format: float
description: The wage rate for a minimum wage record. Represented as a float, e.g. "15.0".
wage_type:
type: string
description: The type of wage the minimum wage applies to, e.g. "Regular", "Regular-Industry-Specific".
effective_date:
type: string
format: date
description: The date the minimum wage rule is effective on.
authority:
type: string
description: The governing authority that created the minimum wage, e.g. "City", "State", or "Federal".
notes:
type: string
description: Description of parties the minimum wage applies to.
required:
- uuid
- wage
- wage_type
- effective_date
- authority
Location:
description: The representation of an address in Gusto.
type: object
title: ''
x-examples:
success_status:
created_at: '2025-06-09T13:43:49.000-07:00'
updated_at: '2025-06-09T13:43:50.000-07:00'
company_uuid: 10593a6a-505b-4aa6-bf31-15dcdceedbe3
version: e1bdd845a493c74908f8e15d6114169b
uuid: 6b1351a2-de35-4499-b948-43abab274634
street_1: 300 3rd Street
street_2: Apartment 318
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
phone_number: '8009360383'
filing_address: true
mailing_address: true
properties:
uuid:
type: string
description: The UUID of the location object.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
company_uuid:
type: string
description: The UUID for the company to which the location belongs. Only included if the location belongs to a company.
readOnly: true
phone_number:
type: string
readOnly: false
description: The phone number for the location. Required for company locations. Optional for employee locations.
street_1:
type: string
readOnly: false
street_2:
type:
- string
- 'null'
readOnly: false
city:
type: string
readOnly: false
state:
type: string
readOnly: false
zip:
type: string
readOnly: false
country:
type: string
readOnly: false
default: USA
mailing_address:
type: boolean
description: Specifies if the location is the company's mailing address. Only included if the location belongs to a company.
filing_address:
description: Specifies if the location is the company's filing address. Only included if the location belongs to a company.
type: boolean
created_at:
type: string
description: Datetime for when location is created
updated_at:
type: string
description: Datetime for when location is updated
active:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
inactive:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
warnings:
type: array
description: An array of warning objects that provide additional information about the address. Warnings do not prevent the address from being saved.
items:
"$ref": "#/components/schemas/Warning-Object"
required:
- uuid
Company-Location-Request:
type: object
description: Request body for creating a company location (company address).
properties:
street_1:
type: string
description: Street address line 1.
example: 300 3rd Street
street_2:
type:
- string
- 'null'
description: Street address line 2.
example: Apartment 318
city:
type: string
description: City.
example: San Francisco
state:
type: string
description: State code (e.g. CA). Must be a valid two-letter state code.
example: CA
zip:
type: string
description: ZIP code. Must be a valid US zip (e.g. 12345 or 12345-6789).
example: '94107'
country:
type: string
description: Country code. Defaults to USA.
default: USA
example: USA
phone_number:
type: string
description: Phone number. Must be 10 digits.
pattern: "[0-9]{10}"
example: '8009360383'
mailing_address:
type: boolean
description: Specify if this location is the company's mailing address.
filing_address:
type: boolean
description: Specify if this location is the company's filing address.
required:
- phone_number
- street_1
- city
- state
- zip
x-examples:
typical_location:
street_1: 300 3rd Street
street_2: Apartment 318
city: San Francisco
state: CA
zip: '94107'
country: USA
phone_number: '8009360383'
mailing_address: false
filing_address: false
Company-Locations-List:
type: array
x-examples:
success_status:
- uuid: 04552eb9-7829-4b18-ae96-6983552948df
version: 7d9753112507b9dda4fb97910f39b06e
company_uuid: 6bf7807c-a5a0-4f4d-b2e7-3fbb4b2299fb
phone_number: '5825710808'
street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
mailing_address: false
filing_address: false
created_at: '2023-09-12T16:42:25.000-07:00'
updated_at: '2023-09-12T16:42:25.000-07:00'
active: true
inactive: false
- uuid: fa94a2fd-11a8-4024-87ff-85c587d9d2b4
version: 15e6b9680e00f3122729e64e3cef3224
company_uuid: 6bf7807c-a5a0-4f4d-b2e7-3fbb4b2299fb
phone_number: '2866070827'
street_1: 644 Fay Vista
street_2: Suite 842
city: Richmond
state: VA
zip: '23218'
country: USA,
mailing_address: true
filing_address: false
created_at: '2023-09-12T16:42:25.000-07:00'
updated_at: '2023-09-12T16:42:25.000-07:00'
active: true
inactive: false
items:
"$ref": "#/components/schemas/Location"
Not-Found-Error-Object:
description: "Not Found \n \nThe requested resource does not exist. Make sure the provided ID/UUID is valid."
type: object
required:
- errors
properties:
errors:
type: array
items:
type: object
required:
- error_key
- category
properties:
error_key:
type: string
description: Specifies where the error occurs. Typically this key identifies the attribute/parameter related to the error.
category:
type: string
description: Specifies the type of error. The category provides error groupings and can be used to build custom error handling in your integration.
message:
type: string
description: Provides details about the error - generally this message can be surfaced to an end user.
x-examples:
not_found:
errors:
- error_key: request
category: not_found
message: The requested resource was not found.
Conflict-Error-Object:
description: "Conflict\n \nThis may happen when the resource version provided does not match the current version — retrieve the latest version and retry — or when the request conflicts with another in-progress operation on the same resource. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details."
type: object
required:
- errors
properties:
errors:
type: array
items:
type: object
required:
- error_key
- category
properties:
error_key:
type: string
description: Specifies where the error occurs. Typically this key identifies the attribute/parameter related to the error.
category:
type: string
description: Specifies the type of error. The category provides error groupings and can be used to build custom error handling in your integration.
message:
type: string
description: Provides details about the error - generally this message can be surfaced to an end user.
x-examples:
invalid_version:
errors:
- error_key: base
category: invalid_resource_version
message: You are attempting to update a resource using an out-of-date version.
locked_payroll:
errors:
- error_key: base
category: invalid_operation
message: This payroll is currently being processed by another request. Please try again later.
Forbidden-Error-Object:
description: "Forbidden\n \nThe targeted company has been archived because its EIN was reassigned to a replacement company. Use the replacement company referenced in the error metadata."
type: object
required:
- errors
properties:
errors:
type: array
items:
"$ref": "#/components/schemas/Entity-Error-Object"
x-examples:
company_auto_archived:
errors:
- error_key: base
category: invalid_operation
message: This company was archived because its EIN was reassigned to a replacement company. Use the replacement company referenced in the error metadata to proceed.
metadata:
replacement_company_uuid: 2b9e7c14-6d3a-4f52-9e8b-1a7c4d05f6e0
Unprocessable-Entity-Error-Object:
description: "Unprocessable Entity\n \nThis may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.\n"
type: object
required:
- errors
properties:
errors:
type: array
items:
"$ref": "#/components/schemas/Entity-Error-Object"
x-examples:
tax_filing_invalid_status:
errors:
- error_key: status
category: invalid_attribute_value
message: 'Status must be one of: not_started, in_progress, blocked, accepted, not_required, failed'
tax_filing_invalid_sort_by:
errors:
- error_key: sort_by
category: invalid_attribute_value
message: Sort by must be one of period_start, period_end, due_date, filed_at, optionally suffixed with :asc or :desc
tax_filing_invalid_period_start:
errors:
- error_key: period_start
category: invalid_attribute_value
message: Period start must be a valid ISO 8601 date
tax_filing_invalid_jurisdiction:
errors:
- error_key: jurisdiction
category: invalid_attribute_value
message: 'Jurisdiction must be two-letter state codes or US (invalid: XX)'
tax_payment_invalid_sort_by:
errors:
- error_key: sort_by
category: invalid_parameter
message: 'Unknown sort_by: bogus:asc. Must be one of amount, due_date, payment_sent_on, period_end, period_start, optionally suffixed with :asc or :desc'
tax_payment_inverted_range:
errors:
- error_key: due_date_to
category: invalid_attribute_value
message: Due date to must be greater than or equal to due date from
partner_managed_company_disassociate_not_associated:
errors:
- error_key: base
category: invalid_operation
message: 'Could not disassociate from embedded payroll: company not associated with partner.'
bulk_report_invalid_report_type:
errors:
- error_key: batch
category: nested_errors
errors:
- idx: 0
category: nested_errors
errors:
- error_key: report_type
category: invalid_attribute_value
message: 'Invalid report type: invalid_type'
nested_disbursement_errors:
errors:
- error_key: disbursements
category: nested_errors
metadata:
employee_uuid: invalid-uuid-1
errors:
- error_key: employee_uuid
category: not_found
message: Disbursement not found.
- error_key: disbursements
category: nested_errors
metadata:
employee_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
errors:
- error_key: payment_method
category: invalid_attribute_value
message: 'Payment method must be one of: Direct Deposit, Check.'
- error_key: payment_status
category: invalid_attribute_value
message: Payment status is not valid for payment method 'InvalidMethod'.
webhook_subscription_url_missing:
errors:
- error_key: url
category: invalid_attribute_value
message: URL can't be blank
webhook_subscription_invalid_entity_type:
errors:
- error_key: subscription_entities.entity_type
category: invalid_attribute_value
message: Entity type is not included in the list
invalid_token:
errors:
- error_key: base
category: invalid_attribute_value
message: Invalid verification token
notification_supporting_data_invalid:
errors:
- error_key: base
category: invalid_operation
message: 'Invalid notification: supporting data is no longer valid.'
employee_payment_details_invalid_filter_combination:
errors:
- error_key: base
category: invalid_request_error
message: Cannot filter by both employee_uuid and payroll_uuid simultaneously.
contractor_document_sign_missing_agree:
errors:
- error_key: agree
category: invalid_attribute_value
message: You must agree to sign the document electronically
contractor_document_sign_invalid_ip_address:
errors:
- error_key: signed_by_ip_address
category: invalid_attribute_value
message: Signed by ip address is invalid
contractor_document_sign_missing_fields:
errors:
- error_key: fields
category: nested_errors
errors:
- error_key: dogs_name
category: invalid_attribute_value
message: Field is required.
- error_key: dogs_favorite_food
category: invalid_attribute_value
message: Field is required.
- error_key: dogs_signature
category: invalid_attribute_value
message: Field is required.
contractor_document_sign_already_signed:
errors:
- error_key: base
category: invalid_operation
message: This form has already been signed
contractor_document_unsupported_form_type:
errors:
- error_key: base
category: invalid_operation
message: Form type is not supported
bank_account_create_unfunded_payments:
errors:
- error_key: base
category: invalid_operation
message: FundingMethod has unfunded payments
bank_account_delete_unfunded_payments:
errors:
- error_key: base
category: invalid_operation
message: FundingMethod has unfunded payments
bank_account_verify_incorrect_deposits:
errors:
- error_key: base
category: invalid_operation
message: Your bank account cannot be verified. Please check the test deposit amounts.
bank_account_verify_already_verified:
errors:
- error_key: base
category: invalid_operation
message: Your bank account has already been verified.
bank_account_missing_routing:
errors:
- error_key: routing_number
category: invalid_attribute_value
message: Routing number is required.
plaid_processor_token_missing:
errors:
- error_key: processor_token
category: invalid_attribute_value
message: 'Processor token param is missing or the value is empty: processor_token'
plaid_bank_account_linking_unavailable:
errors:
- error_key: base
category: invalid_operation
message: This company's bank account can't be linked through this endpoint. Contact Gusto support to set it up.
contractor_bank_account_invalid_account_number:
errors:
- error_key: account_number
category: invalid_attribute_value
message: Invalid account number format
contractor_bank_account_invalid_account_type:
errors:
- error_key: account_type
category: invalid_attribute_value
message: Account type's value is not included in the list
contractor_payment_method_invalid_type:
errors:
- error_key: type
category: invalid_attribute_value
message: Payment method must be 'Check' or 'Direct Deposit'
company_attachment_missing_document:
errors:
- error_key: base
category: missing_parameter
message: "'document' is required"
company_attachment_invalid_category:
errors:
- error_key: base
category: missing_parameter
message: Attachment category is not supported
company_attachment_invalid_file_type:
errors:
- error_key: file
category: invalid_attribute_value
message: file type is not allowed
provision_missing_user:
errors:
- error_key: user
category: missing_parameter
message: user is required.
provision_invalid_email:
errors:
- error_key: base
category: invalid_attribute_value
message: Invalid email address.
admin_missing_required_field:
errors:
- error_key: last_name
category: missing_parameter
message: last_name is required.
admin_duplicate_email:
errors:
- error_key: email
category: invalid_attribute_value
message: User has already been taken
- error_key: company
category: invalid_attribute_value
message: Company is invalid
sandbox_w2_already_generated:
errors:
- error_key: base
category: invalid_attribute_value
message: W2 already generated for this year
sandbox_w2_invalid_year:
errors:
- error_key: base
category: invalid_attribute_value
message: Cannot generate form for year 1800
sandbox_1099_invalid_year:
errors:
- error_key: base
category: invalid_attribute_value
message: Please enter a year between 2015 and 2024
employee_bank_account_missing_name:
errors:
- error_key: name
category: invalid_attribute_value
message: Name is required
employee_bank_account_invalid_account_number:
errors:
- error_key: account_number
category: invalid_attribute_value
message: Invalid account number
employee_bank_account_duplicate:
errors:
- error_key: base
category: invalid_operation
message: Bank account with the same details already exists
employee_bank_account_invalid_routing_on_update:
errors:
- error_key: routing_number
category: invalid_attribute_value
message: Invalid routing number
payment_configs_missing_parameter:
errors:
- error_key: base
category: missing_parameter
message: At least one parameter must be provided
payment_configs_invalid_fast_payment_limit:
errors:
- error_key: fast_payment_limit
category: invalid_attribute_value
message: Fast payment limit should be a number
pay_periods_invalid_end_date:
errors:
- error_key: end_date
category: invalid_parameter
message: End date cannot be more than 3 months in future
company_industry_selection_naics_code_required:
errors:
- error_key: naics_code
category: invalid_attribute_value
message: Naics code is required.
company_industry_selection_naics_code_invalid:
errors:
- error_key: naics_code
category: invalid_attribute_value
message: Naics code must be equal to 6 digits.
company_industry_selection_sics_codes_invalid:
errors:
- error_key: sic_codes
category: invalid_attribute_value
message: Sic codes must be equal to 4 digits
time_off_policy_name_required:
errors:
- error_key: name
category: invalid_attribute_value
message: Name is required.
time_off_policy_unlimited_invalid_accrual_rate:
errors:
- error_key: accrual_rate
category: invalid_operation
message: Accrual rate must be blank for unlimited policies.
time_off_policy_pending_requests:
errors:
- error_key: time_off_policy
category: invalid_operation
message: Cannot deactivate policy with pending time off requests.
time_off_policy_employees_required:
errors:
- error_key: employees
category: invalid_attribute_value
message: Employees are required.
time_off_policy_unlimited_balance_update:
errors:
- error_key: base
category: invalid_attribute_value
message: Can not adjust balances for unlimited policies.
payroll_sync_invalid_pay_schedule:
errors:
- error_key: pay_schedule_uuid
category: invalid_attribute_value
message: Pay schedule uuid could not be found.
payroll_sync_no_employees:
errors:
- error_key: base
category: invalid_operation
message: There are no employees to run payroll for in the selected pay period.
payroll_sync_empty_export:
errors:
- error_key: base
category: invalid_operation
message: There are no hours to sync to payroll for the selected pay period.
migrate_company_invalid_ip:
errors:
- error_key: ip_address
category: invalid_attribute_value
message: A valid user's IP Address is required in order to accept terms of service.
migrate_company_invalid_signatory:
errors:
- error_key: email
category: invalid_attribute_value
message: A valid signatory email is required to perform this operation.
migrate_company_already_migrated:
errors:
- error_key: base
category: invalid_attribute_value
message: The operation was already performed for this company.
metadata:
key: migrated_company
partner_managed_company_create_missing_company:
errors:
- error_key: company
category: missing_parameter
message: company is required.
partner_managed_company_create_invalid_name:
errors:
- error_key: name
category: invalid_attribute_value
message: Company name must be at least 2 characters
partner_managed_company_tos_invalid_ip_address:
errors:
- error_key: ip_address
category: invalid_attribute_value
message: A valid user's IP Address is required in order to accept terms of service.
partner_managed_company_tos_missing_external_user_id:
errors:
- error_key: external_user_id
category: invalid_attribute_value
message: Your platform's User ID is required in order to accept terms of service.
partner_managed_company_tos_invalid_user_email:
errors:
- error_key: email
category: invalid_attribute_value
message: Email does not belong to company user.
holiday_pay_policy_already_exists:
errors:
- error_key: base
category: invalid_operation
message: Company already has a holiday pay policy.
holiday_pay_policy_not_exists:
errors:
- error_key: base
category: invalid_operation
message: Company does not have a holiday pay policy, please create one
holiday_pay_policy_invalid_employees:
errors:
- error_key: employees
category: invalid_attribute_value
message: Invalid employee uuids provided.
onboarded_employee:
errors:
- error_key: base
category: invalid_operation
message: Cannot delete onboarded employee
garnishment_invalid_amount:
errors:
- error_key: amount
category: invalid_attribute_value
message: Amount must be greater than or equal to 0
garnishment_pay_period_exceeds_annual:
errors:
- error_key: pay_period_maximum
category: invalid_attribute_value
message: Pay period maximum must be less than annual maximum
garnishment_type_cannot_change:
errors:
- error_key: garnishment_type
category: invalid_attribute_value
message: Garnishment type cannot change
garnishment_child_support_invalid_fips:
errors:
- error_key: child_support
category: nested_errors
errors:
- error_key: fips_code
category: invalid_attribute_value
message: FIPS code is not valid for CA
garnishment_child_support_missing_fields:
errors:
- error_key: child_support
category: nested_errors
errors:
- error_key: state
category: invalid_attribute_value
message: Select a valid state agency
- error_key: payment_period
category: invalid_attribute_value
message: Select a valid payment period
- error_key: case_number
category: invalid_attribute_value
message: Case number is required
invalid_attribute:
errors:
- error_key: base
category: invalid_operation
message: There is an error in the request body.
nyc_withholding_allowance_required:
errors:
- error_key: states
category: nested_errors
errors:
- error_key: questions
category: nested_errors
metadata:
state: NY
errors:
- error_key: answers
category: nested_errors
metadata:
key: total_allowances_nyc
errors:
- error_key: value
category: invalid_attribute_value
message: NYC Withholding Allowance is required for employees who live in New York City
metadata:
valid_from: '2010-01-01'
valid_up_to:
pay_schedule_missing_anchor_dates:
errors:
- error_key: anchor_pay_date
category: invalid_attribute_value
message: can't be blank
- error_key: anchor_end_of_pay_period
category: invalid_attribute_value
message: can't be blank
pay_schedule_invalid_frequency:
errors:
- error_key: frequency
category: invalid_attribute_value
message: is not included in the list
pay_schedule_malformed_dates:
errors:
- error_key: anchor_pay_date
category: invalid_attribute_value
message: is invalid
- error_key: anchor_end_of_pay_period
category: invalid_attribute_value
message: is invalid
pay_schedule_workweek_start_day_not_yet_changeable:
errors:
- error_key: workweek_start_day
category: invalid_attribute_value
message: Workweek start day can only be changed once per pay period. Please wait until 2022-10-05 to change it again.
skip_payroll_invalid_payroll_type:
errors:
- error_key: payroll_type
category: invalid_attribute_value
message: Payroll type is not valid.
paid_holidays_invalid_year:
errors:
- error_key: base
category: invalid_attribute_value
message: Invalid year provided.
tax_requirements_invalid_requirement_key:
errors:
- error_key: requirement_sets
category: nested_errors
metadata:
key: misc
effective_from:
state: NY
errors:
- error_key: requirements
category: nested_errors
metadata:
key: 1-2-3-4
errors:
- error_key: key
category: invalid_attribute_value
message: Key is required
tax_requirements_invalid_value_type:
errors:
- error_key: requirement_sets
category: nested_errors
metadata:
key: misc
effective_from:
state: NY
errors:
- error_key: requirements
category: nested_errors
metadata:
key: 71653ec0-00b5-4c66-a58b-22ecf21704c5
errors:
- error_key: value
category: invalid_attribute_value
message: Expected a value of type boolean, but got string
tax_requirements_domain_validation_failure:
errors:
- error_key: requirement_sets
category: nested_errors
metadata:
key: taxrates
effective_from: '2026-01-01'
state: NY
errors:
- error_key: requirements
category: nested_errors
metadata:
key: e0ac2284-8d30-4100-ae23-f85f9574868b
errors:
- error_key: value
category: invalid_attribute_value
message: SUI Tax Rate must be between 0.00% and 9.825%
company_cannot_enable_contractor_only:
errors:
- error_key: contractor_only
category: invalid_attribute_value
message: Contractor only cannot be enabled for existing companies.
company_missing_parameter:
errors:
- error_key: base
category: missing_parameter
message: contractor_only is required.
starting_after_uuid_invalid:
errors:
- error_key: starting_after_uuid
category: invalid_attribute_value
message: Parameter 'starting_after_uuid' does not correspond to a valid event.
resource_uuid_invalid:
errors:
- error_key: resource_uuid
category: invalid_attribute_value
message: Parameter 'resource_uuid' does not correspond to a valid resource.
payroll_gross_up_invalid_net_pay:
errors:
- error_key: net_pay
category: invalid_attribute_value
message: Net pay must be a number.
payroll_accruing_hours_invalid:
errors:
- error_key: base
category: invalid_attribute_value
message: Hours cannot be negative.
payroll_cannot_cancel:
errors:
- error_key: base
category: invalid_operation
message: Payroll cannot be canceled.
frozen_payroll:
errors:
- error_key: base
category: invalid_operation
message: This payroll has already been processed. Its data cannot be updated or altered.
frozen_payroll_processing:
errors:
- error_key: base
category: invalid_operation
message: This payroll is being processed and cannot be updated at this time.
unmodifiable_payroll_type:
errors:
- error_key: base
category: invalid_operation
message: This type of payroll cannot be modified or processed. It is reserved for system processes.
invalid_employee_uuids_format:
errors:
- error_key: employee_uuids
category: invalid_attribute_value
message: Parameter employee_uuids must be an array.
maximum_employee_uuids_surpassed:
errors:
- error_key: employee_uuids
category: invalid_attribute_value
message: Exceeded maximum of 100 for lookup.
maximum_off_roster_additions_surpassed:
errors:
- error_key: employee_uuids
category: invalid_attribute_value
message: Cannot add more than 25 new employees to the payroll per call.
invalid_employee_uuid:
errors:
- error_key: employee_uuids
category: invalid_attribute_value
message: Invalid Employee UUID(s).
metadata:
entity_type: Employee
entity_uuid: invalid-uuid-123
payroll_blocker_missing_bank_info:
errors:
- error_key: base
category: payroll_blocker
message: Company must have a bank account in order to run payroll.
metadata:
key: missing_bank_info
payroll_blocker_missing_employee_setup:
errors:
- error_key: base
category: payroll_blocker
message: Company must add employees in order to run payroll.
metadata:
key: missing_employee_setup
payroll_blocker_missing_federal_tax_setup:
errors:
- error_key: base
category: payroll_blocker
message: Company must complete federal tax setup in order to run payroll.
metadata:
key: missing_federal_tax_setup
payroll_blocker_missing_bank_verification:
errors:
- error_key: base
category: payroll_blocker
message: Company bank account must be verified in order to run payroll.
metadata:
key: missing_bank_verification
payroll_blocker_suspended:
errors:
- error_key: base
category: payroll_blocker
message: Company is suspended and cannot run payroll.
metadata:
key: suspended
submission_blocker_missing_selection:
errors:
- error_key: submission_blockers
category: invalid_attribute_value
message: Submission blockers selections required
submission_blocker_invalid_option:
errors:
- error_key: submission_blockers
category: nested_errors
metadata:
blocker_type: fast_ach_threshold_exceeded
errors:
- error_key: selected_option
category: invalid_attribute_value
message: Selection is not available to resolve Fast ACH Threshold Exceeded. Please choose one of Wire In, Move To Four Day
invalid_version:
errors:
- error_key: base
category: invalid_resource_version
message: You are attempting to update a resource using an out-of-date version.
signatory_email_required:
errors:
- error_key: email
category: invalid_attribute_value
message: Email is required
signatory_company_already_has_signatory:
errors:
- error_key: base
category: invalid_operation
message: Cannot have more than one signatory in a company. Please remove the existing signatory before adding a new one.
mixed_disbursement_errors:
errors:
- error_key: disbursements
category: nested_errors
metadata:
contractor_payment_uuid: invalid-uuid-1
errors:
- error_key: contractor_payment_uuid
category: not_found
message: Disbursement not found.
- error_key: disbursements
category: nested_errors
metadata:
contractor_payment_uuid: d0dfa222-ad08-4ea7-a06a-717688c3b179
errors:
- error_key: payment_method
category: invalid_attribute_value
message: 'Payment method must be one of: Direct Deposit, Check.'
- error_key: payment_status
category: invalid_attribute_value
message: Payment status is not valid for payment method 'InvalidMethod'.
not_found:
errors:
- error_key: request
category: not_found
message: The requested resource was not found.
finish_onboarding_incomplete:
errors:
- error_key: base
category: invalid_operation
message: Company is not ready to exit onboarding.
federal_tax_invalid_ein:
errors:
- error_key: ein
category: invalid_attribute_value
message: EIN must be 9 digits
federal_tax_ein_cannot_change:
errors:
- error_key: ein
category: invalid_attribute_value
message: EIN cannot be updated after company has been onboarded. Please contact support to update the EIN.
federal_tax_legal_name_cannot_change:
errors:
- error_key: legal_name
category: invalid_attribute_value
message: Legal name cannot be updated after company has been onboarded. Please contact support to update the legal name.
ein_collision:
errors:
- error_key: ein
category: invalid_attribute_value
message: EIN is already in use
company_location_validation:
errors:
- error_key: street_1
category: invalid_attribute_value
message: Must include a street address
- error_key: city
category: invalid_attribute_value
message: Must include a city
- error_key: state
category: invalid_attribute_value
message: State is in the wrong format
- error_key: zip
category: invalid_attribute_value
message: Please enter a valid zip code (e.g. 12345).
- error_key: phone_number
category: invalid_attribute_value
message: Phone number must be 10 digits
conflict:
errors:
- error_key: request
category: duplicate_operation
message: A resource with these attributes already exists.
invalid_parameter:
errors:
- error_key: request
category: invalid_parameter
message: The provided parameter is invalid or missing.
invalid_sort_by:
errors:
- error_key: sort_by
category: invalid_parameter
message: Invalid sort order or direction.
flow_invalid_entity:
errors:
- error_key: entity_type
category: invalid_attribute_value
message: Invalid flow entity
- error_key: entity_uuid
category: invalid_attribute_value
message: Invalid flow entity
flow_nested_options_errors:
errors:
- error_key: options
category: nested_errors
metadata:
flow_type: company_forms
errors:
- error_key: form_types
category: invalid_attribute_value
message: Supplied value 'invalid' contains no permitted values
basic:
errors:
- error_key: base
category: payroll_blocker
message: Company must complete all onboarding requirements in order to run payroll.
metadata:
key: needs_onboarding
contractor_already_onboarded:
errors:
- error_key: onboarding_status
category: invalid_attribute_value
message: Contractor is already fully onboarded
contractor_is_active_pending_dismissal:
errors:
- error_key: is_active
category: invalid_attribute_value
message: Cannot deactivate while a dismissal is scheduled. Use the cancel termination endpoint to remove the pending dismissal first.
contractor_is_active_pending_dismissal_uncancelable:
errors:
- error_key: is_active
category: invalid_attribute_value
message: Cannot deactivate while a non-cancelable dismissal is in progress. The dismissal has already been processed.
contractor_is_active_pending_rehire:
errors:
- error_key: is_active
category: invalid_attribute_value
message: Cannot reactivate while a rehire is scheduled. Use the cancel rehire endpoint to remove the pending rehire first.
contractor_rehire_start_date_required:
errors:
- error_key: start_date
category: invalid_attribute_value
message: Start date is required
contractor_rehire_no_pending:
errors:
- error_key: base
category: invalid_operation
message: No pending rehire to cancel
contractor_termination_end_date_required:
errors:
- error_key: end_date
category: invalid_attribute_value
message: End date is required
contractor_termination_no_pending_dismissal:
errors:
- error_key: base
category: invalid_operation
message: No pending dismissal to cancel
contractor_address_invalid_attribute:
errors:
- error_key: street_1
category: invalid_attribute_value
message: Must include a street address
contractor_payment_invalid_wage:
errors:
- error_key: wage
category: invalid_attribute_value
message: Wage must be greater than or equal to 0.
contractor_payment_cannot_cancel:
errors:
- error_key: base
category: invalid_operation
message: Payment has already been processed and cannot be cancelled. Contact support directly.
contractor_payment_should_not_be_funded:
errors:
- error_key: base
category: invalid_operation
message: This payment should not be funded.
contractor_payments_preview_no_payments:
errors:
- error_key: contractor_payments
category: invalid_attribute_value
message: Please enter a contractor payment before continuing.
ytd_benefit_amounts_invalid_tax_year:
errors:
- error_key: tax_year
category: invalid_attribute_value
message: Tax year must be greater than or equal to 2000
printable_payroll_checks_invalid_printing_format:
errors:
- error_key: base
category: invalid_attribute_value
message: Invalid printing_format 'bad_name', only 'top' and 'bottom' supported
recovery_case_not_redebitable:
errors:
- error_key: base
category: invalid_operation
message: Unable to initiate another redebit at this time. Please contact support.
recovery_case_exceeded_retries:
errors:
- error_key: base
category: invalid_operation
message: You exceeded the maximum redebit attempts. Please contact support.
report_invalid_columns:
errors:
- error_key: columns
category: invalid_attribute_value
message: 'Invalid column(s): unexpected_column'
general_ledger_invalid_aggregation:
errors:
- error_key: aggregation
category: invalid_attribute_value
message: Invalid aggregation option.
report_template_invalid_report_type:
errors:
- error_key: base
category: invalid_operation
message: Invalid report type
time_sheet_invalid_entries:
errors:
- error_key: entries
category: invalid_attribute_value
message: Entries are invalid
time_sheet_invalid_attribute:
errors:
- error_key: time_zone
category: invalid_attribute_value
message: Time zone is invalid
time_sheet_version_invalid:
errors:
- error_key: version
category: invalid_attribute_value
message: Version 'somefakeversion' does not match the latest version of this object
time_off_request_cannot_delete:
errors:
- error_key: base
category: invalid_operation
message: This time off request cannot be deleted.
time_off_request_cannot_approve:
errors:
- error_key: base
category: invalid_operation
message: Cannot approve this request.
time_off_request_missing_employer_note:
errors:
- error_key: employer_note
category: missing_parameter
message: "'employer_note' is required"
time_off_request_invalid_status_filter:
errors:
- error_key: status
category: invalid_parameter
message: 'Parameter `status` contains invalid value(s): cancelled. Allowed values: pending, approved, declined, consumed.'
resource:
errors:
- error_key: first_name
category: invalid_attribute_value
message: First name is required
- error_key: date_of_birth
category: invalid_attribute_value
message: Date of birth is not a valid date
nested:
errors:
- error_key: contractor_payments
category: nested_errors
metadata:
contractor_uuid: 72ae4617-daa9-4ed7-85e0-18ed5d0ee835
errors:
- error_key: hours
category: invalid_attribute_value
message: Ella Fitzgerald is paid fixed wage and hours cannot be set on a contractor payment
- error_key: contractor_payments
category: nested_errors
metadata:
contractor_uuid: 2d7bf62c-babf-4a12-8292-340e2d9cab28
errors:
- error_key: wage
category: invalid_attribute_value
message: Isaiah Berlin is paid hourly and wage cannot be set on a contractor payment
compensation_invalid_rate:
errors:
- error_key: rate
category: invalid_attribute_value
message: Rate is not a valid number
compensation_invalid_payment_unit:
errors:
- error_key: payment_unit
category: invalid_attribute_value
message: Payment unit must be one of Hour, Week, Month, or Year
compensation_already_processed:
errors:
- error_key: base
category: invalid_operation
message: Compensation has already been processed on payroll.
termination_already_terminated:
errors:
- error_key: base
category: invalid_operation
message: Employee may only have one termination
termination_invalid_effective_date:
errors:
- error_key: effective_date
category: invalid_attribute_value
message: Effective date is not a valid date
termination_effective_date_required:
errors:
- error_key: effective_date
category: invalid_attribute_value
message: Effective date is required
termination_already_in_effect:
errors:
- error_key: base
category: invalid_operation
message: Employee has already been terminated
termination_payroll_exists:
errors:
- error_key: base
category: invalid_operation
message: Cannot cancel a termination with a termination payroll
termination_rehired:
errors:
- error_key: base
category: invalid_operation
message: Unable to modify a termination with a future rehire.
job_title_required:
errors:
- error_key: title
category: invalid_attribute_value
message: Title is required
job_primary_cannot_delete:
errors:
- error_key: base
category: invalid_operation
message: Employee's primary job cannot be set to inactive.
job_exempt_multiple_jobs:
errors:
- error_key: base
category: invalid_operation
message: Only hourly employees can have multiple jobs.
job_invalid_hire_date:
errors:
- error_key: hire_date
category: invalid_attribute_value
message: Hire date is invalid
job_duplicate_title:
errors:
- error_key: title
category: invalid_attribute_value
message: Employee cannot have two jobs with the same title.
i9_authorization_unneeded_document_params:
errors:
- error_key: expiration_date
category: invalid_attribute_value
message: For the submitted authorization status, expiration date is not allowed
- error_key: document_type
category: invalid_attribute_value
message: For the submitted authorization status, document type is not allowed
i9_authorization_not_self_onboarding:
errors:
- error_key: base
category: invalid_operation
message: Employee is not self-onboarding.
i9_authorization_employee_already_signed:
errors:
- error_key: base
category: invalid_operation
message: Employee has already signed the form.
i9_employer_sign_invalid_params:
errors:
- error_key: signed_by_ip_address
category: invalid_attribute_value
message: Signed by IP address is invalid
- error_key: signer_title
category: invalid_attribute_value
message: Signer title is required
- error_key: agree
category: invalid_attribute_value
message: You must agree to sign electronically
- error_key: signature_text
category: invalid_attribute_value
message: Signature text is required
i9_employer_sign_employee_not_signed:
errors:
- error_key: base
category: invalid_operation
message: Employee has not signed I-9
i9_employer_sign_already_signed:
errors:
- error_key: base
category: invalid_operation
message: I-9 has already been signed by the employer
i9_documents_already_signed:
errors:
- error_key: base
category: invalid_operation
message: I-9 cannot be updated as it has already been signed by the employer
i9_documents_invalid_params:
errors:
- error_key: documents
category: nested_errors
metadata:
document_type: invalid_type
errors:
- error_key: document_type
category: invalid_attribute_value
message: Document type's value is not included in the list
- error_key: document_title
category: invalid_attribute_value
message: Document title's value is not included in the list
i9_documents_not_array:
errors:
- error_key: base
category: invalid_operation
message: Parameter `documents` must be an array
company_benefit_missing_benefit_type:
errors:
- error_key: base
category: missing_parameter
message: benefit_type is required.
company_benefit_invalid_benefit_type:
errors:
- error_key: benefit_type
category: invalid_attribute_value
message: Benefit type does not correspond with a supported benefit
company_benefit_missing_description:
errors:
- error_key: description
category: invalid_attribute_value
message: Description is required
company_benefit_cannot_disable:
errors:
- error_key: base
category: invalid_operation
message: Company benefit cannot be disabled while employees are still enrolled
company_benefit_cannot_change_type:
errors:
- error_key: benefit_type
category: invalid_attribute_value
message: The associated benefit cannot be changed
company_benefit_invalid_contribution_exclusions:
errors:
- error_key: contribution_exclusions
category: invalid_attribute_value
message: Expected contribution_exclusions array of hashes.
employee_benefits_invalid_parameter:
errors:
- error_key: employee_benefits
category: invalid_parameter
message: Missing or invalid parameter 'employee_benefits'.
time_off_activity_invalid_type:
errors:
- error_key: base
category: invalid_parameter
message: 'Expected one of: vacation, sick'
employee_benefit_negative_company_contribution:
errors:
- error_key: company_contribution
category: invalid_attribute_value
message: Company contribution must be greater than or equal to 0
employee_benefit_active_requires_contribution_or_deduction:
errors:
- error_key: base
category: invalid_operation
message: An active employee benefit must have either a company contribution or an employee deduction
employee_benefit_invalid_effective_date:
errors:
- error_key: effective_date
category: invalid_attribute_value
message: Effective date is not a valid date
employee_benefit_duplicate_type:
errors:
- error_key: base
category: invalid_operation
message: Employee cannot have more than one 401(k)
employee_benefit_invalid_limit_option:
errors:
- error_key: limit_option
category: invalid_attribute_value
message: Limit option must be one of "Family", "Individual"
employee_benefit_coverage_amount_only_for_gtl:
errors:
- error_key: coverage_amount
category: invalid_attribute_value
message: Coverage amount is only applicable for group term life employee benefit.
employee_benefit_destroy_invalid:
errors:
- error_key: benefit_type
category: invalid_parameter
message: This application is not permitted to modify benefits of type 100 (Other (taxable)).
company_benefit_has_employees:
errors:
- error_key: base
category: invalid_operation
message: There are employees associated with this benefit, please remove these employees before deleting the benefit.
company_benefit_partnered:
errors:
- error_key: base
category: invalid_operation
message: This benefit is managed by the partner and cannot be deleted.
rehire_delete_already_effective:
errors:
- error_key: base
category: invalid_operation
message: Unable to delete the rehire that is already effective, please terminate the employee instead.
rehire_not_terminated:
errors:
- error_key: effective_date
category: invalid_attribute_value
message: Cannot rehire if employee has not been terminated
rehire_missing_required_fields:
errors:
- error_key: effective_date
category: invalid_attribute_value
message: Effective date is required
- error_key: work_location_uuid
category: invalid_attribute_value
message: Work location not found
- error_key: file_new_hire_report
category: invalid_attribute_value
message: File new hire report is required
rehire_invalid_work_location:
errors:
- error_key: work_location_uuid
category: invalid_attribute_value
message: Work location not found
rehire_no_future_employment:
errors:
- error_key: base
category: invalid_operation
message: The employee does not have any future employment, please rehire the employee first.
earning_type_missing_name:
errors:
- error_key: name
category: invalid_attribute_value
message: Name is required
earning_type_duplicate_name:
errors:
- error_key: name
category: invalid_attribute_value
message: There is already an earning called Bonus
earning_type_invalid_category:
errors:
- error_key: category
category: invalid_attribute_value
message: Category is not valid
earning_type_included_in_overtime_pay_invalid_category:
errors:
- error_key: included_in_overtime_pay
category: invalid_attribute_value
message: Category must be 'Other' to set included_in_overtime_pay
earning_type_category_not_modifiable:
errors:
- error_key: category
category: invalid_attribute_value
message: Category is not modifiable
earning_type_included_in_overtime_pay_not_modifiable:
errors:
- error_key: included_in_overtime_pay
category: invalid_attribute_value
message: Included in overtime pay is not modifiable
department_duplicate_title:
errors:
- error_key: title
category: invalid_attribute_value
message: Department name has already been taken.
department_has_active_members:
errors:
- error_key: base
category: invalid_operation
message: You cannot delete a department that has active team members. Please remove them first.
department_invalid_employees:
errors:
- error_key: employees
category: invalid_attribute_value
message: Employees must be valid
- error_key: contractors
category: invalid_attribute_value
message: Contractors must be valid
form_already_signed:
errors:
- error_key: base
category: invalid_operation
message: This form has already been signed
form_no_signature_required:
errors:
- error_key: base
category: invalid_operation
message: This form does not require a signature
form_invalid_ip_address:
errors:
- error_key: signed_by_ip_address
category: invalid_attribute_value
message: Signed by ip address is invalid
form_preparer_not_supported:
errors:
- error_key: base
category: invalid_operation
message: This form does not allow preparer information
invoice_period_invalid_format:
errors:
- error_key: base
category: invalid_parameter
message: Invalid invoice_period param format, should be 'YYYY-MM'
invoice_period_future:
errors:
- error_key: base
category: invalid_parameter
message: Invalid invoice_period param, cannot be a future invoice period
invoice_company_uuids_max_exceeded:
errors:
- error_key: base
category: invalid_parameter
message: Invalid company_uuids passed, max of 50
wire_in_request_invalid_date_sent:
errors:
- error_key: date_sent
category: invalid_attribute_value
message: Date sent must be a valid date
wire_in_request_missing_bank_name:
errors:
- error_key: bank_name
category: invalid_attribute_value
message: Bank name must be present
wire_in_request_invalid_amount_sent:
errors:
- error_key: amount_sent
category: invalid_attribute_value
message: Amount sent must be a number
wire_in_request_additional_notes_too_long:
errors:
- error_key: additional_notes
category: invalid_attribute_value
message: Additional notes must be less than 255 characters
wire_in_request_not_awaiting_funds:
errors:
- error_key: base
category: invalid_operation
message: Wire in request status must be awaiting funds
external_payroll_missing_check_date:
errors:
- error_key: check_date
category: invalid_attribute_value
message: Check date is required
external_payroll_missing_payment_period_dates:
errors:
- error_key: payment_period_start_date
category: invalid_attribute_value
message: Payment period start date is required
- error_key: payment_period_end_date
category: invalid_attribute_value
message: Payment period end date is required
external_payroll_net_pay_less_than_zero:
errors:
- error_key: base
category: invalid_attribute_value
message: Net pay less than zero for one or more external payroll items
external_payroll_invalid_payroll_item:
errors:
- error_key: base
category: invalid_operation
message: Invalid payload or parameters
external_payrolls_locked:
errors:
- error_key: base
category: invalid_operation
message: External Payrolls have already been finalized or a payroll has already been processed.
employee_bank_account_destroy_invalid:
errors:
- error_key: base
category: invalid_attribute_value
message: Cannot delete this bank account.
external_payroll_invalid_liability_selection:
errors:
- error_key: tax_id
category: invalid_attribute_value
message: Tax is required
invalid_tax_liability_selection:
errors:
- error_key: tax_id
category: invalid_attribute_value
message: Tax is required
external_payroll_invalid_tax_liability_selections:
errors:
- error_key: tax_id
category: invalid_attribute_value
message: Tax liability selections are not valid
member_portal_already_complete:
errors:
- error_key: base
category: invalid_operation
message: Member has already complete member portal registration.
member_portal_not_eligible:
errors:
- error_key: base
category: invalid_operation
message: This member is not eligible for a member portal invitation in their current onboarding status (admin_onboarding_incomplete). Invite the member to self-onboard before sending a member portal invitation.
member_portal_member_info_incomplete_missing_start_date:
errors:
- error_key: base
category: invalid_operation
message: This member has not completed onboarding. Cannot proceed without member's job start date.
member_portal_member_info_incomplete_missing_email:
errors:
- error_key: base
category: invalid_operation
message: This member has not completed onboarding. Cannot proceed without an email.
member_portal_already_cancelled:
errors:
- error_key: base
category: invalid_operation
message: This invitation has already been cancelled.
member_portal_not_cancellable:
errors:
- error_key: base
category: invalid_operation
message: This invitation is no longer cancellable.
x-speakeasy-name-override: UnprocessableEntityError
Entity-Error-Object:
type: object
required:
- error_key
- category
properties:
error_key:
type: string
description: Specifies where the error occurs. Typically this key identifies the attribute/parameter related to the error.
category:
type: string
description: Specifies the type of error. The category provides error groupings and can be used to build custom error handling in your integration. If category is `nested_errors`, the object will contain a nested `errors` property with entity errors.
message:
type: string
description: Provides details about the error - generally this message can be surfaced to an end user.
metadata:
type: object
description: Contains relevant data to identify the resource in question when applicable. For example, to identify an entity `entity_type` and `entity_uuid` will be provided.
oneOf:
- "$ref": "#/components/schemas/Metadata-With-Multiple-Entities"
- "$ref": "#/components/schemas/Metadata-With-One-Entity"
errors:
type: array
description: Will only exist if category is `nested_errors`. It is possible to have multiple levels of nested errors.
items:
"$ref": "#/components/schemas/Entity-Error-Object"
Warning-Object:
type: object
properties:
error_key:
type: string
description: Specifies where the warning occurs. Typically identifies the attribute or parameter related to the warning.
category:
type: string
description: Specifies the type of warning. Can be used to build custom warning handling.
message:
type: string
description: Provides details about the warning. The message can be surfaced directly to the end user.
Metadata-With-One-Entity:
type: object
description: single entity
additionalProperties: true
properties:
entity_type:
type: string
description: Name of the entity that the error corresponds to.
entity_uuid:
type: string
description: Unique identifier for the entity.
valid_from:
type:
- string
- 'null'
valid_up_to:
type:
- string
- 'null'
key:
type:
- string
- 'null'
state:
type:
- string
- 'null'
Metadata-With-Multiple-Entities:
type: object
description: multiple entities
required:
- entities
properties:
entities:
type: array
items:
"$ref": "#/components/schemas/Metadata-With-One-Entity"
Employee:
title: Employee
type: object
description: The representation of an employee in Gusto.
x-examples:
success_status:
uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
first_name: Boaty
middle_initial:
last_name: Koss
email: keena.feest@kiehn.co.uk
company_uuid: e904cc79-818a-4da8-9d37-0be0a86fdda8
manager_uuid:
version: a5cec1f1c0135feb3e76ca6ea3c46176
current_employment_status: full_time
onboarding_status: onboarding_completed
preferred_first_name:
department_uuid:
employee_code: 46f036
payment_method: Direct Deposit
department:
terminated: false
two_percent_shareholder: false
onboarded: true
historical: false
has_ssn: true
onboarding_documents_config:
uuid:
i9_document: false
jobs:
- uuid: bc875f9d-adc5-40f6-99db-ed8470bda25f
version: 863bcd01c51fcfa2468d604cffec7413
employee_uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
current_compensation_uuid: 2ec164d0-808b-446c-8120-8cfb500945d0
payment_unit: Year
primary: true
two_percent_shareholder: false
state_wc_covered:
state_wc_class_code:
title: ''
compensations:
- uuid: 2ec164d0-808b-446c-8120-8cfb500945d0
employee_uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
version: db7bfb49a4f0893432cb562311bfcad9
payment_unit: Year
flsa_status: Exempt
adjust_for_minimum_wage: false
minimum_wages: []
job_uuid: bc875f9d-adc5-40f6-99db-ed8470bda25f
effective_date: '2025-06-09'
rate: '80000.00'
rate: '80000.00'
hire_date: '2024-06-09'
eligible_paid_time_off: []
terminations: []
garnishments: []
date_of_birth: '2005-06-09'
ssn: ''
phone:
work_email:
member_portal_invitation_status:
status: sent
token_expired: false
welcome_email_sent_at: '2024-01-15T14:30:00Z'
last_password_resent_at:
partner_portal_invitation_sent: true
properties:
uuid:
type: string
description: The UUID of the employee in Gusto.
readOnly: true
first_name:
type: string
middle_initial:
type:
- string
- 'null'
last_name:
type: string
email:
type:
- string
- 'null'
description: The personal email address of the employee. This is provided to support syncing users between our system and yours. You may not use this email address for any other purpose (e.g. marketing).
company_uuid:
type: string
description: The UUID of the company the employee is employed by.
readOnly: true
manager_uuid:
type:
- string
- 'null'
description: The UUID of the employee's manager.
readOnly: true
version:
type: string
description: The current version of the employee. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
readOnly: true
department:
type:
- string
- 'null'
description: The employee's department in the company.
readOnly: true
terminated:
type: boolean
description: Whether the employee is terminated.
readOnly: true
two_percent_shareholder:
type:
- boolean
- 'null'
description: Whether the employee is a two percent shareholder of the company. This field only applies to companies with an S-Corp entity type.
work_email:
type:
- string
- 'null'
description: The work email address of the employee. This is provided to support syncing users between our system and yours. You may not use this email address for any other purpose (e.g. marketing).
onboarded:
type: boolean
description: Whether the employee has completed onboarding.
readOnly: true
onboarding_status:
description: The current onboarding status of the employee
anyOf:
- type: string
enum:
- onboarding_completed
- admin_onboarding_incomplete
- self_onboarding_pending_invite
- self_onboarding_invited
- self_onboarding_invited_started
- self_onboarding_invited_overdue
- self_onboarding_completed_by_employee
- self_onboarding_awaiting_admin_review
- type: 'null'
readOnly: true
onboarding_documents_config:
type: object
description: Configuration for an employee onboarding documents during onboarding
properties:
uuid:
type:
- string
- 'null'
description: The UUID of the onboarding documents config
readOnly: true
i9_document:
type: boolean
description: Whether to include Form I-9 for an employee during onboarding
readOnly: true
jobs:
type: array
items:
"$ref": "#/components/schemas/Job"
eligible_paid_time_off:
type: array
items:
"$ref": "#/components/schemas/Paid-Time-Off"
terminations:
type: array
items:
"$ref": "#/components/schemas/Termination"
garnishments:
type: array
items:
"$ref": "#/components/schemas/Garnishment"
custom_fields:
type: array
description: Custom fields are only included for the employee if the include param has the custom_fields value set
items:
"$ref": "#/components/schemas/Employee-Custom-Field"
date_of_birth:
type:
- string
- 'null'
readOnly: true
has_ssn:
type: boolean
description: Indicates whether the employee has an SSN in Gusto.
ssn:
type: string
description: Deprecated. This field always returns an empty string.
phone:
type:
- string
- 'null'
preferred_first_name:
type:
- string
- 'null'
description: ''
payment_method:
type: string
description: The employee's payment method
enum:
- Direct Deposit
- Check
default: Check
nullable: false
current_employment_status:
anyOf:
- type: string
enum:
- full_time
- part_time_under_twenty_hours
- part_time_twenty_plus_hours
- variable
- seasonal
- type: 'null'
description: 'The current employment status of the employee. Full-time employees work 30+ hours per week. Part-time employees are split into two groups: those that work 20-29 hours a week, and those that work under 20 hours a week. Variable employees have hours that vary each week. Seasonal employees are hired for 6 months of the year or less.'
readOnly: true
historical:
type: boolean
nullable: false
employee_code:
type: string
description: The short format code of the employee
nullable: false
readOnly: true
department_uuid:
type:
- string
- 'null'
description: The UUID of the department the employee is under
title:
type: string
nullable: false
hired_at:
type: string
nullable: false
format: date
description: The date when the employee was hired to the company
hidden_ssn:
type: string
nullable: false
flsa_status:
"$ref": "#/components/schemas/Flsa-Status-Type"
applicable_tax_ids:
type: array
nullable: false
items:
type: number
member_portal_invitation_status:
type:
- object
- 'null'
description: Member portal invitation status information. Only included when the include param has the portal_invitations value set.
properties:
status:
type: string
description: The current status of the member portal invitation.
enum:
- pending
- sent
- verified
- complete
- cancelled
token_expired:
type:
- boolean
- 'null'
description: Whether the invitation token has expired.
welcome_email_sent_at:
type:
- string
- 'null'
format: date-time
description: The date and time when the welcome email was sent.
last_password_resent_at:
type:
- string
- 'null'
format: date-time
description: The date and time when the password reset was last resent.
partner_portal_invitation_sent:
type:
- boolean
- 'null'
description: Whether an external partner portal invitation webhook has been sent for this employee. Only included when the include param has the portal_invitations value set.
required:
- uuid
- first_name
- last_name
readOnly: true
Employee-Show:
title: Employee-Show
description: An employee, with additional fields that are only ever returned on GET requests gated behind the `include` query parameter.
x-examples:
success_status:
uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
first_name: Boaty
middle_initial:
last_name: Koss
email: keena.feest@kiehn.co.uk
company_uuid: e904cc79-818a-4da8-9d37-0be0a86fdda8
manager_uuid:
version: a5cec1f1c0135feb3e76ca6ea3c46176
current_employment_status: full_time
onboarding_status: onboarding_completed
preferred_first_name:
department_uuid:
employee_code: 46f036
payment_method: Direct Deposit
department:
terminated: false
two_percent_shareholder: false
onboarded: true
historical: false
has_ssn: true
onboarding_documents_config:
uuid:
i9_document: false
jobs:
- uuid: bc875f9d-adc5-40f6-99db-ed8470bda25f
version: 863bcd01c51fcfa2468d604cffec7413
employee_uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
current_compensation_uuid: 2ec164d0-808b-446c-8120-8cfb500945d0
payment_unit: Year
primary: true
two_percent_shareholder: false
state_wc_covered:
state_wc_class_code:
title: ''
compensations:
- uuid: 2ec164d0-808b-446c-8120-8cfb500945d0
employee_uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
version: db7bfb49a4f0893432cb562311bfcad9
payment_unit: Year
flsa_status: Exempt
adjust_for_minimum_wage: false
minimum_wages: []
job_uuid: bc875f9d-adc5-40f6-99db-ed8470bda25f
effective_date: '2025-06-09'
rate: '80000.00'
rate: '80000.00'
hire_date: '2024-06-09'
eligible_paid_time_off: []
terminations: []
garnishments: []
date_of_birth: '2005-06-09'
ssn: ''
phone:
work_email:
member_portal_invitation_status:
status: sent
token_expired: false
welcome_email_sent_at: '2024-01-15T14:30:00Z'
last_password_resent_at:
partner_portal_invitation_sent: true
company_name: Acme Consulting
current_home_address:
street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
uuid: sample-uuid-123231
all_home_addresses:
- street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
uuid: sample-uuid-123231
allOf:
- "$ref": "#/components/schemas/Employee"
- type: object
additionalProperties: true
properties:
company_name:
type: string
description: The name of the company the employee is associated with. Only included when the include param has the company_name value set.
current_home_address:
"$ref": "#/components/schemas/Employee-Home-Address"
description: The employee's current home address. Only included when the include param has the current_home_address value set.
all_home_addresses:
type: array
items:
"$ref": "#/components/schemas/Employee-Home-Address"
description: All of the employee's home addresses, past and present. Only included when the include param has the all_home_addresses value set.
readOnly: true
Job:
title: Job
type: object
properties:
uuid:
type: string
description: The UUID of the job.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
employee_uuid:
type: string
description: The UUID of the employee to which the job belongs.
readOnly: true
hire_date:
type: string
readOnly: false
description: The date when the employee was hired or rehired for the job.
title:
type:
- string
- 'null'
readOnly: false
default:
description: The title for the job.
primary:
type: boolean
description: Whether this is the employee's primary job. The value will be set to true unless an existing job exists for the employee.
readOnly: true
rate:
type: string
description: The current compensation rate of the job.
readOnly: true
payment_unit:
type:
- string
- 'null'
description: The payment unit of the current compensation for the job.
readOnly: true
current_compensation_uuid:
type:
- string
- 'null'
description: The UUID of the current compensation of the job. Null when the job has no current compensation.
readOnly: true
two_percent_shareholder:
type: boolean
description: Whether the employee owns at least 2% of the company.
readOnly: false
state_wc_covered:
type:
- boolean
- 'null'
description: Whether this job is eligible for workers' compensation coverage in the state of Washington (WA).
readOnly: false
state_wc_class_code:
type:
- string
- 'null'
description: The risk class code for workers' compensation in Washington state. Please visit [Washington state's Risk Class page](https://www.lni.wa.gov/insurance/rates-risk-classes/risk-classes-for-workers-compensation/risk-class-lookup#/) to learn more.
readOnly: false
compensations:
type: array
items:
"$ref": "#/components/schemas/Compensation"
readOnly: true
location_uuid:
type: string
nullable: false
description: The uuid of the employee's work location.
location:
"$ref": "#/components/schemas/Location"
description: The representation of a job in Gusto.
required:
- uuid
x-examples:
example:
uuid: d6d1035e-8a21-4e1d-89d5-fa894f9aff97
version: gr78930htutrz444kuytr3s5hgxykuveb523fwl8sir
employee_uuid: 948daac8-4355-4ece-9e2a-229898accb22
hire_date: '2020-01-20'
title: Account Director
primary: true
rate: '78000.00'
payment_unit: Year
current_compensation_uuid: ea8b0b90-1112-4f9d-bb93-bf029bc8537a
two_percent_shareholder: false
state_wc_covered:
state_wc_class_code:
compensations:
- uuid: ea8b0b90-1112-4f9d-bb93-bf029bc8537a
version: 98jr3289h3298hr9329gf9egskt3tjaj
job_uuid: d6d1035e-8a21-4e1d-89d5-fa894f9aff97
employee_uuid: 948daac8-4355-4ece-9e2a-229898accb22
rate: '78000.00'
payment_unit: Year
flsa_status: Exempt
effective_date: '2020-01-20'
adjust_for_minimum_wage: false
minimum_wages: []
secondary_job:
uuid: a1b2c3d4-5678-9012-abcd-ef1234567890
version: hj29fh3298hf9832hf98h32f89h32f89h32f9832
employee_uuid: 948daac8-4355-4ece-9e2a-229898accb22
hire_date: '2020-01-20'
title: Senior Consultant
primary: false
rate: '25.00'
payment_unit: Hour
current_compensation_uuid: b2c3d4e5-6789-0123-bcde-f12345678901
two_percent_shareholder: false
state_wc_covered:
state_wc_class_code:
compensations:
- uuid: b2c3d4e5-6789-0123-bcde-f12345678901
version: 93jr2398h23r9832rg9832rg98ewrg98e
job_uuid: a1b2c3d4-5678-9012-abcd-ef1234567890
employee_uuid: 948daac8-4355-4ece-9e2a-229898accb22
rate: '25.00'
payment_unit: Hour
flsa_status: Nonexempt
effective_date: '2020-01-20'
adjust_for_minimum_wage: false
minimum_wages: []
Jobs-Body:
type: object
properties:
title:
type:
- string
- 'null'
description: The job title.
example: Regional Manager
hire_date:
type: string
description: The date when the employee was hired or rehired for the job.
example: '2020-12-21'
two_percent_shareholder:
type: boolean
description: Whether the employee owns at least 2% of the company.
state_wc_covered:
type:
- boolean
- 'null'
description: Whether this job is eligible for workers' compensation coverage in the state of Washington (WA).
state_wc_class_code:
type:
- string
- 'null'
description: The risk class code for workers' compensation in Washington state. Please visit [Washington state's Risk Class page](https://www.lni.wa.gov/insurance/rates-risk-classes/risk-classes-for-workers-compensation/risk-class-lookup#/) to learn more.
Jobs-Create-Request-Body:
description: Request body for creating a job.
type: object
required:
- title
- hire_date
allOf:
- "$ref": "#/components/schemas/Jobs-Body"
x-examples:
create_job:
title: Regional Manager
hire_date: '2020-12-21'
two_percent_shareholder: false
Jobs-Update-Request-Body:
description: Request body for updating a job.
type: object
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Jobs-Body"
x-examples:
update_job:
version: gr78930htutrz444kuytr3s5hgxykuveb523fwl8sir
title: Regional Manager
hire_date: '2020-12-21'
Compensation:
type: object
description: The representation of compensation in Gusto.
properties:
uuid:
type: string
description: The UUID of the compensation in Gusto.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
job_uuid:
type: string
description: The UUID of the job to which the compensation belongs.
readOnly: true
employee_uuid:
type: string
description: The UUID of the employee to which the compensation belongs.
readOnly: true
rate:
type: string
readOnly: false
description: The dollar amount paid per payment unit.
payment_unit:
type: string
readOnly: false
description: The unit accompanying the compensation rate. If the employee is an owner, rate should be 'Paycheck'.
enum:
- Hour
- Week
- Month
- Year
- Paycheck
flsa_status:
"$ref": "#/components/schemas/Flsa-Status-Type"
title:
type: string
description: The job title for this compensation.
effective_date:
type: string
readOnly: false
description: The effective date for this compensation. For the first compensation, this defaults to the job's hire date.
adjust_for_minimum_wage:
type: boolean
description: Indicates if the compensation could be adjusted to minimum wage during payroll calculation.
readOnly: true
minimum_wages:
type: array
readOnly: false
description: The minimum wages associated with the compensation.
items:
type: object
properties:
uuid:
type: string
description: The UUID of the minimum wage.
wage:
type: string
description: The wage amount.
effective_date:
type: string
description: The effective date of the minimum wage.
required:
- uuid
x-examples:
success_status:
uuid: db4d41e5-813c-477e-bfae-38da2ae5e7a3
version: 56d00c178bc7393b2a206ed6a86afcb4
job_uuid: c1fdb417-c34a-43a7-92f3-5e6c20c1d7a4
employee_uuid: a7e8f9bc-0d12-4e56-b789-012345678901
rate: '70000.00'
payment_unit: Year
flsa_status: Exempt
effective_date: '2023-01-01'
adjust_for_minimum_wage: false
minimum_wages: []
title: Software Engineer
hourly_compensation:
uuid: e5f6a7b8-c9d0-1234-e5f6-a7b8c9d01234
version: 98b7a6c5d4e3f2a1b0c9d8e7f6a5b4c3
job_uuid: d2e5f8a1-b4c7-4d90-a3e6-f9b2c5d8e1a4
employee_uuid: b8f9a0bc-1e23-4f67-c890-123456789012
rate: '25.00'
payment_unit: Hour
flsa_status: Nonexempt
effective_date: '2023-01-01'
adjust_for_minimum_wage: false
minimum_wages: []
title: Associate
minimum_wage_adjusted:
uuid: a4d9ba9c-32cc-4cc1-a5bc-6ef4cd653e7a
version: cc59bd3879d655fb940a1f6b675f2ad9
job_uuid: d8f8fbe7-496d-4b69-86f0-1e2d1b73a086
rate: '5.00'
payment_unit: Hour
flsa_status: Nonexempt
effective_date: '2018-12-11'
adjust_for_minimum_wage: true
minimum_wages:
- uuid: edeea5af-ecd6-4b1c-b5de-5cff2d302738
wage: '7.25'
effective_date: '2018-12-11'
Compensations-Body:
type: object
properties:
rate:
type: string
description: The dollar amount paid per payment unit.
example: '70000.00'
payment_unit:
type: string
description: The unit accompanying the compensation rate. If the employee is an owner, rate should be 'Paycheck'.
enum:
- Hour
- Week
- Month
- Year
- Paycheck
example: Year
flsa_status:
"$ref": "#/components/schemas/Flsa-Status-Type"
effective_date:
type: string
description: The effective date for this compensation.
example: '2023-01-01'
title:
type: string
description: The job title for this compensation.
example: Software Engineer
adjust_for_minimum_wage:
type: boolean
description: Whether the compensation should be adjusted to minimum wage during payroll calculation.
minimum_wages:
type: array
items:
type: object
properties:
uuid:
type: string
description: The UUID of the minimum wage.
Compensations-Request-Body:
description: Request body for creating a compensation.
type: object
required:
- rate
- payment_unit
- flsa_status
allOf:
- "$ref": "#/components/schemas/Compensations-Body"
x-examples:
create_compensation:
rate: '70000.00'
payment_unit: Year
flsa_status: Exempt
effective_date: '2023-01-01'
title: Software Engineer
Compensations-Update-Request-Body:
description: Request body for updating a compensation.
type: object
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Compensations-Body"
x-examples:
update_compensation:
version: b48c46abfed1487b873b442334b3c4ff
rate: '75000.00'
payment_unit: Year
flsa_status: Exempt
effective_date: '2023-01-01'
title: Senior Engineer
Paid-Time-Off:
type: object
description: The representation of paid time off in Gusto.
properties:
name:
description: The name of the paid time off type.
anyOf:
- type: string
enum:
- Vacation Hours
- Sick Hours
- Holiday Hours
- type: 'null'
readOnly: true
policy_name:
type:
- string
- 'null'
description: The name of the time off policy.
readOnly: true
policy_uuid:
type:
- string
- 'null'
description: The UUID of the time off policy.
readOnly: true
accrual_unit:
type:
- string
- 'null'
example: Hour
description: The unit the PTO type is accrued in.
readOnly: true
accrual_rate:
type:
- string
- 'null'
description: The number of accrual units accrued per accrual period.
readOnly: true
accrual_method:
type:
- string
- 'null'
example: unlimited
description: The accrual method of the time off policy
readOnly: true
accrual_period:
type:
- string
- 'null'
example: Year
description: The frequency at which the PTO type is accrued.
readOnly: true
accrual_balance:
type:
- string
- 'null'
description: The number of accrual units accrued.
readOnly: true
maximum_accrual_balance:
type:
- string
- 'null'
description: The maximum number of accrual units allowed. A null value signifies no maximum.
readOnly: true
paid_at_termination:
type: boolean
description: Whether the accrual balance is paid to the employee upon termination.
readOnly: true
Termination:
type: object
description: The representation of a termination in Gusto.
properties:
uuid:
type: string
description: The UUID of the termination object.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
employee_uuid:
type: string
description: The UUID of the employee to which this termination is attached.
readOnly: true
active:
type: boolean
description: Whether the employee's termination has gone into effect.
readOnly: true
cancelable:
type: boolean
description: Whether the employee's termination is cancelable. Cancelable is true if `run_termination_payroll` is false and `effective_date` is in the future.
readOnly: true
effective_date:
type: string
readOnly: false
description: The employee's last day of work.
run_termination_payroll:
type: boolean
readOnly: false
description: If true, the employee should receive their final wages via an off-cycle payroll. If false, they should receive their final wages on their current pay schedule.
required:
- uuid
x-examples:
terminated_employee:
uuid: da441196-43a9-4d23-ad5d-f37ce6bb99c0
employee_uuid: da441196-43a9-4d23-ad5d-f37ce6bb99c0
version: d487dd0b55dfcacdd920ccbdaeafa351
active: true
cancelable: false
effective_date: '2024-01-15'
run_termination_payroll: false
cancelable_termination:
uuid: da441196-43a9-4d23-ad5d-f37ce6bb99c0
employee_uuid: da441196-43a9-4d23-ad5d-f37ce6bb99c0
version: d487dd0b55dfcacdd920ccbdaeafa351
active: false
cancelable: true
effective_date: '2024-06-15'
run_termination_payroll: false
Garnishment:
description: Garnishments, or employee deductions, are fixed amounts or percentages deducted from an employee’s pay. They can be deducted a specific number of times or on a recurring basis. Garnishments can also have maximum deductions on a yearly or per-pay-period bases. Common uses for garnishments are court-ordered payments for child support or back taxes. Some companies provide loans to their employees that are repaid via garnishments.
type: object
properties:
uuid:
type: string
description: The UUID of the garnishment in Gusto.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
employee_uuid:
type: string
description: The UUID of the employee to which this garnishment belongs.
readOnly: true
active:
type: boolean
default: true
description: Whether or not this garnishment is currently active.
amount:
type: string
format: float
readOnly: false
description: The amount of the garnishment. Either a percentage or a fixed dollar amount. Represented as a float, e.g. "8.00".
description:
type: string
readOnly: false
description: The description of the garnishment.
court_ordered:
type: boolean
readOnly: false
description: Whether the garnishment is court ordered.
times:
type:
- integer
- 'null'
readOnly: false
default:
description: The number of times to apply the garnishment. Ignored if recurring is true.
recurring:
type: boolean
readOnly: false
default: false
description: Whether the garnishment should recur indefinitely.
annual_maximum:
format: float
readOnly: false
default:
description: The maximum deduction per annum. A null value indicates no maximum. Represented as a float, e.g. "200.00".
type:
- string
- 'null'
total_amount:
type:
- string
- 'null'
format: float
readOnly: false
default:
description: A maximum total deduction for the lifetime of this garnishment. A null value indicates no maximum.
pay_period_maximum:
type:
- string
- 'null'
format: float
default:
description: The maximum deduction per pay period. A null value indicates no maximum. Represented as a float, e.g. "16.00".
deduct_as_percentage:
type: boolean
readOnly: false
default: false
description: Whether the amount should be treated as a percentage to be deducted per pay period.
garnishment_type:
anyOf:
- type: string
enum:
- child_support
- federal_tax_lien
- state_tax_lien
- student_loan
- creditor_garnishment
- federal_loan
- other_garnishment
- type: 'null'
description: The specific type of garnishment for court ordered garnishments.
child_support:
"$ref": "#/components/schemas/Garnishment-Child-Support"
required:
- uuid
x-examples:
Example:
uuid: 4c7841a2-1363-497e-bc0f-664703c7484f
version: 52b7c567242cb7452e89ba2bc02cb476
employee_uuid: a6b53294-f871-4db2-bbd4-8c3d1fe56440
active: true
amount: '8.00'
description: Company loan to employee
court_ordered: false
times: 5
recurring: false
annual_maximum:
total_amount:
pay_period_maximum: '100.00'
deduct_as_percentage: true
garnishment_type:
child_support:
Create-Example:
uuid: 4c7841a2-1363-497e-bc0f-664703c7484f
version: 52b7c567242cb7452e89ba2bc02cb476
employee_uuid: a6b53294-f871-4db2-bbd4-8c3d1fe56440
active: true
amount: '150.00'
description: Back taxes
court_ordered: true
times:
recurring: true
annual_maximum:
total_amount:
pay_period_maximum:
deduct_as_percentage: false
garnishment_type:
child_support:
Child-Support-Example:
uuid: 4c7841a2-1363-497e-bc0f-664703c7481a
version: 52b7c567242cb7452e89ba2bc02cb383
employee_uuid: a6b53294-f871-4db2-bbd4-8c3d1fe56440
active: true
amount: '40.00'
description: Child support - AZ28319
court_ordered: true
times:
recurring: true
annual_maximum:
total_amount:
pay_period_maximum: '400.00'
deduct_as_percentage: true
garnishment_type: child_support
child_support:
state: AZ
payment_period: Monthly
case_number: AZ28319
order_number:
remittance_number:
fips_code: '04000'
Garnishment-List:
- uuid: 4c7841a2-1363-497e-bc0f-664703c7484f
version: 52b7c567242cb7452e89ba2bc02cb476
employee_uuid: a6b53294-f871-4db2-bbd4-8c3d1fe56440
active: true
amount: '8.00'
description: Company loan to employee
court_ordered: false
times: 5
recurring: false
annual_maximum:
total_amount:
pay_period_maximum: '100.00'
deduct_as_percentage: true
garnishment_type:
child_support:
- uuid: 4c7841a2-1363-497e-bc0f-664703c7481a
version: 52b7c567242cb7452e89ba2bc02cb383
employee_uuid: a6b53294-f871-4db2-bbd4-8c3d1fe56440
active: true
amount: '40.00'
description: Child support - AZ28319
court_ordered: true
times:
recurring: true
annual_maximum:
total_amount:
pay_period_maximum: '400.00'
deduct_as_percentage: true
garnishment_type: child_support
child_support:
state: AZ
payment_period: Monthly
case_number: AZ28319
order_number:
remittance_number:
fips_code: '04000'
Garnishment-Request-Base:
type: object
description: Shared request body properties for creating or updating a garnishment.
properties:
active:
type: boolean
default: true
description: Whether or not this garnishment is currently active.
amount:
type: string
format: float
readOnly: false
description: The amount of the garnishment. Either a percentage or a fixed dollar amount. Represented as a float, e.g. "8.00".
description:
type: string
readOnly: false
description: The description of the garnishment.
court_ordered:
type: boolean
readOnly: false
description: Whether the garnishment is court ordered.
garnishment_type:
description: The specific type of garnishment for court ordered garnishments.
anyOf:
- type: string
enum:
- child_support
- federal_tax_lien
- state_tax_lien
- student_loan
- creditor_garnishment
- federal_loan
- other_garnishment
- type: 'null'
readOnly: false
times:
type:
- integer
- 'null'
readOnly: false
default:
description: The number of times to apply the garnishment. Ignored if recurring is true.
recurring:
type: boolean
readOnly: false
default: false
description: Whether the garnishment should recur indefinitely.
annual_maximum:
format: float
readOnly: false
default:
type:
- string
- 'null'
description: The maximum deduction per annum. A null value indicates no maximum. Represented as a float, e.g. "200.00".
pay_period_maximum:
type:
- string
- 'null'
format: float
default:
description: The maximum deduction per pay period. A null value indicates no maximum. Represented as a float, e.g. "16.00".
deduct_as_percentage:
type: boolean
readOnly: false
default: false
description: Whether the amount should be treated as a percentage to be deducted per pay period.
total_amount:
type:
- string
- 'null'
format: float
readOnly: false
description: A maximum total deduction for the lifetime of this garnishment. A null value indicates no maximum.
child_support:
"$ref": "#/components/schemas/Garnishment-Child-Support"
x-examples:
Example:
amount: '50.00'
annual_maximum: '2500.09'
recurring: true
Deactivate-Example:
active: false
Child-Support-Example:
amount: '40'
child_support:
case_number: ZZZ999
Garnishment-Request:
description: Request body for creating a garnishment.
allOf:
- "$ref": "#/components/schemas/Garnishment-Request-Base"
- type: object
required:
- amount
- court_ordered
x-examples:
Example:
amount: '150.00'
description: Back taxes
court_ordered: true
recurring: true
deduct_as_percentage: false
Child-Support-Example:
court_ordered: true
garnishment_type: child_support
amount: '40'
recurring: true
deduct_as_percentage: true
pay_period_maximum: '500.00'
child_support:
state: FL
fips_code: '12011'
payment_period: Monthly
case_number: CS1234
Update-Garnishment-Request:
description: Request body for updating a garnishment.
allOf:
- "$ref": "#/components/schemas/Garnishment-Request-Base"
- "$ref": "#/components/schemas/Versionable-Required"
Garnishment-Child-Support:
description: Additional child support order details
type:
- object
- 'null'
properties:
state:
type: string
readOnly: false
description: The two letter state abbreviation for the state issuing the child support order. Agency data is available in the `GET /v1/garnishments/child_support` API.
payment_period:
type: string
readOnly: false
enum:
- Every week
- Every other week
- Twice per month
- Monthly
description: How often the agency collects the withholding amount. e.g. $500 monthly -> `Monthly`.
fips_code:
type: string
description: The FIPS code associated with the state or county agency issuing the child support order. Agency data is available in the `GET /v1/garnishments/child_support` API.
nullable: false
readOnly: false
case_number:
type:
- string
- 'null'
readOnly: false
description: Child Support Enforcement Case Number associated with this child support obligation - required for most states. Agency specific requirements are available in the `GET /v1/garnishments/child_support` API.
order_number:
type:
- string
- 'null'
readOnly: false
description: Order Identifier or Order ID associated with this child support obligation - required for some states. Agency specific requirements are available in the `GET /v1/garnishments/child_support` API.
remittance_number:
type:
- string
- 'null'
readOnly: false
description: Child Support Enforcement Remittance ID associated with this child support obligation - required for some states. Agency specific requirements are available in the `GET /v1/garnishments/child_support` API.
Employee-Custom-Field:
type: object
description: A custom field of an employee
properties:
id:
type: string
company_custom_field_id:
type: string
description: This is the id of the response object from when you get the company custom fields
name:
type: string
type:
"$ref": "#/components/schemas/Custom-Field-Type"
description:
type:
- string
- 'null'
value:
type: string
selection_options:
type:
- array
- 'null'
description: An array of options for fields of type radio. Otherwise, null.
items:
type: string
required:
- id
- company_custom_field_id
- name
- type
- value
x-examples:
example_text_field:
id: ee515986-f3ca-49da-b576-2691b95262f9
company_custom_field_id: ea7e5d57-6abb-47d7-b654-347c142886c0
name: employee_level
description: Employee Level
type: text
value: '2'
selection_options:
example_radio_field:
id: 3796e08d-c2e3-434c-b4de-4ce1893e7b59
company_custom_field_id: 024ec137-6c92-43a3-b061-14a9720531d6
name: favorite fruit
description: Which is your favorite fruit?
type: radio
value: apple
selection_options:
- apple
- banana
- orange
Employee-Custom-Field-List:
type: object
description: A list of an employee's custom fields
properties:
custom_fields:
type: array
items:
"$ref": "#/components/schemas/Employee-Custom-Field"
x-examples:
example:
custom_fields:
- id: ee515986-f3ca-49da-b576-2691b95262f9
company_custom_field_id: ea7e5d57-6abb-47d7-b654-347c142886c0
name: employee_level
description: Employee Level
type: text
value: '2'
selection_options:
- id: 3796e08d-c2e3-434c-b4de-4ce1893e7b59
company_custom_field_id: 024ec137-6c92-43a3-b061-14a9720531d6
name: favorite fruit
description: Which is your favorite fruit?
type: radio
value: apple
selection_options:
- apple
- banana
- orange
Custom-Field-Type:
type: string
description: Input type for the custom field.
enum:
- text
- currency
- number
- date
- radio
Employment-History-List:
type: array
x-examples:
success_status:
- hire_date: '2015-06-09'
termination_date: '2025-05-09'
file_new_hire_report: false
two_percent_shareholder: false
employment_status: full_time
items:
description: The representation of an employee's individual employements.
type: object
properties:
hire_date:
type: string
description: The employee's start day of work for an employment.
termination_date:
type:
- string
- 'null'
description: The employee's last day of work for an employment.
file_new_hire_report:
type: boolean
description: The boolean flag indicating whether Gusto will file a new hire report for the employee.
two_percent_shareholder:
type: boolean
description: Whether the employee is a two percent shareholder of the company. This field only applies to companies with an S-Corp entity type.
employment_status:
type: string
description: The employee's employment status. Supplying an invalid option will set the employment_status to *not_set*.
enum:
- part_time
- full_time
- part_time_eligible
- variable
- seasonal - not_set
Employee-Onboarding-Status:
description: The representation of an employee's onboarding status.
type: object
title: Employee-Onboarding-Status
x-examples:
success_status:
uuid: 8351cf2a-17cb-49e3-94a7-9986dcb11e84
onboarding_status: onboarding_completed
onboarding_steps:
- title: Personal details
id: personal_details
required: true
completed: true
requirements: []
- title: Enter compensation details
id: compensation_details
required: true
completed: true
requirements: []
- title: Add work address
id: add_work_address
required: true
completed: true
requirements: []
- title: Add home address
id: add_home_address
required: true
completed: true
requirements: []
- title: Enter federal tax withholdings
id: federal_tax_setup
required: true
completed: true
requirements: []
- title: Enter state tax information
id: state_tax_setup
required: true
completed: false
requirements:
- add_work_address
- add_home_address
- title: Direct deposit setup
id: direct_deposit_setup
required: false
completed: true
requirements: []
- title: Employee form signing
id: employee_form_signing
required: true
completed: false
requirements:
- federal_tax_setup
- state_tax_setup
- title: File new hire report
id: file_new_hire_report
required: true
completed: false
requirements:
- add_work_address
blockers: []
properties:
uuid:
type: string
description: Unique identifier for this employee.
onboarding_status:
type: string
description: One of the "onboarding_status" enum values.
onboarding_steps:
type: array
description: List of steps required to onboard an employee.
items:
title: Onboarding step
type: object
properties:
title:
type: string
description: User-friendly description of the onboarding step.
id:
type: string
description: String identifier for the onboarding step.
required:
type: boolean
description: When true, this step is required.
completed:
type: boolean
description: When true, this step has been completed.
requirements:
type: array
description: A list of onboarding steps required to begin this step.
items:
type: string
blockers:
type: array
description: |
Validation issues that should be resolved before this employee's onboarding is complete. Each entry identifies an affected field, a category describing the type of problem, and a human-readable message.
Supported categories:
- `duplicate_value`: Another employee in the same company already has this value. To resolve, cancel this onboarding and initiate a rehire if it's a returning employee, or contact support to investigate the conflict.
This list may grow over time as new validation rules are added.
items:
type: object
properties:
field:
type: string
enum:
- ssn
description: The employee field affected.
category:
type: string
enum:
- duplicate_value
description: Category of the blocker. See the array-level description for resolution guidance.
message:
type: string
description: Human-readable description of the blocker.
required:
- uuid
Flsa-Status-Type:
type: string
enum:
- Exempt
- Salaried Nonexempt
- Nonexempt
- Owner
- Commission Only Exempt
- Commission Only Nonexempt
description: 'The FLSA status for this compensation. Salaried (''Exempt'') employees are paid a fixed salary every pay period. Salaried with overtime (''Salaried Nonexempt'') employees are paid a fixed salary every pay period, and receive overtime pay when applicable. Hourly (''Nonexempt'') employees are paid for the hours they work, and receive overtime pay when applicable. Commissioned employees (''Commission Only Exempt'') earn wages based only on commission. Commissioned with overtime (''Commission Only Nonexempt'') earn wages based on commission, and receive overtime pay when applicable. Owners (''Owner'') are employees that own at least twenty percent of the company. '
Employee-Pay-Stubs-List:
type: array
x-examples:
success_status:
- uuid: d2cec746-caee-464a-bcaf-00d93f7049c9
check_date: '2023-11-24'
gross_pay: '880.0'
net_pay: '541.02'
payroll_uuid: a039cafb-745e-4af4-bf1e-935a86fc18e0
check_amount: '500.2'
payment_method: Direct Deposit
items:
description: The representation of an employee pay stub information.
type: object
properties:
uuid:
type: string
description: The UUID of the employee pay stub.
readOnly: true
check_date:
type: string
description: The check date of the pay stub.
readOnly: true
gross_pay:
type: string
description: The gross pay amount for the pay stub.
readOnly: true
net_pay:
type: string
description: The net pay amount for the pay stub.
readOnly: true
payroll_uuid:
type: string
description: A unique identifier of the payroll to which the pay stub belongs.
readOnly: true
check_amount:
type: string
description: The check amount for the pay stub.
readOnly: true
payment_method:
type: string
description: The payment method for the pay stub.
enum:
- Direct Deposit
- Check
readOnly: true
x-tags:
- Payrolls
required:
- uuid
Company-Address:
description: The representation of a company's address in Gusto.
type: object
properties:
street_1:
type: string
readOnly: false
street_2:
type:
- string
- 'null'
readOnly: false
city:
type: string
readOnly: false
state:
type: string
readOnly: false
zip:
type: string
readOnly: false
country:
type: string
readOnly: false
default: USA
inactive:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
active:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
Employee-Work-Addresses-List:
type: array
x-examples:
success_status:
- uuid: '080b6254-ce7c-411f-9f7d-5a3ce3c51154'
employee_uuid: 6747692e-d2c8-4472-9c5e-183c65404fbf
location_uuid: 9ccfade8-82ee-490c-8711-5c0787bccde8
effective_date: '2021-01-01'
active: false
version: 3097e9d0efb09ba2e00a8988a93b3091
street_1: 91678 Farrell Meadow
street_2: Apt. 835
city: Phoenix
state: AZ
zip: '85016'
country: USA
- uuid: 35d62f15-75da-45aa-9c97-adc57342b925
employee_uuid: 6747692e-d2c8-4472-9c5e-183c65404fbf
location_uuid: 10330fe8-36ef-4713-aa59-9f8a432abd13
effective_date: '2022-01-01'
active: false
version: 5f48ce54afed81bb11dd89461bd0e214
street_1: 800 Adolfo Gardens
street_2: Suite 419
city: Bremen
state: AL
zip: '35033'
country: USA
- uuid: 3f3ceaba-6b57-4039-a31a-0004bef83c6f
employee_uuid: 6747692e-d2c8-4472-9c5e-183c65404fbf
location_uuid: 98383e91-c67d-4b69-a617-5a57f91da48c
effective_date: '2023-01-01'
active: true
version: a8a78c851337676137e22caf56ffe5b5
street_1: 2216 Icie Villages
street_2: Apt. 798
city: Big Delta
state: AK
zip: '99737'
country: USA
items:
"$ref": "#/components/schemas/Employee-Work-Address"
Employee-Work-Address:
type: object
x-examples:
success_status:
uuid: 64ee5fd7-3eb2-4083-883c-95e93e181cc8
employee_uuid: d773461f-848a-40a1-8f09-b2ee4249d5c7
location_uuid: 733ab2af-9510-408f-8d20-09196967174f
effective_date: '2020-01-31'
active: true
version: 3879823d440f3a3215d129ac73c58966
street_1: 977 Marks Viaduct
street_2: Apt. 958
city: Pink Hill
state: NC
zip: '28572'
country: USA
properties:
uuid:
type: string
readOnly: true
description: The unique identifier of this work address.
effective_date:
type: string
description: The date the employee began working at this location.
active:
type: boolean
readOnly: true
description: Signifies if this address is the active work address for the current date
location_uuid:
type: string
description: UUID reference to the company location for this work address.
employee_uuid:
type: string
description: UUID reference to the employee for this work address.
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
street_1:
type: string
readOnly: true
street_2:
type:
- string
- 'null'
readOnly: true
city:
type: string
readOnly: true
state:
type: string
readOnly: true
zip:
type: string
readOnly: true
country:
type: string
readOnly: true
default: USA
required:
- uuid
- version
Employee-Address-List:
type: array
x-examples:
success_status:
- uuid: d6b7472f-bb55-41ca-a55c-9adbd3c64e09
version: 7eee445be93fc50fd3cbb55b8d943fb3
employee_uuid: d1a166b4-79b4-413f-b067-27534ec59ecd
street_1: 3121 Milky Way
street_2: ''
city: San Francisco
state: CA
zip: '94107'
country: USA
active: false
effective_date: '2024-06-09'
courtesy_withholding: false
- uuid: 1b59a593-d324-4d97-9296-99ecc95f81d1
version: 5147ad755821c4ba3dbc3afa1055ff4d
employee_uuid: d1a166b4-79b4-413f-b067-27534ec59ecd
street_1: 3624 Victoria Ln
street_2: ''
city: Cincinnati
state: OH
zip: '45208'
country: USA
active: true
effective_date: '2025-05-26'
courtesy_withholding: false
- uuid: 69489b54-976d-4027-8b51-702e5c8c62d3
version: f0765fa5a85f62723320763494a481a6
employee_uuid: d1a166b4-79b4-413f-b067-27534ec59ecd
street_1: Main st.
street_2: ''
city: New York
state: NY
zip: '10011'
country: USA
active: false
effective_date: '2025-07-09'
courtesy_withholding: false
items:
"$ref": "#/components/schemas/Employee-Address"
Employee-Address:
type: object
x-examples:
success_status:
uuid: 700af712-62ba-4dff-824f-97a3c6fda416
version: 6c3c23e4cc840bd3f1416f72b5380eff
employee_uuid: 78d20691-f1b4-4f74-bc4c-1d4db0099b00
street_1: 3121 Milky Way
street_2: ''
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
effective_date: '1970-01-01'
courtesy_withholding: false
properties:
uuid:
type: string
description: The UUID of the employee address
employee_uuid:
type: string
description: The UUID of the employee
effective_date:
type: string
format: date
description: The date the employee started living at the address.
courtesy_withholding:
type: boolean
description: Determines if home taxes should be withheld and paid for employee.
street_1:
type: string
readOnly: false
street_2:
type:
- string
- 'null'
readOnly: false
city:
type: string
readOnly: false
state:
type: string
readOnly: false
zip:
type: string
readOnly: false
country:
type: string
readOnly: false
default: USA
active:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
warnings:
type: array
description: An array of warning objects that provide additional information about the address. Warnings do not prevent the address from being saved.
items:
"$ref": "#/components/schemas/Warning-Object"
required:
- uuid
- version
Employee-Section603-High-Earner-Status-List:
type: array
x-examples:
success_status:
- id: f47ac10b-58cc-4372-a567-0e02b2c3d479
effective_year: 2026
is_high_earner: false
- id: 550e8400-e29b-41d4-a716-446655440000
effective_year: 2027
is_high_earner: true
items:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status"
Employee-Section603-High-Earner-Status:
type: object
description: The representation of an employee's Section 603 high earner status for a specific year. Section 603 of the SECURE 2.0 Act requires employees aged 50 or older whose prior-year FICA wages exceed the IRS threshold to have their catch-up contributions to pre-tax retirement benefits designated as post-tax contributions.
x-examples:
success_status:
id: f47ac10b-58cc-4372-a567-0e02b2c3d479
effective_year: 2026
is_high_earner: false
properties:
id:
type: string
description: The unique identifier of the Section 603 high earner status record
readOnly: true
effective_year:
type: integer
description: The year for which this high earner status applies
readOnly: true
is_high_earner:
type:
- boolean
- 'null'
description: Whether the employee is classified as a high earner for Section 603 purposes. Can be null if the status has not yet been determined.
readOnly: true
required:
- id
- effective_year
- is_high_earner
Employee-Section603-High-Earner-Status-Create-Request:
type: object
description: Request body for creating an employee's Section 603 high earner status
properties:
effective_year:
type: integer
description: The year for which this high earner status applies
example: 2026
is_high_earner:
type: boolean
description: Whether the employee is classified as a high earner for Section 603 purposes
example: true
required:
- effective_year
- is_high_earner
Employee-Section603-High-Earner-Status-Update-Request:
type: object
description: Request body for updating an employee's Section 603 high earner status
properties:
is_high_earner:
type: boolean
description: Whether the employee is classified as a high earner for Section 603 purposes
example: true
required:
- is_high_earner
Employee-State-Taxes-List:
type: array
x-examples:
success_status:
- uuid: 287d2c61-1d18-4126-8a4a-9cb29bbb6dac
employee_uuid: c963cb99-fe1c-4aa8-9d48-1ad211ad396f
state: CA
file_new_hire_report: false
is_work_state: true
questions:
- is_question_for_admin_only: false
label: Filing Status
description: 'The Head of Household status applies to unmarried individuals who have a relative living with them in their home. If unsure, read the CA Filing Status explanation.
'
key: filing_status
input_question_format:
type: Select
options:
- value: S
label: Single
- value: M
label: Married one income
- value: MD
label: Married dual income
- value: H
label: Head of Household
- value: E
label: Do Not Withhold
answers:
- value: M
valid_from: '2010-01-01'
valid_up_to:
- is_question_for_admin_only: false
label: Withholding Allowance
description: 'This value is needed to calculate the employee''s CA income tax withholding. If unsure, use the CA DE-4 form to calculate the value manually.
'
key: withholding_allowance
input_question_format:
type: Number
answers:
- value: 1
valid_from: '2010-01-01'
valid_up_to:
- is_question_for_admin_only: false
label: Additional Withholding
description: You can withhold an additional amount of California income taxes here.
key: additional_withholding
input_question_format:
type: Currency
answers:
- value: '0.0'
valid_from: '2010-01-01'
valid_up_to:
- is_question_for_admin_only: true
label: File a New Hire Report?
description: State law requires you to file a new hire report within 20 days of hiring or re-hiring an employee.
key: file_new_hire_report
input_question_format:
type: Select
options:
- value: true
label: Yes, file the state new hire report for me.
- value: false
label: No, I have already filed.
answers:
- value: false
valid_from: '2010-01-01'
valid_up_to:
items:
type: object
properties:
uuid:
type: string
description: The uuid of the employee state field.
employee_uuid:
type: string
description: The employee's uuid
state:
type: string
description: Two letter US state abbreviation
file_new_hire_report:
type:
- boolean
- 'null'
is_work_state:
type: boolean
questions:
type: array
items:
"$ref": "#/components/schemas/Employee-State-Tax-Question"
required:
- uuid
- employee_uuid
- state
- questions
Employee-State-Tax-Question:
type: object
properties:
label:
type: string
description: A short title for the question
description:
type:
- string
- 'null'
description: An explaination of the question - this may contain inline html formatted links.
key:
type: string
description: A unique identifier of the question (for the given state) - used for updating the answer.
is_question_for_admin_only:
type: boolean
input_question_format:
"$ref": "#/components/schemas/Employee-State-Tax-Input-Question-Format"
answers:
type: array
items:
"$ref": "#/components/schemas/Employee-State-Tax-Answer"
required:
- label
- description
- key
- input_question_format
- answers
- is_question_for_admin_only
Employee-State-Tax-Input-Question-Format:
type: object
properties:
type:
type: string
description: Describes the type of question - Text, Number, Select, Currency, Date
options:
type: array
uniqueItems: true
description: For "Select" type questions, the allowed values and display labels.
items:
type: object
properties:
value:
description: An allowed value to answer the question
oneOf:
- type: string
- type: boolean
- type: number
label:
type: string
description: A display label that corresponds to the answer value
required:
- label
required:
- type
Employee-State-Tax-Answer:
type: object
properties:
value:
oneOf:
- type: string
- type: number
- type: boolean
- type: 'null'
description: The answer to the corresponding question - this may be a string, number, boolean, or null.
valid_from:
type: string
description: The effective date of the answer - currently always “2010-01-01”.
valid_up_to:
type:
- string
- 'null'
description: The effective end date of the answer - currently always null.
Employee-State-Taxes-Request:
type: object
properties:
states:
type: array
uniqueItems: true
items:
type: object
properties:
state:
type: string
questions:
type: array
uniqueItems: true
items:
type: object
properties:
key:
type: string
answers:
type: array
uniqueItems: true
items:
type: object
properties:
value:
oneOf:
- type: string
- type: number
- type: boolean
- type: 'null'
valid_from:
type: string
valid_up_to:
type:
- string
- 'null'
required:
- value
- valid_from
required:
- key
required:
- state
required:
- states
Employee-Payment-Details-List:
type: array
description: A list of employee payment details.
x-examples:
success_status:
- employee_uuid: e2c4c0ce-2986-48b9-86cf-ec27f6ed9a36
first_name: Soren
last_name: Kierkegaard
payment_method: Direct Deposit
split_by: Percentage
splits:
- bank_account_uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
name: Primary Checking
hidden_account_number: XXXX1207
encrypted_account_number: mbNLVOm7psP16ocqXso5ZtzOXBrA-5Q-.zarrdLBmyYDDK4kCkF2reKtzx8udK8iDabtW
routing_number: '055003201'
account_type: Checking
priority: 1
split_amount: 100
- employee_uuid: 6b7e4b51-2e2d-4b54-9f37-7b9d0e9fa5d2
first_name: Autumn
last_name: Connelly
payment_method: Check
split_by:
splits:
items:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
first_name:
type: string
description: The legal first name of the employee.
readOnly: true
last_name:
type: string
description: The last name of the employee.
readOnly: true
payment_method:
type: string
enum:
- Direct Deposit
- Check
description: The type of payment method.
readOnly: true
split_by:
anyOf:
- type: string
enum:
- Amount
- Percentage
- type: 'null'
description: How the payment is split. This field is applicable when `payment_method` is "Direct Deposit". If `split_by` is Percentage, then the split amounts must add up to exactly 100. If `split_by` is Amount, the last split amount must be `null` to capture the remainder.
readOnly: true
splits:
type:
- array
- 'null'
description: An array of payment splits. This field is applicable when `payment_method` is "Direct Deposit".
items:
type: object
properties:
bank_account_uuid:
type: string
description: The UUID of the bank account.
name:
type: string
description: The name of the bank account.
hidden_account_number:
type: string
description: An obfuscated version of the account number which can be used for display purposes.
encrypted_account_number:
type:
- string
- 'null'
description: Ciphertext containing the full bank account number, which must be decrypted using a key provided by Gusto. Only visible with the `employee_payment_methods:read:account_number` scope.
routing_number:
type: string
description: The routing number of the bank account.
account_type:
type: string
description: The bank account type (e.g., "Checking" or "Savings").
priority:
type: integer
description: The order of priority for each payment split, with priority 1 being the first bank account paid. Priority must be unique and sequential.
split_amount:
type:
- number
- 'null'
description: If `split_by` is 'Amount', this is in cents (e.g., 500 for $5.00) and exactly one account must have a `split_amount` of `null` to capture the remainder. If `split_by` is 'Percentage', this is the percentage value (e.g., 60 for 60%).
readOnly: true
Contractor-Payment-Details-List:
type: array
x-examples:
success_status:
- contractor_uuid: e3d9487a-4ecb-49a3-b6ff-cf03ba7278b6
first_name: Yael
last_name: Kuvalis
payment_method: Check
split_by:
splits:
- contractor_uuid: 577b6307-66e9-4926-a769-91f5c8b578aa
first_name: Autumn
last_name: Connelly
payment_method: Direct Deposit
split_by: Percentage
splits:
- bank_account_uuid: 0aca4500-8ba4-48fc-adce-677fe7926b7b
name: Cayman Island Checking
hidden_account_number: XXXX1545
account_number:
encrypted_account_number:
routing_number: '055003201'
priority: 1
split_amount: 100
account_type: Checking
items:
type: object
properties:
contractor_uuid:
type: string
payment_method:
type: string
enum:
- Direct Deposit
- Check
first_name:
type: string
last_name:
type: string
split_by:
anyOf:
- type: string
enum:
- Amount
- Percentage
- type: 'null'
description: Describes how the payment will be split. If split_by is Percentage, then the split amounts must add up to exactly 100. If split_by is Amount, then the amount represents cents and the last split amount must be `null` to capture the remainder.
splits:
type:
- array
- 'null'
items:
type: object
properties:
bank_account_uuid:
type: string
name:
type: string
hidden_account_number:
type: string
description: An obfuscated version of the account number which can be used for display purposes.
encrypted_account_number:
type:
- string
- 'null'
description: Ciphertext containing the full bank account number, which must be decrypted using a key provided by Gusto. Only visible with the `contractor_payment_methods:read:account_number` scope.
routing_number:
type: string
priority:
type: integer
description: The order of priority for each payment split, with priority 1 being the first bank account paid. Priority must be unique and sequential.
split_amount:
type:
- number
- 'null'
description: If `split_by` is 'Amount', this is in cents (e.g., 500 for $5.00) and exactly one account must have a `split_amount` of `null` to capture the remainder. If `split_by` is 'Percentage', this is the percentage value (e.g., 60 for 60%).
account_type:
type: string
Notifications-List:
type: array
x-examples:
success_status:
- uuid: d053ee2a-a80f-4a61-8bf8-6122c1f954dd
company_uuid: 46c8329d-ebd1-49ba-878c-810b481a34c9
category: company_setup.missing_mandatory_sick_time_policy
title: Set up a sick time off policy
message: At least one company work location requires businesses to provide a sick time off policy.
actionable: true
can_block_payroll: false
published_at: '2025-06-09T13:42:59.000-07:00'
due_at:
status: open
resources: []
template_variables: {}
- uuid: 2edd148b-c4c3-4cda-b3e1-72b87399e6c8
company_uuid: 46c8329d-ebd1-49ba-878c-810b481a34c9
category: bank_error.compensation_credit_failure
title: Unable to deposit funds to Donn Cormier
message: We were unable to deposit a recent paycheck to Donn’s bank account, so these funds of $100.00 will be returned to Luettgen-Gusikowski’s bank account. Once the funds are received, the payment should be made directly to Donn.
actionable: true
can_block_payroll: false
published_at: '2025-06-09T13:43:00.000-07:00'
due_at:
status: open
resources:
- entity_type: Employee
entity_uuid: 66a27bb8-be5b-42e5-82b8-b2d0044a7f9e
template_variables:
beneficiary_name: Donn Cormier
amount: "$100.00"
company_name: Luettgen-Gusikowski
with_transactional_mailer_notification:
- uuid: d053ee2a-a80f-4a61-8bf8-6122c1f954dd
company_uuid: 46c8329d-ebd1-49ba-878c-810b481a34c9
category: company_setup.missing_mandatory_sick_time_policy
title: Set up a sick time off policy
message: At least one company work location requires businesses to provide a sick time off policy.
actionable: true
can_block_payroll: false
published_at: '2025-06-09T13:42:59.000-07:00'
due_at:
status: open
resources: []
template_variables: {}
- uuid: 3f16b3e4-3c0e-4f92-9c1d-9e9dc9d1f7a2
company_uuid: 46c8329d-ebd1-49ba-878c-810b481a34c9
category: notification.taxops.created
title: Confirm or amend the tax filing that was filed outside of payroll
message: We recently attempted to file Acme Consulting's Q2 2025 tax returns. However, California EDD rejected the filing because it has already been completed by someone else. Please confirm that the already-filed return matches the records on file. If the return is incorrect, you will need to amend it directly with the agency. We cannot amend returns we did not originally file. In the future, ensure this return is not filed outside of payroll.
actionable: true
can_block_payroll: false
published_at: '2025-06-09T13:44:00.000-07:00'
due_at:
status: open
resources:
- entity_type: Employee
entity_uuid: 66a27bb8-be5b-42e5-82b8-b2d0044a7f9e
template_variables:
company_name: Acme Consulting
quarter: Q2 2025
agency_list: California EDD
items:
"$ref": "#/components/schemas/Notification"
Notification:
type: object
properties:
uuid:
type: string
description: Unique identifier of a notification.
company_uuid:
type: string
description: Unique identifier of the company to which the notification belongs.
title:
type: string
description: The title of the notification. This highlights the actionable component of the notification.
message:
type: string
description: The message of the notification. This provides additional context for the user and recommends a specific action to resolve the notification.
status:
type: string
description: Represents the notification's status as managed by our system. It is updated based on observable system events and internal business logic, and does not reflect resolution steps taken outside our system. This field is read-only and cannot be modified via the API.
enum:
- open
- resolved
- expired
category:
type: string
description: The notification's category.
actionable:
type: boolean
description: Indicates whether a notification requires action or not. If false, the notification provides critical information only.
can_block_payroll:
type: boolean
description: Indicates whether a notification may block ability to run payroll. If true, we suggest that these notifications are prioritized to your end users.
published_at:
type: string
description: Timestamp of when the notification was published.
due_at:
type:
- string
- 'null'
description: Timestamp of when the notification is due. If the notification has no due date, this field will be null.
template_variables:
type: object
description: An object containing template variables used to render the notification. The structure of this object depends on the notification category. Each category defines a fixed set of variable names (keys), which are always present. The values of these variables can vary depending on the specific notification instance.
additionalProperties:
type: string
resources:
type: array
description: An array of entities relevant to the notification
items:
type: object
properties:
entity_type:
type: string
description: The type of entity being described.
enum:
- BankAccount
- Contractor
- ContractorPayment
- Employee
- Payroll
- PaySchedule
- RecoveryCase
- Signatory
- Wire In Request
entity_uuid:
type: string
description: Unique identifier of the entity
reference_type:
type: string
description: Optional. The type of a resource that is related to the one described by entity_type and entity_uuid. For instance, if the entity_type is “BankAccount”, the reference_type could be the “Employee” or “Contractor” to whom the bank account belongs.
reference_uuid:
type: string
description: Optional. Unique identifier of the reference.
required:
- entity_type
- entity_uuid
required:
- uuid
- company_uuid
- title
- message
- category
- actionable
- status
- published_at
- due_at
- resources
- can_block_payroll
x-examples:
notification_show:
uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
company_uuid: 88f7cca1-dcad-4d20-84db-7fb80303d69f
title: 'Action required: Additional information needed to process payroll'
message: If we do not receive this information as soon as possible, your payroll may not be processed on time.
status: open
category: information_request
actionable: true
can_block_payroll: true
published_at: '2022-01-01T00:00:00.000Z'
due_at: '2022-02-01T00:00:00.000Z'
template_variables:
blocked_task: Payroll
resources:
- entity_type: Employee
entity_uuid: 21b6f9ce-0ac4-4745-8d8a-127f8c0f00f2
transactional_mailer_notification_show:
uuid: 3f16b3e4-3c0e-4f92-9c1d-9e9dc9d1f7a2
company_uuid: 88f7cca1-dcad-4d20-84db-7fb80303d69f
title: Confirm or amend the tax filing that was filed outside of payroll
message: We recently attempted to file Acme Consulting's Q2 2025 tax returns. However, California EDD rejected the filing because it has already been completed by someone else. Please confirm that the already-filed return matches the records on file. If the return is incorrect, you will need to amend it directly with the agency. We cannot amend returns we did not originally file. In the future, ensure this return is not filed outside of payroll.
status: open
category: notification.taxops.created
actionable: true
can_block_payroll: false
published_at: '2025-06-09T13:44:00.000-07:00'
due_at:
template_variables:
company_name: Acme Consulting
quarter: Q2 2025
agency_list: California EDD
resources:
- entity_type: Employee
entity_uuid: 21b6f9ce-0ac4-4745-8d8a-127f8c0f00f2
Payroll-List:
description: A list of payrolls for a company.
type: array
x-examples:
success_status:
- uuid: 3601a7a2-0562-4e4c-9559-20886658daac
payroll_uuid: 3601a7a2-0562-4e4c-9559-20886658daac
company_uuid: b43e6012-bf6c-4752-b67b-5c8000595e0e
payroll_status_meta:
cancellable: false
expected_check_date: '2025-06-08'
initial_check_date: '2025-06-27'
expected_debit_time: '2025-06-12T23:00:00Z'
payroll_late: false
initial_debit_cutoff_time: '2025-06-12T23:00:00Z'
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-11'
calculated_at: '2025-06-11T19:40:51Z'
pay_period:
start_date: '2025-05-20'
end_date: '2025-06-04'
pay_schedule_uuid: ded21d08-02d6-41cb-b211-8d8ca02f1c6a
check_date: '2025-06-08'
external: false
payroll_deadline: '2025-06-12T23:00:00Z'
company_taxes: []
created_at: '2025-06-11T19:40:51Z'
partner_owned_disbursement:
items:
"$ref": "#/components/schemas/Payroll"
Payroll-Update:
type: object
properties:
employee_compensations:
type: array
items:
type: object
description: ''
properties:
employee_uuid:
type: string
description: The UUID of the employee.
version:
type: string
description: The current version of this employee compensation from the prepared payroll. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
excluded:
type: boolean
description: This employee will be excluded from payroll calculation and will not be paid for the payroll.
payment_method:
type: string
description: The employee's compensation payment method. Invalid values will be ignored.
enum:
- Direct Deposit
- Check
memo:
type: string
description: Custom text that will be printed as a personal note to the employee on a paystub.
fixed_compensations:
type: array
items:
type: object
description: An array of fixed compensations for the employee. Fixed compensations include tips, bonuses, and one time reimbursements.
properties:
name:
type: string
description: The name of the compensation. This also serves as the unique, immutable identifier for this compensation.
amount:
type: string
description: The amount of the compensation for the pay period.
job_uuid:
type: string
description: The UUID of the job for the compensation.
breakdowns:
type: array
description: |
Per-workweek amounts to record for this compensation. Not
applicable to reimbursements. Submitted breakdowns must tile the
pay period's workweeks exactly (no gaps or overlaps), and their
amounts must sum to the compensation's total `amount`.
items:
type: object
properties:
start_date:
type: string
format: date
description: The start date of the workweek.
end_date:
type: string
format: date
description: The end date of the workweek.
amount:
type: string
format: float
description: The dollar amount for this workweek.
hourly_compensations:
type: array
items:
type: object
description: An array of hourly compensations for the employee. Hourly compensations include regular, overtime, and double overtime hours.
properties:
name:
type: string
description: The name of the compensation. This also serves as the unique, immutable identifier for this compensation.
hours:
type: string
description: The number of hours to be compensated for this pay period.
job_uuid:
type: string
description: The UUIDs of the job for the compensation.
breakdowns:
type: array
description: |
Per-workweek hours to record for this compensation. Submitted
breakdowns must tile the pay period's workweeks exactly (no gaps
or overlaps). Either every hourly compensation for a job must
include breakdowns, or none of them may. Hours must sum to the
compensation's total `hours`.
items:
type: object
properties:
start_date:
type: string
format: date
description: The start date of the workweek.
end_date:
type: string
format: date
description: The end date of the workweek.
hours:
type: string
format: float
description: The number of hours worked during this workweek.
deductions:
type: array
items:
type: object
description: An array of deductions for the employee.
properties:
name:
type: string
description: The name of the deduction.
amount:
type: number
description: The amount of the deduction for the pay period.
amount_type:
type: string
description: The amount type of the deduction for the pay period.
enum:
- fixed
- percent
uuid:
type: string
description: The UUID of the deduction. This parameter is optional and can be provided in order to update an existing deduction.
custom_withholdings:
type: object
description: |
Optional per-payroll one-time custom withholdings for federal and/or state income tax.
When provided, the supplied override takes precedence over any persistent withholding schedule for this run.
This field is in limited release; if your application does not have access, requests including it are silently ignored.
properties:
federal:
type: object
description: Federal one-time custom withholding override.
properties:
override_type:
type: string
enum:
- one_time
description: Override mode. Only `one_time` is currently supported.
amount:
type: string
description: The amount to be withheld for this payroll.
amount_type:
type: string
enum:
- fixed
- percent
description: How to interpret the amount.
state:
type: array
description: State one-time custom withholding overrides, one entry per state field.
items:
type: object
properties:
employee_state_field_uuid:
type: string
description: The UUID of the EmployeeStateField this withholding applies to.
override_type:
type: string
enum:
- one_time
description: Override mode. Only `one_time` is currently supported.
amount:
type: string
description: The amount to be withheld for this payroll.
amount_type:
type: string
enum:
- fixed
- percent
description: How to interpret the amount.
paid_time_off:
type: array
description: An array of all paid time off the employee is eligible for this pay period. Each paid time off object can be the name or the specific policy_uuid.
items:
type: object
properties:
name:
type: string
description: The name of the PTO. This also serves as the unique, immutable identifier for the PTO. Must pass in name or policy_uuid but not both.
hours:
type: string
description: The hours of this PTO taken during the pay period.
policy_uuid:
type: string
description: The uuid of the PTO policy. Must pass in name or policy_uuid but not both.
final_payout_unused_hours_input:
type:
- string
- 'null'
description: The outstanding hours paid upon termination. This field is only applicable for termination payrolls.
reimbursements:
type: array
description: An array of reimbursements for the employee.
items:
type: object
properties:
amount:
type: string
description: The dollar amount of the reimbursement for the pay period.
description:
type: string
description: The description of the reimbursement. If not provided, the reimbursement will be unnamed.
uuid:
type: string
description: The UUID of an existing reimbursement. This parameter is optional and can be provided in order to update an existing reimbursement.
withholding_pay_period:
description: The payment schedule tax rate the payroll is based on. Only relevant for off-cycle payrolls.
type: string
enum:
- Every week
- Every other week
- Twice per month
- Monthly
- Quarterly
- Semiannually
- Annually
skip_regular_deductions:
description: Block regular deductions and contributions for this payroll. Only relevant for off-cycle payrolls.
type: boolean
fixed_withholding_rate:
description: Enable taxes to be withheld at the IRS's required rate of 22% for federal income taxes. State income taxes will be taxed at the state's supplemental tax rate. Otherwise, we'll sum the entirety of the employee's wages and withhold taxes on the entire amount at the rate for regular wages. Only relevant for off-cycle payrolls.
type: boolean
required:
- employee_compensations
Payroll-Gross-Up-Request:
type: object
description: Request body for calculating gross up amount
properties:
employee_uuid:
type: string
description: The UUID of the employee
net_pay:
type: string
format: float
description: Employee net earnings
required:
- employee_uuid
- net_pay
Payroll-Gross-Up-Response:
type: object
description: Response containing the calculated gross up amount
x-examples:
success_status:
gross_up: '1234.56'
properties:
gross_up:
type: string
format: float
description: Gross up earnings.
Payroll-Calculate-Accruing-Time-Off-Hours-Request:
type: object
description: Request body for calculating accruing time off hours
properties:
regular_hours_worked:
type:
- string
- 'null'
format: float
description: Regular hours worked in this pay period
overtime_hours_worked:
type:
- string
- 'null'
format: float
description: Overtime hours worked in this pay period
double_overtime_hours_worked:
type:
- string
- 'null'
format: float
description: Double overtime hours worked in this pay period
pto_hours_used:
type:
- string
- 'null'
format: float
description: Paid time off hours used in this pay period
sick_hours_used:
type:
- string
- 'null'
format: float
description: Sick hours used in this pay period
Payroll-Calculate-Accruing-Time-Off-Hours-Response:
type: object
description: Response containing the calculated accruing time off hours
x-examples:
success_status:
hours_earned:
- time_off_policy_uuid: 7c8d9e0f-1a2b-3c4d-5e6f-7a8b9c0d1e2f
hours: '3.0'
- time_off_policy_uuid: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
hours: '20.0'
properties:
hours_earned:
type: array
description: Accruing time off hours earned for each time off policy
items:
type: object
properties:
time_off_policy_uuid:
type: string
description: The UUID of the time off policy
hours:
type: string
format: float
description: Hours accrued during this pay period.
required:
- hours_earned
Payroll:
type: object
x-examples:
success_status:
uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
employee_compensations: []
submission_blockers: []
credit_blockers: []
payroll_uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
company_uuid: 9aa93530-43d5-484e-b608-33214109420d
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-16'
calculated_at: '2025-06-16T16:58:03Z'
pay_period:
start_date: '2025-05-25'
end_date: '2025-06-09'
pay_schedule_uuid: 40ff5990-0191-4796-9717-32f7dd3e94d5
check_date: '2025-06-13'
external: false
payroll_deadline: '2025-06-17T23:00:00Z'
totals:
employee_bonuses: '0.00'
employee_commissions: '0.00'
employee_cash_tips: '0.00'
employee_paycheck_tips: '0.00'
additional_earnings: '0.00'
owners_draw: '0.00'
benefits: '0.00'
check_amount: '0.00'
child_support_debit: '0.00'
company_debit: '0.00'
deferred_payroll_taxes: '0.00'
employee_benefits_deductions: '0.00'
employee_taxes: '0.00'
employer_taxes: '0.00'
gross_pay: '0.00'
imputed_pay: '0.00'
net_pay: '0.00'
net_pay_debit: '0.00'
other_deductions: '0.00'
reimbursement_debit: '0.00'
reimbursements: '0.00'
tax_debit: '0.00'
payroll_status_meta:
cancellable: false
expected_check_date: '2025-06-13'
initial_check_date: '2025-06-13'
expected_debit_time: '2025-06-17T23:00:00Z'
payroll_late: false
initial_debit_cutoff_time: '2025-06-17T23:00:00Z'
processing_request:
status: submit_success
errors: []
created_at: '2025-06-16T16:58:03Z'
partner_owned_disbursement:
properties:
payroll_deadline:
"$ref": "#/components/schemas/Payroll-Deadline-Type"
check_date:
"$ref": "#/components/schemas/Payroll-Check-Date-Type"
processed:
"$ref": "#/components/schemas/Payroll-Processed-Type"
processed_date:
"$ref": "#/components/schemas/Payroll-Processed-Date-Type"
calculated_at:
"$ref": "#/components/schemas/Payroll-Calculated-At-Type"
uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
payroll_uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
company_uuid:
"$ref": "#/components/schemas/Payroll-Company-Uuid-Type"
off_cycle:
"$ref": "#/components/schemas/Payroll-Off-Cycle-Type"
off_cycle_reason:
"$ref": "#/components/schemas/Off-Cycle-Reason-Type"
auto_pilot:
"$ref": "#/components/schemas/Auto-Pilot-Type"
external:
"$ref": "#/components/schemas/Payroll-External-Type"
final_termination_payroll:
"$ref": "#/components/schemas/Payroll-Final-Termination-Payroll-Type"
withholding_pay_period:
"$ref": "#/components/schemas/Payroll-Withholding-Pay-Period-Type"
skip_regular_deductions:
"$ref": "#/components/schemas/Payroll-Skip-Regular-Deductions-Type"
fixed_withholding_rate:
"$ref": "#/components/schemas/Payroll-Fixed-Withholding-Rate-Type"
pay_period:
"$ref": "#/components/schemas/Payroll-Pay-Period-Type"
payroll_status_meta:
"$ref": "#/components/schemas/Payroll-Payroll-Status-Meta-Type"
totals:
"$ref": "#/components/schemas/Payroll-Totals-Type"
company_taxes:
"$ref": "#/components/schemas/Payroll-Company-Taxes-Type"
payroll_taxes:
"$ref": "#/components/schemas/Payroll-Taxes-Type"
payment_speed_changed:
"$ref": "#/components/schemas/Payroll-Payment-Speed-Changed-Type"
created_at:
"$ref": "#/components/schemas/Created-At-Type"
submission_blockers:
"$ref": "#/components/schemas/Payroll-Submission-Blockers-Type"
credit_blockers:
"$ref": "#/components/schemas/Payroll-Credit-Blockers-Type"
processing_request:
"$ref": "#/components/schemas/Payroll-Processing-Request"
partner_owned_disbursement:
"$ref": "#/components/schemas/Payroll-Partner-Owned-Disbursement-Type"
Unprocessed-Payroll:
type: object
description: A payroll that has been transitioned back to unprocessed state after cancellation.
x-examples:
success_status:
uuid: b50e611d-8f3d-4f24-b001-46675f7b5777
employee_compensations: []
payroll_uuid: b50e611d-8f3d-4f24-b001-46675f7b5777
company_uuid: 6bf7807c-a5a0-4f4d-b2e7-3fbb4b2299fb
off_cycle: false
auto_pilot: false
processed: false
processed_date:
calculated_at:
pay_period:
start_date: '2021-02-01'
end_date: '2021-02-15'
pay_schedule_uuid: 00ebc4a4-ec88-4435-8f45-c505bb63e501
check_date: '2021-02-22'
external: false
payroll_deadline: '2021-02-18T22:00:00Z'
created_at: '2022-02-01T22:00:00Z'
partner_owned_disbursement:
properties:
payroll_deadline:
"$ref": "#/components/schemas/Payroll-Deadline-Type"
check_date:
"$ref": "#/components/schemas/Payroll-Check-Date-Type"
processed:
"$ref": "#/components/schemas/Payroll-Processed-Type"
processed_date:
"$ref": "#/components/schemas/Payroll-Processed-Date-Type"
calculated_at:
"$ref": "#/components/schemas/Payroll-Calculated-At-Type"
uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
payroll_uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
company_uuid:
"$ref": "#/components/schemas/Payroll-Company-Uuid-Type"
off_cycle:
"$ref": "#/components/schemas/Payroll-Off-Cycle-Type"
off_cycle_reason:
"$ref": "#/components/schemas/Off-Cycle-Reason-Type"
auto_pilot:
"$ref": "#/components/schemas/Auto-Pilot-Type"
external:
"$ref": "#/components/schemas/Payroll-External-Type"
pay_period:
"$ref": "#/components/schemas/Payroll-Pay-Period-Type"
created_at:
"$ref": "#/components/schemas/Created-At-Type"
partner_owned_disbursement:
"$ref": "#/components/schemas/Payroll-Partner-Owned-Disbursement-Type"
Payroll-Partner-Owned-Disbursement-Type:
type:
- boolean
- 'null'
description: Will money movement for the payroll be performed by the partner rather than by Gusto?
Payroll-Deadline-Type:
type: string
format: date-time
description: A timestamp that is the deadline for the payroll to be run in order for employees to be paid on time. If payroll has not been run by the deadline, a prepare request will update both the check date and deadline to reflect the soonest employees can be paid and the deadline by which the payroll must be run in order for said check date to be met.
readOnly: true
Payroll-Check-Date-Type:
type: string
description: The date on which employees will be paid for the payroll.
readOnly: true
Payroll-Processed-Type:
type: boolean
description: Whether or not the payroll has been successfully processed. Note that processed payrolls cannot be updated. Additionally, a payroll is not guaranteed to be processed just because the payroll deadline has passed. Late payrolls are not uncommon. Conversely, users may choose to run payroll before the payroll deadline.
readOnly: true
Payroll-Processed-Date-Type:
type:
- string
- 'null'
description: The date at which the payroll was processed. Null if the payroll isn't processed yet.
readOnly: true
Payroll-Calculated-At-Type:
type:
- string
- 'null'
format: date-time
description: A timestamp of the last valid payroll calculation. Null if there isn't a valid calculation.
readOnly: true
Payroll-Payroll-Uuid-Type:
type: string
description: The UUID of the payroll.
readOnly: true
Payroll-Company-Uuid-Type:
type: string
description: The UUID of the company for the payroll.
readOnly: true
Payroll-Off-Cycle-Type:
type: boolean
description: Indicates whether the payroll is an off-cycle payroll
readOnly: true
Off-Cycle-Reason-Type:
anyOf:
- type: string
enum:
- Adhoc
- Benefit reversal
- Bonus
- Correction
- Dismissed employee
- Hired employee
- Wage correction
- Tax reconciliation
- Reversal
- Disability insurance distribution
- Transition from old pay schedule
- type: 'null'
description: The off-cycle reason. Only included for off-cycle payrolls.
readOnly: true
Auto-Pilot-Type:
type: boolean
description: Indicates whether the payroll is an auto pilot payroll
readOnly: true
Payroll-External-Type:
type: boolean
description: Indicates whether the payroll is an external payroll
readOnly: true
Payroll-Final-Termination-Payroll-Type:
type: boolean
description: Indicates whether the payroll is the final payroll for a terminated employee. Only included for off-cycle payrolls.
readOnly: true
Payroll-Skip-Regular-Deductions-Type:
type:
- boolean
- 'null'
description: Block regular deductions and contributions for this payroll. Only included for off-cycle payrolls.
readOnly: true
Payroll-Withholding-Pay-Period-Type:
description: The payment schedule tax rate the payroll is based on. Only included for off-cycle payrolls.
readOnly: true
anyOf:
- type: string
enum:
- Every week
- Every other week
- Twice per month
- Monthly
- Quarterly
- Semiannually
- Annually
- type: 'null'
Payroll-Fixed-Withholding-Rate-Type:
type:
- boolean
- 'null'
description: Enable taxes to be withheld at the IRS's required rate of 22% for federal income taxes. State income taxes will be taxed at the state's supplemental tax rate. Otherwise, we'll sum the entirety of the employee's wages and withhold taxes on the entire amount at the rate for regular wages. Only included for off-cycle payrolls.
readOnly: true
Payroll-Pay-Period-Type:
type: object
readOnly: true
properties:
start_date:
type:
- string
- 'null'
description: The start date, inclusive, of the pay period.
readOnly: true
end_date:
type:
- string
- 'null'
description: The start date, inclusive, of the pay period.
readOnly: true
pay_schedule_uuid:
type:
- string
- 'null'
description: The UUID of the pay schedule for the payroll.
readOnly: true
Payroll-Payroll-Status-Meta-Type:
type: object
description: Information about the payroll's status and expected dates
properties:
cancellable:
type: boolean
description: true if the payroll may be cancelled.
readOnly: true
expected_check_date:
type: string
description: The date an employee will be paid if the payroll is submitted now.
readOnly: true
initial_check_date:
type: string
description: The normal check date for the associated pay period.
readOnly: true
expected_debit_time:
type: string
description: The time the employer's account will be debited if the payroll is submitted now.
readOnly: true
payroll_late:
type: boolean
description: expected_check_date > initial_check_date.
readOnly: true
initial_debit_cutoff_time:
type: string
description: Payroll must be submitted at or before this time to avoid late payroll.
readOnly: true
Payroll-Totals-Type:
type: object
description: The subtotals for the payroll.
properties:
company_debit:
type: string
description: The total company debit for the payroll.
readOnly: true
net_pay_debit:
type: string
minLength: 1
description: The total company net pay for the payroll.
tax_debit:
type: string
description: The total tax debit for the payroll.
readOnly: true
reimbursement_debit:
type: string
description: The total reimbursement debit for the payroll.
readOnly: true
child_support_debit:
type: string
description: The total child support debit for the payroll.
readOnly: true
reimbursements:
type: string
description: The total reimbursements for the payroll.
readOnly: true
net_pay:
type: string
description: The net pay amount for the payroll.
readOnly: true
gross_pay:
type: string
description: The gross pay amount for the payroll.
readOnly: true
employee_bonuses:
type: string
description: The total employee bonuses amount for the payroll.
readOnly: true
employee_commissions:
type: string
description: The total employee commissions amount for the payroll.
readOnly: true
employee_cash_tips:
type: string
description: The total employee cash tips amount for the payroll.
readOnly: true
employee_paycheck_tips:
type: string
description: The total employee paycheck tips amount for the payroll.
readOnly: true
additional_earnings:
type: string
description: The total additional earnings amount for the payroll.
readOnly: true
owners_draw:
type: string
description: The total owner's draw for the payroll.
readOnly: true
check_amount:
type: string
description: The total check amount for the payroll.
readOnly: true
employer_taxes:
type: string
description: The total amount of employer paid taxes for the payroll.
readOnly: true
employee_taxes:
type: string
description: The total amount of employee paid taxes for the payroll.
readOnly: true
benefits:
type: string
description: The total amount of company contributed benefits for the payroll.
readOnly: true
employee_benefits_deductions:
type: string
description: The total amount of employee deducted benefits for the payroll.
readOnly: true
imputed_pay:
type: string
description: The total amount of imputed pay for the payroll.
readOnly: true
deferred_payroll_taxes:
type: string
description: The total amount of payroll taxes deferred for the payroll, such as allowed by the CARES act.
readOnly: true
other_deductions:
type: string
description: The total amount of deductions for the payroll.
readOnly: true
Payroll-Employee-Compensations-Included:
type: object
additionalProperties: true
properties:
taxes:
type: array
uniqueItems: false
description: An array of employer and employee taxes for the pay period. Only included for processed or calculated payrolls when `taxes` is present in the `include` parameter.
items:
type: object
properties:
name:
type: string
minLength: 1
employer:
type: boolean
amount:
type: number
minLength: 1
required:
- name
- employer
- amount
readOnly: true
readOnly: true
benefits:
type: array
uniqueItems: false
description: An array of employee benefits for the pay period. Benefits are only included for processed payroll when the include parameter is present.
items:
type: object
properties:
name:
type: string
readOnly: true
employee_deduction:
type: number
readOnly: true
company_contribution:
type: number
readOnly: true
imputed:
type: boolean
readOnly: true
readOnly: true
deductions:
type: array
uniqueItems: false
description: An array of employee deductions for the pay period. Only included when `deductions` is present in the `include` parameter.
items:
type: object
properties:
name:
type: string
description: The name of the deduction.
amount:
type: number
description: The amount of the deduction for the pay period.
amount_type:
type: string
description: The amount type of the deduction for the pay period. Only present for unprocessed payrolls.
enum:
- fixed
- percent
uuid:
type: string
description: The UUID of the deduction. Only present for unprocessed payrolls.
readOnly: true
updatable_via_payroll:
type: boolean
description: Whether the deduction can be updated via the payroll update endpoint. Only present for unprocessed payrolls.
readOnly: true
pay_adjustments:
type: array
uniqueItems: false
description: |
Overtime adjustments for workweeks that have earnings on more than one payroll.
When earnings on one payroll change the regular rate of pay for a workweek whose
overtime is paid on another payroll, the resulting difference in overtime pay is
reported here. For example, a bonus on this payroll for a workweek that had
overtime paid on an earlier payroll. Adjustment amounts are included in
`gross_pay` but are not repeated in `hourly_compensations`. Only present on
calculated or processed payrolls.
items:
type: object
properties:
name:
type: string
description: The compensation type the adjustment applies to (e.g. `Overtime`, `Double Overtime`).
amount:
type: string
format: float
description: The dollar amount of the adjustment.
readOnly: true
readOnly: true
Payroll-Employee-Compensations-Base-Type:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
excluded:
type: boolean
description: This employee will be excluded (skipped) from payroll calculation and will not be paid for the payroll. Cancelling a payroll would reset all employees' excluded back to false.
readOnly: true
first_name:
type:
- string
- 'null'
description: The first name of the employee. Requires `employees:read` scope.
readOnly: true
preferred_first_name:
type:
- string
- 'null'
description: The preferred first name of the employee. Requires `employees:read` scope.
readOnly: true
last_name:
type:
- string
- 'null'
description: The last name of the employee. Requires `employees:read` scope.
readOnly: true
gross_pay:
type:
- number
- 'null'
description: The employee's gross pay, equal to regular wages + cash tips + payroll tips + any other additional earnings + `pay_adjustments`, excluding imputed income.
readOnly: true
net_pay:
type:
- number
- 'null'
description: The employee's net pay, equal to gross_pay - employee taxes - employee deductions or garnishments - cash tips. This value is only available for processed payrolls.
readOnly: true
check_amount:
type:
- number
- 'null'
description: The employee's check amount, equal to net_pay + reimbursements. This value is only available for processed payrolls.
readOnly: true
payment_method:
description: The employee's compensation payment method. Is *only* `Historical` when retrieving external payrolls initially run outside of Gusto, then put into Gusto.
anyOf:
- type: string
enum:
- Direct Deposit
- Check
- Historical
- type: 'null'
memo:
type:
- string
- 'null'
description: Custom text that will be printed as a personal note to the employee on a paystub.
readOnly: true
fixed_compensations:
type: array
uniqueItems: false
description: An array of fixed compensations for the employee. Fixed compensations include tips, bonuses, and one time reimbursements. If this payroll has been processed, only fixed compensations with a value greater than 0.00 are returned. For an unprocessed payroll, all active fixed compensations are returned.
items:
type: object
properties:
name:
type: string
description: The name of the compensation. This also serves as the unique, immutable identifier for this compensation.
amount:
type: string
description: The amount of the compensation for the pay period.
job_uuid:
type: string
description: The UUID of the job for the compensation.
readOnly: true
breakdowns:
type: array
uniqueItems: false
description: |
Per-workweek amounts for this compensation, one entry per workweek
overlapping the pay period.
items:
type: object
properties:
start_date:
type: string
format: date
description: The start date of the workweek.
end_date:
type: string
format: date
description: The end date of the workweek.
amount:
type: string
format: float
description: The dollar amount for this workweek.
readOnly: true
hourly_compensations:
type: array
uniqueItems: false
description: An array of hourly compensations for the employee. Hourly compensations include regular, overtime, and double overtime hours. If this payroll has been processed, only hourly compensations with a value greater than 0.00 are returned. For an unprocessed payroll, all active hourly compensations are returned.
items:
type: object
properties:
name:
type: string
description: The name of the compensation. This also serves as the unique, immutable identifier for this compensation.
hours:
type: string
description: The number of hours to be compensated for this pay period.
amount:
type: string
description: The amount of the compensation. This field is only available after the payroll is calculated and cannot be used for updating hourly compensations.
job_uuid:
type: string
description: The UUID of the job for the compensation.
readOnly: true
compensation_multiplier:
type: number
description: The amount multiplied by the base rate to calculate total compensation per hour worked.
readOnly: true
flsa_status:
type: string
description: The FLSA Status of the employee's primary job compensation
readOnly: true
breakdowns:
type: array
uniqueItems: false
description: |
Per-workweek hours for this compensation, one entry per workweek
overlapping the pay period.
items:
type: object
properties:
start_date:
type: string
format: date
description: The start date of the workweek.
end_date:
type: string
format: date
description: The end date of the workweek.
hours:
type: string
format: float
description: The number of hours worked during this workweek.
readOnly: true
paid_time_off:
type: array
uniqueItems: false
description: An array of all paid time off the employee is eligible for this pay period.
items:
type: object
properties:
name:
type: string
description: The name of the PTO. This also serves as the unique, immutable identifier for the PTO.
hours:
type: string
description: The hours of this PTO taken during the pay period.
final_payout_unused_hours_input:
type:
- string
- 'null'
description: The outstanding hours paid upon termination. This field is only applicable for termination payrolls.
approved_request_hours:
type:
- string
- 'null'
description: 'Total hours of approved time off requests overlapping this pay period for this time-off policy. Only populated on unprocessed (draft) payrolls; absent on processed payrolls. Read-only.
'
readOnly: true
reimbursements:
type: array
uniqueItems: false
description: An array of reimbursements for the employee.
items:
type: object
properties:
amount:
type: string
description: The dollar amount of the reimbursement for the pay period.
description:
type:
- string
- 'null'
description: The description of the reimbursement. Null for unnamed reimbursements.
uuid:
type:
- string
- 'null'
description: The UUID of the reimbursement. Null for unnamed reimbursements. This field is only available for unprocessed payrolls.
readOnly: true
recurring:
type: boolean
description: Whether the reimbursement is recurring. This field is only available for unprocessed payrolls.
readOnly: true
required:
- amount
- description
custom_withholdings:
type: object
description: |
The one-time custom withholding overrides applied to this payroll for this employee.
`federal` is null when no federal one-time override is set; `state` is an empty
array when no state one-time overrides are set.
properties:
federal:
type:
- object
- 'null'
description: Federal one-time custom withholding override applied to this payroll.
properties:
override_type:
type: string
enum:
- one_time
description: Override mode. Only `one_time` is currently exposed.
amount:
type: string
description: The amount that was withheld for this payroll.
amount_type:
type: string
enum:
- fixed
- percent
description: How to interpret the amount.
state:
type: array
description: State one-time custom withholding overrides applied to this payroll, one entry per state field.
items:
type: object
properties:
employee_state_field_uuid:
type: string
description: The UUID of the EmployeeStateField this withholding applies to.
override_type:
type: string
enum:
- one_time
description: Override mode. Only `one_time` is currently exposed.
amount:
type: string
description: The amount that was withheld for this payroll.
amount_type:
type: string
enum:
- fixed
- percent
description: How to interpret the amount.
Payroll-Employee-Compensations-Type:
allOf:
- "$ref": "#/components/schemas/Payroll-Employee-Compensations-Base-Type"
- "$ref": "#/components/schemas/Versionable"
- type: object
properties:
version:
description: The current version of this employee compensation. This field is only available for prepared payrolls. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
deductions:
type: array
uniqueItems: false
description: An array of deductions for the employee. This field is included by default for regular payrolls in version `v2025-06-15` and later.
items:
type: object
properties:
name:
type: string
description: The name of the deduction.
amount:
type: number
description: The amount of the deduction for the pay period.
amount_type:
type: string
description: The amount type of the deduction for the pay period. Only present for unprocessed payrolls.
enum:
- fixed
- percent
uuid:
type: string
description: The UUID of the deduction. Only present for unprocessed payrolls.
updatable_via_payroll:
type: boolean
description: Whether the deduction can be updated via the payroll update endpoint. Only present for unprocessed payrolls.
readOnly: true
Payroll-Unprocessed-Employee-Compensations-Type:
allOf:
- "$ref": "#/components/schemas/Payroll-Employee-Compensations-Base-Type"
- "$ref": "#/components/schemas/Versionable"
- type: object
properties:
version:
description: The current version of this employee compensation. This field is only available for prepared payrolls. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/api-fundamentals#optimistic-version-control) for information on how to use this field.
Payroll-Company-Taxes-Type:
type: array
uniqueItems: false
description: An array of taxes applicable to this payroll in addition to taxes included in `employee_compensations`. Only included for processed or calculated payrolls when `taxes` is present in the `include` parameter.
items:
type: object
properties:
name:
type: string
description: The tax name
employer:
type: boolean
description: Whether this tax is an employer or employee tax
amount:
type: string
description: The amount of this tax for the payroll
Payroll-Taxes-Type:
type: array
uniqueItems: false
description: An array of tax totals applicable to this payroll. Only included for processed or calculated payrolls when `payroll_taxes` is present in the `include` parameter.
items:
type: object
properties:
name:
type: string
description: The tax name
employer:
type: boolean
description: Whether this tax is an employer or employee tax
amount:
type: number
description: The total tax for the payroll
Payroll-Payment-Speed-Changed-Type:
type: object
description: Only applicable when a payroll is moved to four day processing instead of fast ach.
properties:
original_check_date:
type: string
description: Original check date when fast ach applies.
readOnly: true
current_check_date:
type: string
description: Current check date.
readOnly: true
original_debit_date:
type: string
description: Original debit date when fast ach applies.
readOnly: true
current_debit_date:
type: string
description: Current debit date.
readOnly: true
reason:
type: string
description: The reason why the payroll is moved to four day.
readOnly: true
Created-At-Type:
type: string
format: date-time
description: Datetime for when the resource was created.
readOnly: true
Payroll-Submission-Blocker-Type:
type: object
description: A blocker that prevents payment submission.
properties:
blocker_type:
type: string
description: The type of blocker that's blocking the payment submission.
readOnly: true
blocker_name:
type: string
description: The name of the submission blocker.
readOnly: true
unblock_options:
type: array
uniqueItems: true
items:
type: object
properties:
unblock_type:
type: string
description: The type of unblock option for the submission blocker.
readOnly: true
check_date:
type: string
description: The payment check date associated with the unblock option.
readOnly: true
metadata:
type: object
additionalProperties: true
description: Additional data associated with the unblock option.
readOnly: true
description: The available options to unblock a submission blocker.
readOnly: true
selected_option:
type:
- string
- 'null'
description: The unblock option that's been selected to resolve the submission blocker.
readOnly: false
status:
type: string
description: The status of the submission blocker.
enum:
- unresolved
- resolved
readOnly: true
Payroll-Submission-Blocker-Request-Type:
type: object
description: Request object for resolving a submission blocker. Each submission_blocker should include a selected unblock option.
required:
- blocker_type
- selected_option
properties:
blocker_type:
type: string
description: The type of submission_blocker that is blocking the payment.
selected_option:
type: string
description: The selected option to unblock the payment's submission_blocker.
Payroll-Submission-Blockers-Type:
type: array
description: Only included for processed or calculated payrolls
uniqueItems: true
items:
"$ref": "#/components/schemas/Payroll-Submission-Blocker-Type"
Payroll-Credit-Blocker-Unblock-Option-Submit-Wire:
type: object
description: Unblock option to resolve a credit blocker by submitting a wire transfer
required:
- unblock_type
- check_date
- metadata
properties:
unblock_type:
type: string
enum:
- submit_wire
description: The type of unblock option for the credit blocker
readOnly: true
check_date:
type: string
description: The payment check date associated with the unblock option
readOnly: true
metadata:
type: object
required:
- wire_in_amount
- wire_in_deadline
- wire_in_request_uuid
properties:
wire_in_amount:
type: string
description: The amount to be wired in (decimal string)
readOnly: true
wire_in_deadline:
type: string
format: date-time
description: Deadline for the wire transfer to be received
readOnly: true
wire_in_request_uuid:
type: string
description: UUID of the wire in request
readOnly: true
readOnly: true
Payroll-Credit-Blocker-Unblock-Option-Submit-Bank-Screenshot:
type: object
description: Unblock option to resolve a credit blocker by submitting a bank screenshot
required:
- unblock_type
- check_date
- metadata
properties:
unblock_type:
type: string
enum:
- submit_bank_screenshot
description: The type of unblock option for the credit blocker
readOnly: true
check_date:
type: string
description: The payment check date associated with the unblock option
readOnly: true
metadata:
type: object
required:
- information_request_uuid
properties:
information_request_uuid:
type: string
description: UUID of the information request
readOnly: true
bank_account_last_four_digits:
type:
- string
- 'null'
description: Last 4 digits of the bank account number for the bank screenshot RFI
readOnly: true
readOnly: true
Payroll-Credit-Blocker-Unblock-Option-Respond-To-High-Risk-Fraud-Rfi:
type: object
description: Unblock option to resolve a credit blocker by responding to high risk fraud RFI
required:
- unblock_type
- check_date
- metadata
properties:
unblock_type:
type: string
enum:
- respond_to_high_risk_fraud_rfi
description: The type of unblock option for the credit blocker
readOnly: true
check_date:
type: string
description: The payment check date associated with the unblock option
readOnly: true
metadata:
type: object
required:
- information_request_uuid
properties:
information_request_uuid:
type: string
description: UUID of the information request
readOnly: true
readOnly: true
Payroll-Credit-Blocker-Unblock-Option-Wait-For-Reverse-Wire:
type: object
description: Unblock option to resolve a credit blocker by waiting for reverse wire
required:
- unblock_type
- check_date
- metadata
properties:
unblock_type:
type: string
enum:
- wait_for_reverse_wire
description: The type of unblock option for the credit blocker
readOnly: true
check_date:
type: string
description: The payment check date associated with the unblock option
readOnly: true
metadata:
type: object
properties:
reverse_wire_detail_id:
type:
- integer
- 'null'
description: ID of the reverse wire detail
readOnly: true
bank_account_last_four_digits:
type:
- string
- 'null'
description: Last 4 digits of the bank account number for the reverse wire
readOnly: true
readOnly: true
Payroll-Credit-Blocker-Type:
type: object
description: A blocker that prevents payment crediting.
properties:
blocker_type:
type: string
description: The type of blocker that's blocking the payment from being credited.
readOnly: true
blocker_name:
type: string
description: The name of the credit blocker.
readOnly: true
unblock_options:
type: array
uniqueItems: true
items:
oneOf:
- "$ref": "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Submit-Wire"
- "$ref": "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Submit-Bank-Screenshot"
- "$ref": "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Respond-To-High-Risk-Fraud-Rfi"
- "$ref": "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Wait-For-Reverse-Wire"
discriminator:
propertyName: unblock_type
mapping:
submit_wire: "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Submit-Wire"
submit_bank_screenshot: "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Submit-Bank-Screenshot"
respond_to_high_risk_fraud_rfi: "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Respond-To-High-Risk-Fraud-Rfi"
wait_for_reverse_wire: "#/components/schemas/Payroll-Credit-Blocker-Unblock-Option-Wait-For-Reverse-Wire"
description: The available options to unblock a credit blocker.
readOnly: true
selected_option:
type:
- string
- 'null'
description: The unblock option that's been selected to resolve the credit blocker.
readOnly: false
status:
type: string
description: The status of the credit blocker
enum:
- unresolved
- pending_review
- resolved
- failed
Payroll-Credit-Blockers-Type:
type: array
description: Only included for processed payrolls
uniqueItems: true
items:
"$ref": "#/components/schemas/Payroll-Credit-Blocker-Type"
Payroll-Processing-Request:
type:
- object
- 'null'
properties:
status:
type: string
description: The status of the payroll processing request
readOnly: true
enum:
- calculating
- calculate_success
- submitting
- submit_success
- processing_failed
errors:
description: Errors that occurred during async payroll processing
readOnly: true
type: array
items:
"$ref": "#/components/schemas/Entity-Error-Object"
Payroll-Fixed-Compensation-Types-Type:
type: array
items:
type: object
readOnly: true
properties:
name:
description: The name of an available type of fixed compensation.
type: string
readOnly: true
Payroll-Show:
type: object
x-examples:
success_status:
uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
employee_compensations: []
submission_blockers: []
credit_blockers: []
payroll_uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
company_uuid: 9aa93530-43d5-484e-b608-33214109420d
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-16'
calculated_at: '2025-06-16T16:58:03Z'
pay_period:
start_date: '2025-05-25'
end_date: '2025-06-09'
pay_schedule_uuid: 40ff5990-0191-4796-9717-32f7dd3e94d5
check_date: '2025-06-13'
external: false
payroll_deadline: '2025-06-17T23:00:00Z'
totals:
employee_bonuses: '0.00'
employee_commissions: '0.00'
employee_cash_tips: '0.00'
employee_paycheck_tips: '0.00'
additional_earnings: '0.00'
owners_draw: '0.00'
benefits: '0.00'
check_amount: '0.00'
child_support_debit: '0.00'
company_debit: '0.00'
deferred_payroll_taxes: '0.00'
employee_benefits_deductions: '0.00'
employee_taxes: '0.00'
employer_taxes: '0.00'
gross_pay: '0.00'
imputed_pay: '0.00'
net_pay: '0.00'
net_pay_debit: '0.00'
other_deductions: '0.00'
reimbursement_debit: '0.00'
reimbursements: '0.00'
tax_debit: '0.00'
processing_request:
status: submit_success
errors: []
created_at: '2025-06-16T16:58:03Z'
partner_owned_disbursement:
with_submit_wire_credit_blocker:
uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
employee_compensations: []
submission_blockers: []
credit_blockers:
- blocker_type: waiting_for_wire_in
blocker_name: Waiting for Wire In
unblock_options:
- unblock_type: submit_wire
check_date: '2025-06-13'
metadata:
wire_in_amount: '15000.00'
wire_in_deadline: '2025-06-12T18:00:00Z'
wire_in_request_uuid: c1234567-89ab-cdef-0123-456789abcdef
selected_option:
status: unresolved
payroll_uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
company_uuid: 9aa93530-43d5-484e-b608-33214109420d
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-16'
calculated_at: '2025-06-16T16:58:03Z'
pay_period:
start_date: '2025-05-25'
end_date: '2025-06-09'
pay_schedule_uuid: 40ff5990-0191-4796-9717-32f7dd3e94d5
check_date: '2025-06-13'
external: false
payroll_deadline: '2025-06-17T23:00:00Z'
totals:
employee_bonuses: '0.00'
employee_commissions: '0.00'
employee_cash_tips: '0.00'
employee_paycheck_tips: '0.00'
additional_earnings: '0.00'
owners_draw: '0.00'
benefits: '0.00'
check_amount: '0.00'
child_support_debit: '0.00'
company_debit: '0.00'
deferred_payroll_taxes: '0.00'
employee_benefits_deductions: '0.00'
employee_taxes: '0.00'
employer_taxes: '0.00'
gross_pay: '0.00'
imputed_pay: '0.00'
net_pay: '0.00'
net_pay_debit: '0.00'
other_deductions: '0.00'
reimbursement_debit: '0.00'
reimbursements: '0.00'
tax_debit: '0.00'
processing_request:
status: submit_success
errors: []
created_at: '2025-06-16T16:58:03Z'
partner_owned_disbursement:
with_submit_bank_screenshot_credit_blocker:
uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
employee_compensations: []
submission_blockers: []
credit_blockers:
- blocker_type: waiting_for_bank_screenshot
blocker_name: Waiting for Bank Screenshot
unblock_options:
- unblock_type: submit_bank_screenshot
check_date: '2025-06-13'
metadata:
information_request_uuid: d2234567-89ab-cdef-0123-456789abcdef
selected_option:
status: unresolved
payroll_uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
company_uuid: 9aa93530-43d5-484e-b608-33214109420d
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-16'
calculated_at: '2025-06-16T16:58:03Z'
pay_period:
start_date: '2025-05-25'
end_date: '2025-06-09'
pay_schedule_uuid: 40ff5990-0191-4796-9717-32f7dd3e94d5
check_date: '2025-06-13'
external: false
payroll_deadline: '2025-06-17T23:00:00Z'
totals:
employee_bonuses: '0.00'
employee_commissions: '0.00'
employee_cash_tips: '0.00'
employee_paycheck_tips: '0.00'
additional_earnings: '0.00'
owners_draw: '0.00'
benefits: '0.00'
check_amount: '0.00'
child_support_debit: '0.00'
company_debit: '0.00'
deferred_payroll_taxes: '0.00'
employee_benefits_deductions: '0.00'
employee_taxes: '0.00'
employer_taxes: '0.00'
gross_pay: '0.00'
imputed_pay: '0.00'
net_pay: '0.00'
net_pay_debit: '0.00'
other_deductions: '0.00'
reimbursement_debit: '0.00'
reimbursements: '0.00'
tax_debit: '0.00'
processing_request:
status: submit_success
errors: []
created_at: '2025-06-16T16:58:03Z'
partner_owned_disbursement:
with_respond_to_high_risk_fraud_rfi_credit_blocker:
uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
employee_compensations: []
submission_blockers: []
credit_blockers:
- blocker_type: waiting_for_high_risk_fraud_rfi
blocker_name: Waiting for High Risk Fraud RFI
unblock_options:
- unblock_type: respond_to_high_risk_fraud_rfi
check_date: '2025-06-13'
metadata:
information_request_uuid: e3234567-89ab-cdef-0123-456789abcdef
selected_option:
status: pending_review
payroll_uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
company_uuid: 9aa93530-43d5-484e-b608-33214109420d
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-16'
calculated_at: '2025-06-16T16:58:03Z'
pay_period:
start_date: '2025-05-25'
end_date: '2025-06-09'
pay_schedule_uuid: 40ff5990-0191-4796-9717-32f7dd3e94d5
check_date: '2025-06-13'
external: false
payroll_deadline: '2025-06-17T23:00:00Z'
totals:
employee_bonuses: '0.00'
employee_commissions: '0.00'
employee_cash_tips: '0.00'
employee_paycheck_tips: '0.00'
additional_earnings: '0.00'
owners_draw: '0.00'
benefits: '0.00'
check_amount: '0.00'
child_support_debit: '0.00'
company_debit: '0.00'
deferred_payroll_taxes: '0.00'
employee_benefits_deductions: '0.00'
employee_taxes: '0.00'
employer_taxes: '0.00'
gross_pay: '0.00'
imputed_pay: '0.00'
net_pay: '0.00'
net_pay_debit: '0.00'
other_deductions: '0.00'
reimbursement_debit: '0.00'
reimbursements: '0.00'
tax_debit: '0.00'
processing_request:
status: submit_success
errors: []
created_at: '2025-06-16T16:58:03Z'
partner_owned_disbursement:
with_wait_for_reverse_wire_credit_blocker:
uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
employee_compensations: []
submission_blockers: []
credit_blockers:
- blocker_type: waiting_for_reverse_wire
blocker_name: Waiting for Reverse Wire
unblock_options:
- unblock_type: wait_for_reverse_wire
check_date: '2025-06-13'
metadata:
reverse_wire_detail_id: 12345
bank_account_last_four_digits: '1234'
selected_option:
status: resolved
payroll_uuid: b441a30b-2adb-489e-b7b7-9d094011a3f8
company_uuid: 9aa93530-43d5-484e-b608-33214109420d
off_cycle: false
auto_pilot: false
processed: true
processed_date: '2025-06-16'
calculated_at: '2025-06-16T16:58:03Z'
pay_period:
start_date: '2025-05-25'
end_date: '2025-06-09'
pay_schedule_uuid: 40ff5990-0191-4796-9717-32f7dd3e94d5
check_date: '2025-06-13'
external: false
payroll_deadline: '2025-06-17T23:00:00Z'
totals:
employee_bonuses: '0.00'
employee_commissions: '0.00'
employee_cash_tips: '0.00'
employee_paycheck_tips: '0.00'
additional_earnings: '0.00'
owners_draw: '0.00'
benefits: '0.00'
check_amount: '0.00'
child_support_debit: '0.00'
company_debit: '0.00'
deferred_payroll_taxes: '0.00'
employee_benefits_deductions: '0.00'
employee_taxes: '0.00'
employer_taxes: '0.00'
gross_pay: '0.00'
imputed_pay: '0.00'
net_pay: '0.00'
net_pay_debit: '0.00'
other_deductions: '0.00'
reimbursement_debit: '0.00'
reimbursements: '0.00'
tax_debit: '0.00'
processing_request:
status: submit_success
errors: []
created_at: '2025-06-16T16:58:03Z'
partner_owned_disbursement:
properties:
payroll_deadline:
"$ref": "#/components/schemas/Payroll-Deadline-Type"
check_date:
"$ref": "#/components/schemas/Payroll-Check-Date-Type"
processed:
"$ref": "#/components/schemas/Payroll-Processed-Type"
processed_date:
"$ref": "#/components/schemas/Payroll-Processed-Date-Type"
calculated_at:
"$ref": "#/components/schemas/Payroll-Calculated-At-Type"
uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
payroll_uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
company_uuid:
"$ref": "#/components/schemas/Payroll-Company-Uuid-Type"
off_cycle:
"$ref": "#/components/schemas/Payroll-Off-Cycle-Type"
off_cycle_reason:
"$ref": "#/components/schemas/Off-Cycle-Reason-Type"
auto_pilot:
"$ref": "#/components/schemas/Auto-Pilot-Type"
external:
"$ref": "#/components/schemas/Payroll-External-Type"
final_termination_payroll:
"$ref": "#/components/schemas/Payroll-Final-Termination-Payroll-Type"
withholding_pay_period:
"$ref": "#/components/schemas/Payroll-Withholding-Pay-Period-Type"
skip_regular_deductions:
"$ref": "#/components/schemas/Payroll-Skip-Regular-Deductions-Type"
fixed_withholding_rate:
"$ref": "#/components/schemas/Payroll-Fixed-Withholding-Rate-Type"
pay_period:
"$ref": "#/components/schemas/Payroll-Pay-Period-Type"
payroll_status_meta:
"$ref": "#/components/schemas/Payroll-Payroll-Status-Meta-Type"
totals:
"$ref": "#/components/schemas/Payroll-Totals-Type"
company_taxes:
"$ref": "#/components/schemas/Payroll-Company-Taxes-Type"
payroll_taxes:
"$ref": "#/components/schemas/Payroll-Taxes-Type"
payment_speed_changed:
"$ref": "#/components/schemas/Payroll-Payment-Speed-Changed-Type"
created_at:
"$ref": "#/components/schemas/Created-At-Type"
submission_blockers:
"$ref": "#/components/schemas/Payroll-Submission-Blockers-Type"
credit_blockers:
"$ref": "#/components/schemas/Payroll-Credit-Blockers-Type"
processing_request:
"$ref": "#/components/schemas/Payroll-Processing-Request"
partner_owned_disbursement:
"$ref": "#/components/schemas/Payroll-Partner-Owned-Disbursement-Type"
employee_compensations:
type: array
uniqueItems: false
items:
type: object
allOf:
- "$ref": "#/components/schemas/Payroll-Employee-Compensations-Type"
- "$ref": "#/components/schemas/Payroll-Employee-Compensations-Included"
Payroll-Unprocessed:
description: An unprocessed payroll with employee compensations.
x-examples:
success_status:
uuid: 4428f108-e46e-4ab6-ba20-03cea031cfc0
employee_compensations: []
payroll_uuid: 4428f108-e46e-4ab6-ba20-03cea031cfc0
company_uuid: 42b5333b-ee39-493a-bf7e-f41f2bd67848
payroll_status_meta:
cancellable: false
expected_check_date: '2025-06-17'
initial_check_date: '2025-06-17'
expected_debit_time: '2025-06-11T23:00:00Z'
payroll_late: false
initial_debit_cutoff_time: '2025-06-11T23:00:00Z'
off_cycle: true
auto_pilot: false
off_cycle_reason: Bonus
withholding_pay_period: Twice per month
skip_regular_deductions: true
fixed_withholding_rate: true
final_termination_payroll: false
processed: false
processed_date:
calculated_at:
pay_period:
start_date: '2025-06-10'
end_date: '2025-06-16'
pay_schedule_uuid:
check_date: '2025-06-17'
external: false
payroll_deadline: '2025-06-11T23:00:00Z'
fixed_compensation_types:
- name: Bonus
- name: Commission
- name: Paycheck Tips
- name: Cash Tips
- name: Correction Payment
- name: Reimbursement
created_at: '2025-06-11T19:40:52Z'
partner_owned_disbursement:
type: object
properties:
payroll_deadline:
"$ref": "#/components/schemas/Payroll-Deadline-Type"
check_date:
"$ref": "#/components/schemas/Payroll-Check-Date-Type"
processed:
"$ref": "#/components/schemas/Payroll-Processed-Type"
processed_date:
"$ref": "#/components/schemas/Payroll-Processed-Date-Type"
calculated_at:
"$ref": "#/components/schemas/Payroll-Calculated-At-Type"
uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
payroll_uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
company_uuid:
"$ref": "#/components/schemas/Payroll-Company-Uuid-Type"
off_cycle:
"$ref": "#/components/schemas/Payroll-Off-Cycle-Type"
off_cycle_reason:
"$ref": "#/components/schemas/Off-Cycle-Reason-Type"
auto_pilot:
"$ref": "#/components/schemas/Auto-Pilot-Type"
external:
"$ref": "#/components/schemas/Payroll-External-Type"
final_termination_payroll:
"$ref": "#/components/schemas/Payroll-Final-Termination-Payroll-Type"
withholding_pay_period:
"$ref": "#/components/schemas/Payroll-Withholding-Pay-Period-Type"
skip_regular_deductions:
"$ref": "#/components/schemas/Payroll-Skip-Regular-Deductions-Type"
fixed_withholding_rate:
"$ref": "#/components/schemas/Payroll-Fixed-Withholding-Rate-Type"
pay_period:
"$ref": "#/components/schemas/Payroll-Pay-Period-Type"
workweeks:
type:
- array
- 'null'
description: |
The workweeks overlapping this payroll's pay period, one entry per workweek.
Null when workweek boundaries can't be determined for this payroll (e.g. some
off-cycle payrolls without a defined payment period).
items:
type: object
properties:
start_date:
type: string
format: date
description: The start date of the workweek.
end_date:
type: string
format: date
description: The end date of the workweek.
readOnly: true
payroll_status_meta:
"$ref": "#/components/schemas/Payroll-Payroll-Status-Meta-Type"
employee_compensations:
type: array
uniqueItems: false
items:
"$ref": "#/components/schemas/Payroll-Unprocessed-Employee-Compensations-Type"
payment_speed_changed:
"$ref": "#/components/schemas/Payroll-Payment-Speed-Changed-Type"
created_at:
"$ref": "#/components/schemas/Created-At-Type"
fixed_compensation_types:
"$ref": "#/components/schemas/Payroll-Fixed-Compensation-Types-Type"
processing_request:
"$ref": "#/components/schemas/Payroll-Processing-Request"
partner_owned_disbursement:
"$ref": "#/components/schemas/Payroll-Partner-Owned-Disbursement-Type"
Payroll-Prepared:
description: The response from preparing a payroll for update. Contains refreshed employee compensations, updated payroll dates, and version information needed for subsequent payroll updates.
x-examples:
success_status:
uuid: 4428f108-e46e-4ab6-ba20-03cea031cfc0
payroll_uuid: 4428f108-e46e-4ab6-ba20-03cea031cfc0
company_uuid: 42b5333b-ee39-493a-bf7e-f41f2bd67848
payroll_status_meta:
cancellable: false
expected_check_date: '2025-06-20'
initial_check_date: '2025-06-20'
expected_debit_time: '2025-06-18T23:00:00Z'
payroll_late: false
initial_debit_cutoff_time: '2025-06-18T23:00:00Z'
off_cycle: false
auto_pilot: false
processed: false
processed_date:
calculated_at:
pay_period:
start_date: '2025-06-02'
end_date: '2025-06-15'
pay_schedule_uuid: 2c4e6a8b-1d3f-4a5c-9e7b-0f2d4c6a8e1b
workweeks:
- start_date: '2025-06-02'
end_date: '2025-06-08'
- start_date: '2025-06-09'
end_date: '2025-06-15'
check_date: '2025-06-20'
external: false
payroll_deadline: '2025-06-18T23:00:00Z'
fixed_compensation_types:
- name: Bonus
- name: Commission
- name: Paycheck Tips
- name: Cash Tips
- name: Correction Payment
- name: Reimbursement
created_at: '2025-06-11T19:40:52Z'
partner_owned_disbursement:
processing_request:
employee_compensations:
- employee_uuid: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
version: 3f9a1c7e5b2d4086a1e3c5b7d9f02468
excluded: false
first_name: Alex
preferred_first_name: Alex
last_name: Rivera
payment_method: Direct Deposit
memo:
gross_pay: 2837.5
hourly_compensations:
- flsa_status: Nonexempt
name: Regular Hours
job_uuid: 6f1e2d3c-4b5a-4968-8776-655443322110
compensation_multiplier: 1.0
hours: '80.000'
breakdowns:
- start_date: '2025-06-02'
end_date: '2025-06-08'
hours: '40.000'
- start_date: '2025-06-09'
end_date: '2025-06-15'
hours: '40.000'
- flsa_status: Nonexempt
name: Overtime
job_uuid: 6f1e2d3c-4b5a-4968-8776-655443322110
compensation_multiplier: 1.5
hours: '5.000'
breakdowns:
- start_date: '2025-06-02'
end_date: '2025-06-08'
hours: '2.000'
- start_date: '2025-06-09'
end_date: '2025-06-15'
hours: '3.000'
- flsa_status: Nonexempt
name: Double overtime
job_uuid: 6f1e2d3c-4b5a-4968-8776-655443322110
compensation_multiplier: 2.0
hours: '0.000'
breakdowns: []
fixed_compensations:
- name: Bonus
amount: '500.00'
job_uuid: 6f1e2d3c-4b5a-4968-8776-655443322110
breakdowns:
- start_date: '2025-06-02'
end_date: '2025-06-08'
amount: '250.00'
- start_date: '2025-06-09'
end_date: '2025-06-15'
amount: '250.00'
- name: Commission
amount: '150.00'
job_uuid: 6f1e2d3c-4b5a-4968-8776-655443322110
paid_time_off: []
reimbursements: []
deductions: []
custom_withholdings:
federal:
state: []
with_approved_request_hours:
uuid: 4428f108-e46e-4ab6-ba20-03cea031cfc0
payroll_uuid: 4428f108-e46e-4ab6-ba20-03cea031cfc0
company_uuid: 42b5333b-ee39-493a-bf7e-f41f2bd67848
processed: false
pay_period:
start_date: '2025-06-10'
end_date: '2025-06-16'
pay_schedule_uuid:
workweeks:
- start_date: '2025-06-10'
end_date: '2025-06-15'
- start_date: '2025-06-16'
end_date: '2025-06-16'
check_date: '2025-06-17'
employee_compensations:
- employee_uuid: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
paid_time_off:
- name: Vacation Hours
hours: '0.0'
approved_request_hours: '8.0'
type: object
properties:
payroll_deadline:
"$ref": "#/components/schemas/Payroll-Deadline-Type"
check_date:
"$ref": "#/components/schemas/Payroll-Check-Date-Type"
processed:
"$ref": "#/components/schemas/Payroll-Processed-Type"
processed_date:
"$ref": "#/components/schemas/Payroll-Processed-Date-Type"
calculated_at:
"$ref": "#/components/schemas/Payroll-Calculated-At-Type"
uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
payroll_uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
company_uuid:
"$ref": "#/components/schemas/Payroll-Company-Uuid-Type"
off_cycle:
"$ref": "#/components/schemas/Payroll-Off-Cycle-Type"
off_cycle_reason:
"$ref": "#/components/schemas/Off-Cycle-Reason-Type"
auto_pilot:
"$ref": "#/components/schemas/Auto-Pilot-Type"
external:
"$ref": "#/components/schemas/Payroll-External-Type"
final_termination_payroll:
"$ref": "#/components/schemas/Payroll-Final-Termination-Payroll-Type"
withholding_pay_period:
"$ref": "#/components/schemas/Payroll-Withholding-Pay-Period-Type"
skip_regular_deductions:
"$ref": "#/components/schemas/Payroll-Skip-Regular-Deductions-Type"
fixed_withholding_rate:
"$ref": "#/components/schemas/Payroll-Fixed-Withholding-Rate-Type"
pay_period:
"$ref": "#/components/schemas/Payroll-Pay-Period-Type"
workweeks:
type:
- array
- 'null'
description: |
The workweeks overlapping this payroll's pay period, one entry per workweek.
Null when workweek boundaries can't be determined for this payroll (e.g. some
off-cycle payrolls without a defined payment period).
items:
type: object
properties:
start_date:
type: string
format: date
description: The start date of the workweek.
end_date:
type: string
format: date
description: The end date of the workweek.
readOnly: true
payroll_status_meta:
"$ref": "#/components/schemas/Payroll-Payroll-Status-Meta-Type"
employee_compensations:
type: array
uniqueItems: false
items:
"$ref": "#/components/schemas/Payroll-Employee-Compensations-Type"
payment_speed_changed:
"$ref": "#/components/schemas/Payroll-Payment-Speed-Changed-Type"
created_at:
"$ref": "#/components/schemas/Created-At-Type"
fixed_compensation_types:
"$ref": "#/components/schemas/Payroll-Fixed-Compensation-Types-Type"
processing_request:
"$ref": "#/components/schemas/Payroll-Processing-Request"
partner_owned_disbursement:
"$ref": "#/components/schemas/Payroll-Partner-Owned-Disbursement-Type"
Payroll-Receipt:
type: object
x-examples:
success_status:
totals:
company_debit: '0.00'
net_pay_debit: '0.00'
child_support_debit: '0.00'
reimbursement_debit: '0.00'
tax_debit: '0.00'
taxes: []
employee_compensations: []
licensee:
name: Gusto, Zenpayroll Inc.
address: 525 20th St
city: San Francisco
state: CA
postal_code: '94107'
phone_number: '4157778888'
payroll_uuid: 9f624c0d-0d4f-499a-993a-846dfa47a48e
company_uuid: '0481a066-e26a-465b-a2c1-933bd5b03a69'
name_of_sender: Kiehn, Conroy and Prohaska
name_of_recipient: Payroll Recipients
recipient_notice: Payroll recipients include the employees listed below plus the tax agencies for the taxes listed below.
debit_date: '2025-06-12'
license: ZenPayroll, Inc., dba Gusto is a licensed money transmitter. For more about Gusto’s licenses and your state-specific rights to request information, submit complaints, dispute errors, or cancel transactions, visit our license page.
license_uri: https://gusto.com/about/licenses
right_to_refund: https://gusto.com/about/licenses
liability_of_licensee: https://gusto.com/about/licenses
properties:
payroll_uuid:
type: string
description: A unique identifier of the payroll receipt.
company_uuid:
type: string
description: A unique identifier of the company for the payroll.
name_of_sender:
type: string
description: The name of the company by whom the payroll was paid
name_of_recipient:
type: string
description: Always the fixed string "Payroll Recipients"
recipient_notice:
type: string
description: Always the fixed string "Payroll recipients include the employees listed below plus the tax agencies for the taxes listed below."
debit_date:
type: string
description: The debit or funding date for the payroll
license:
type: string
description: Always the fixed string "ZenPayroll, Inc., dba Gusto is a licensed money transmitter. For more about Gusto’s licenses and your state-specific rights to request information, submit complaints, dispute errors, or cancel transactions, visit our license page."
license_uri:
type: string
description: URL for the license information for the licensed payroll processor. Always the fixed string "https://gusto.com/about/licenses"
right_to_refund:
type: string
description: ''
liability_of_licensee:
type: string
description: ''
totals:
type: object
description: The subtotals for the payroll.
properties:
company_debit:
type: string
format: float
description: The total company debit for the payroll.
net_pay_debit:
type: string
format: float
description: The total company net pay for the payroll.
child_support_debit:
type: string
format: float
description: The total child support debit for the payroll.
reimbursement_debit:
type: string
format: float
description: The total reimbursements for the payroll.
tax_debit:
type: string
format: float
description: The total tax debit for the payroll.
taxes:
type: array
description: An array of totaled employer and employee taxes for the pay period.
items:
type: object
properties:
name:
type: string
description: The amount paid for this tax.
amount:
type: string
format: float
description: The total amount paid by both employer and employee for this tax.
employee_compensations:
type: array
description: An array of employee compensations and withholdings for this payroll
items:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee.
employee_first_name:
type: string
description: The first name of the employee.
employee_last_name:
type: string
description: The last name of the employee.
payment_method:
type: string
description: The employee's compensation payment method.
enum:
- Direct Deposit
- Check
net_pay:
type: string
format: float
description: The employee's net pay. Net pay paid by check is available for reference but is not included in the `["totals"]["net_pay_debit"]` amount.
total_tax:
type: string
format: float
description: The total of employer and employee taxes for the pay period.
total_garnishments:
type: string
format: float
description: The total garnishments for the pay period.
child_support_garnishment:
type: string
format: float
description: The total child support garnishment for the pay period.
total_reimbursement:
type: string
format: float
description: The total reimbursement for the pay period.
licensee:
type: object
description: The licensed payroll processor
properties:
name:
type: string
description: Always the fixed string "Gusto, Zenpayroll Inc."
address:
type: string
description: Always the fixed string "525 20th St"
city:
type: string
description: Always the fixed string "San Francisco"
state:
type: string
description: Always the fixed string "CA"
postal_code:
type: string
description: Always the fixed string "94107"
phone_number:
type: string
description: Always the fixed string "4157778888"
Versionable:
type: object
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
Contractor-Address:
type: object
x-examples:
example:
version: 23323096a8015e32d9795fadf1fd300d
contractor_uuid: 9779767c-6044-48e0-bf68-aeb370b9a2e7
street_1: 999 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
properties:
contractor_uuid:
type: string
description: The UUID of the contractor
street_1:
type:
- string
- 'null'
readOnly: false
street_2:
type:
- string
- 'null'
readOnly: false
city:
type:
- string
- 'null'
readOnly: false
state:
type:
- string
- 'null'
readOnly: false
zip:
type:
- string
- 'null'
readOnly: false
country:
type:
- string
- 'null'
readOnly: false
default: USA
active:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
warnings:
type: array
description: An array of warning objects that provide additional information about the address. Warnings do not prevent the address from being saved.
items:
"$ref": "#/components/schemas/Warning-Object"
Contractor-Address-Update-Body:
type: object
properties:
version:
type: string
example: 56d00c178bc7393b2a206ed6a86afcb4
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
street_1:
type: string
street_2:
type: string
city:
type: string
state:
type: string
zip:
type: string
required:
- version
x-examples:
example:
version: fe75bd065ff48b91c35fe8ff842f986c
street_1: 300 3rd Street
street_2:
city: San Francisco
state: CA
zip: '94107'
Address:
type: object
allOf:
- "$ref": "#/components/schemas/Versionable"
- type: object
properties:
street_1:
type:
- string
- 'null'
readOnly: false
street_2:
type:
- string
- 'null'
readOnly: false
city:
type:
- string
- 'null'
readOnly: false
state:
type:
- string
- 'null'
readOnly: false
zip:
type:
- string
- 'null'
readOnly: false
country:
type:
- string
- 'null'
readOnly: false
default: USA
active:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
example:
street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
Department:
type: object
allOf:
- "$ref": "#/components/schemas/Versionable"
- type: object
properties:
uuid:
type: string
description: The UUID of the department
company_uuid:
type: string
description: The UUID of the company
title:
type: string
description: Name of the department
employees:
type: array
description: Array of employees assigned to the department.
items:
properties:
uuid:
type: string
contractors:
type: array
description: Array of contractors assigned to the department.
items:
properties:
uuid:
type: string
x-examples:
example:
uuid: 56260b3d-c375-415c-b77a-75d99f717193
company_uuid: 7087a288-8349-4632-b92e-bc94fb79f29e
title: Stage Hand
version: d90440dd464601d1c8f4e9e240dfb7a6
employees:
- uuid: 41199375-a999-4414-9f40-d9bf596b134d
contractors:
- uuid: 3488549f-60e4-494f-a34a-9d8aad3aabf5
example_created:
uuid: 56260b3d-c375-415c-b77a-75d99f717193
company_uuid: 7087a288-8349-4632-b92e-bc94fb79f29e
title: Stage Hand
version: d90440dd464601d1c8f4e9e240dfb7a6
employees: []
contractors: []
Department-List:
type: array
items:
"$ref": "#/components/schemas/Department"
x-examples:
example:
- uuid: 56260b3d-c375-415c-b77a-75d99f717193
company_uuid: 7087a288-8349-4632-b92e-bc94fb79f29e
title: Stage Hand
version: d90440dd464601d1c8f4e9e240dfb7a6
employees:
- uuid: 41199375-a999-4414-9f40-d9bf596b134d
contractors: []
- uuid: ec5c8a85-3233-4f39-a9f5-fb1ab7b5f5f3
company_uuid: 7087a288-8349-4632-b92e-bc94fb79f29e
title: Actors
version: 34f39a30b45d077cb83aed2df4810d74
employees:
- uuid: 7ee4aca1-814b-4034-b0f8-07f93cc679d1
contractors: []
- uuid: 1802465d-4f68-4865-920c-1307ab095f12
company_uuid: 7087a288-8349-4632-b92e-bc94fb79f29e
title: Band
version: 1fe3076d35ef7c97d0ae68c5f4df0acd
employees:
- uuid: a73955be-c009-44dc-915e-6246e2bdedbb
contractors:
- uuid: 3488549f-60e4-494f-a34a-9d8aad3aabf5
Department-Create-Request-Body:
type: object
properties:
title:
type: string
description: Name of the department
example: Stage Hand
required:
- title
Department-Update-Request-Body:
type: object
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Department-Create-Request-Body"
Department-People-Request-Body:
type: object
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
employees:
type: array
description: Array of employees to add or remove from the department
items:
type: object
properties:
uuid:
type: string
contractors:
type: array
description: Array of contractors to add or remove from the department
items:
type: object
properties:
uuid:
type: string
Child-Support-Data:
description: Child Support agency data
type: object
properties:
agencies:
type: array
description: State child support agencies
items:
type: object
properties:
state:
type: string
description: Two letter state abbreviation
name:
type: string
description: Name of state child support agency
manual_payment_required:
type: boolean
description: 'Specifies if remitting payment to the agency is required outside of Gusto. If true, Gusto includes garnishment amounts for this agency in payroll calculation, but does not debit for or remit payment to the agency automatically. As of September 2024, only garnishments for South Carolina Integrated Child Support Services require manual payment. '
fips_codes:
type: array
description: FIPS codes for state or county child support orders
items:
type: object
properties:
code:
type: string
description: FIPS code for state or county
county:
type:
- string
- 'null'
description: Name of county in the state for the corresponding FIPS code. When `null` the FIPS code applies state wide.
required_attributes:
type: array
description: Describes which child support case identifying attributes are required for this agency. While most agencies only require a single identifier, some (e.g. OH) require multiple identifiers.
items:
type: object
properties:
key:
type: string
description: A required attribute when creating a garnishment for this state agency. The current values are listed as an enum; though unlikely, values could be added if state agency requirements change in the future.
enum:
- case_number
- order_number
- remittance_number
label:
type: string
description: A human readable name of the attribute, e.g. CSE Case Number
x-examples:
Example:
agencies:
- state: AK
name: Alaska Child Support Services Division
manual_payment_required: false
fips_codes:
- county:
code: '0200000'
required_attributes:
- key: case_number
label: CSE Case Number
- state: OH
name: Ohio Office of Child Support Enforcement
manual_payment_required: false
fips_codes:
- county:
code: '39000'
required_attributes:
- key: case_number
label: CSE Case Number
- key: order_number
label: Order Identifier
Employee-Onboarding-Document:
type: object
description: Configuration for which onboarding documents (e.g. Form I-9) are required for an employee during onboarding.
properties:
uuid:
type:
- string
- 'null'
description: The UUID of the onboarding documents config record. Null when no config has been saved yet.
readOnly: true
i9_document:
type: boolean
description: |
Whether to include Form I-9 for this employee during onboarding.
When true, the employee will be prompted to complete Form I-9 as part of their onboarding.
readOnly: true
x-examples:
config_with_i9:
uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
i9_document: true
config_without_i9:
uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
i9_document: false
config_not_yet_saved:
uuid:
i9_document: false
Employee-Onboarding-Documents-Config-Request:
type: object
description: Request body for updating an employee's onboarding documents configuration.
properties:
i9_document:
type: boolean
default: false
description: |
Whether to include Form I-9 for this employee during onboarding.
When true, the employee will be prompted to complete Form I-9 as part of their onboarding.
x-examples:
enable_i9:
i9_document: true
disable_i9:
i9_document: false
I9-Authorization:
type: object
description: An employee's I-9 authorization
properties:
uuid:
type: string
description: The UUID of the I-9 authorization
readOnly: true
form_uuid:
type:
- string
- 'null'
description: The UUID of the Form associated with this I-9 authorization. Use this with "Employee Forms" API endpoints.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
readOnly: true
authorization_status:
type: string
description: The employee's authorization status
enum:
- citizen
- noncitizen
- permanent_resident
- alien
document_type:
anyOf:
- type: string
enum:
- uscis_alien_registration_number
- form_i94
- foreign_passport
- type: 'null'
description: The document's document type
has_document_number:
type:
- boolean
- 'null'
description: Whether or not a `document_number` exists for this document.
expiration_date:
type:
- string
- 'null'
description: The document's expiration date
country:
type:
- string
- 'null'
description: The document's country of issuance
employer_signed:
type: boolean
description: Whether the employer has signed the Form I-9
readOnly: true
employee_signed:
type: boolean
description: Whether the employee has signed the Form I-9
readOnly: true
additional_info:
type:
- string
- 'null'
description: Any additional notes
alt_procedure:
type:
- boolean
- 'null'
description: Whether an alternative procedure authorized by DHS to examine documents was used
required:
- uuid
- version
- authorization_status
- employer_signed
- employee_signed
x-tags:
- I-9 Verification
x-examples:
alien_with_foreign_passport:
uuid: 7f2337f9-9b78-44b9-aeed-be4777b833a8
version: 6ae7ff720107b356bf13b1606f60b24f
form_uuid: c54046f7-1be4-4c54-8194-f4842c30c86d
authorization_status: alien
document_type: foreign_passport
has_document_number: true
expiration_date: '2028-01-01'
country: Canada
employer_signed: false
employee_signed: false
additional_info:
alt_procedure:
citizen_authorization:
uuid: a12bc345-6789-4def-abcd-ef0123456789
version: 52b7c567242cb7393b2a206ed6a86afcb
form_uuid:
authorization_status: citizen
document_type:
has_document_number: false
expiration_date:
country:
employer_signed: false
employee_signed: false
additional_info:
alt_procedure:
employer_signed_authorization:
uuid: 7f2337f9-9b78-44b9-aeed-be4777b833a8
version: 8bc7393b2a206ed6a86afcb4d00c1785
form_uuid: c54046f7-1be4-4c54-8194-f4842c30c86d
authorization_status: citizen
document_type:
has_document_number: false
expiration_date:
country:
employer_signed: true
employee_signed: true
additional_info: Additional info
alt_procedure: false
I9-Authorization-Document:
type: object
description: An employee's I-9 verification document
properties:
uuid:
type: string
description: The UUID of the I-9 verification document
readOnly: true
document_type:
type: string
description: The document's document type
document_title:
type: string
description: The document's document title
expiration_date:
type:
- string
- 'null'
description: The document's expiration date
issuing_authority:
type: string
description: The document's issuing authority
required:
- uuid
- document_type
- document_title
- issuing_authority
x-tags:
- I-9 Verification
x-examples:
driver_license:
uuid: 7f2337f9-9b78-44b9-aeed-be4777b833a8
document_type: driver_license
issuing_authority: USA
expiration_date: '2027-01-01'
document_title: Driver's license
ssn_card:
uuid: 9p2337f9-9b78-44b9-aeed-be4777b833a8
document_type: ssn_card
issuing_authority: USA
document_title: Social Security card
I9-Authorization-Document-Option:
type: object
description: An employee's I-9 verification document option based on the authorization status
properties:
section:
type: string
description: The document option's section in the list of acceptable documents on the Form I-9
readOnly: true
enum:
- A
- A1
- A2
- A3
- B
- C
description:
type: string
description: The document option's description
readOnly: true
document_type:
type: string
description: The document option's document type
readOnly: true
document_title:
type: array
description: The document option's document titles
readOnly: true
items:
type: string
common_choice:
type: boolean
description: Whether the document is a common choice for I-9 verification
readOnly: true
required:
- section
- description
- document_type
- document_title
- common_choice
x-tags:
- I-9 Verification
x-examples:
example_a:
section: A
description: Foreign passport
document_type: foreign_passport_w_i94
document_title:
- Foreign passport
common_choice: true
example_b:
section: B
description: Driver's license or state-issued ID card
document_type: driver_license
document_title:
- Driver's license
- State ID card
common_choice: true
example_c:
section: C
description: Social Security card
document_type: ssn_card
document_title:
- Social Security card
common_choice: true
I9-Authorization-Request-Body:
description: Request body for creating or updating an employee's I-9 authorization.
type: object
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field. If supplied, this endpoint will update the existing I-9 authorization if it exists.
authorization_status:
type: string
description: |
The employee's authorization status.
- `citizen`: A citizen is someone who was born in the United States or is a naturalized citizen living in the United States.
- `noncitizen`: A noncitizen national is someone born in American Samoa, certain former citizens of the former Trust Territory of the Pacific Islands, and certain children of noncitizen nationals born abroad.
- `permanent_resident`: A lawful permanent resident is someone who is not a US citizen and who resides under legally recognized and lawfully recorded permanent residence as an immigrant.
- `alien`: Also referred to as a "noncitizen authorized to work". This includes anyone who is authorized to work in the United States but is not a US citizen, US national or lawful permanent resident.
enum:
- citizen
- noncitizen
- permanent_resident
- alien
document_type:
type: string
description: |
The type of document an employee holds, based on their authorization status.
- This is unused for authorization status `citizen` or `noncitizen`.
- If the authorization status is `permanent_resident`, this must be `uscis_alien_registration_number`.
- If the authorization status is `alien`, this is required and may be any of the valid values.
enum:
- uscis_alien_registration_number
- form_i94
- foreign_passport
document_number:
type: string
description: |
The document number. Formatting depends on the employee's document type.
- For `document_type:'uscis_alien_registration_number'`, this must be a USCIS Number/A-Number, which is 7 to 9 digits.
- For `document_type:'form_i94'`, this must be a Form I-94 Admission Number, which is 11 digits.
- For `document_type:'foreign_passport'`, this must be the passport number.
This is required when the document type is present.
country:
type: string
description: |
The document's country of issuance.
This is required when the document type is `foreign_passport`.
expiration_date:
type: string
description: |
The document's expiration date.
This may only be used when the authorization status is `alien`.
required:
- authorization_status
x-examples:
create_citizen:
authorization_status: citizen
update_alien_with_foreign_passport:
version: 52b7c567242cb7393b2a206ed6a86afcb
authorization_status: alien
document_type: foreign_passport
document_number: '01234567'
country: Canada
expiration_date: '2028-01-01'
I9-Authorization-Employer-Sign-Request-Body:
description: Request body for employer signing an employee's Form I-9.
type: object
properties:
signature_text:
type: string
description: The signature
signer_title:
type: string
description: The signer's job title
signed_by_ip_address:
type: string
description: The IP address of the signatory who signed the form. Both IPv4 AND IPv6 are supported. You must provide the IP address with either this parameter OR you can leave out this parameter and set the IP address in the request header using the `x-gusto-client-ip` header instead.
agree:
type: boolean
description: Whether you agree to sign electronically
additional_info:
type: string
description: Any additional notes
alt_procedure:
type: boolean
description: Whether an alternative procedure authorized by DHS to examine documents was used
required:
- signature_text
- signer_title
- agree
x-examples:
employer_sign:
signature_text: Jane Doe
signer_title: Admin
signed_by_ip_address: 192.168.0.1
agree: true
I9-Authorization-Documents-Request-Body:
description: Request body for creating an employee's I-9 authorization verification documents.
type: object
properties:
documents:
type: array
description: An array of I-9 verification documents. Every request must contain the complete list of documents for the employee, as previous records are replaced.
items:
type: object
properties:
document_type:
type: string
description: The document type. Use the document options endpoint to get the possible values.
example: us_passport
document_title:
type: string
description: The document title associated with the document type
example: US Passport
document_number:
type: string
description: The document's document number
example: F12345678
expiration_date:
type: string
description: The document's expiration date
example: '2026-01-01'
issuing_authority:
type: string
description: The document's issuing authority
example: USA
required:
- document_type
- document_title
- issuing_authority
required:
- documents
x-examples:
create_documents:
documents:
- document_type: us_passport
document_title: US passport
document_number: F12345678
expiration_date: '2035-04-01'
issuing_authority: US Department of State
Rehire-Body:
type: object
properties:
effective_date:
type: string
description: The day when the employee returns to work.
example: '2023-06-30'
file_new_hire_report:
type: boolean
description: The boolean flag indicating whether Gusto will file a new hire report for the employee.
work_location_uuid:
type: string
description: The uuid of the employee's work location.
example: b6ae9d93-d4b8-4119-8c96-dba595dd8c30
employment_status:
type: string
description: The employee's employment status. Supplying an invalid option will set the employment_status to *not_set*.
enum:
- part_time
- full_time
- part_time_eligible
- variable
- seasonal
- not_set
two_percent_shareholder:
type: boolean
description: Whether the employee is a two percent shareholder of the company. This field only applies to companies with an S-Corp entity type.
required:
- effective_date
- file_new_hire_report
- work_location_uuid
Fast-Payment-Limit-Param:
type: string
description: Fast payment limit. This limit is an aggregate of all fast payrolls amount. This limit is only relevant when payment speed is 1-day or 2-day.
Payment-Speed-Param:
type: string
description: Gusto Embedded supports three payment speeds (1-day, 2-day, and 4-day). For next-day payments, funds are deposited in your team's bank account by the end of the next business day. Most people will see the funds arrive the next afternoon, but payments may arrive as late as the end of the business day.
enum:
- 1-day
- 2-day
- 4-day
Fast-Payment-Limit-Required-Body:
type: object
properties:
fast_payment_limit:
"$ref": "#/components/schemas/Fast-Payment-Limit-Param"
payment_speed:
"$ref": "#/components/schemas/Payment-Speed-Param"
required:
- fast_payment_limit
Payment-Speed-Required-Body:
type: object
properties:
fast_payment_limit:
"$ref": "#/components/schemas/Fast-Payment-Limit-Param"
payment_speed:
"$ref": "#/components/schemas/Payment-Speed-Param"
required:
- payment_speed
Historical-Employee-Body:
type: object
description: |
Request body for creating or updating a **historical employee**—someone who already separated from the company and must appear on year-to-date or tax filings without receiving ongoing payroll.
Send this object under the JSON root key `employee`. All dates are ISO 8601 (`YYYY-MM-DD`). Use a `work_address.location_uuid` returned from your company locations API for an active work site.
properties:
first_name:
type: string
description: Legal first name as it appears on government-issued identification.
example: Soren
middle_initial:
type: string
description: Single middle initial, if any.
example: A
last_name:
type: string
description: Legal last name as it appears on government-issued identification.
example: Kierkegaard
preferred_first_name:
type: string
description: Preferred given name for display; omit when the same as legal first name.
example: Angel
date_of_birth:
type: string
format: date
description: Date of birth (YYYY-MM-DD).
example: '1995-05-05'
ssn:
type: string
pattern: "[0-9]{9}"
description: 'Nine-digit U.S. Social Security number **without** dashes or spaces. Must pass Gusto/SSA validation in production; use a valid test SSN in sandbox environments.
'
example: '123456294'
work_address:
type: object
description: Primary work location for this historical employment row.
required:
- location_uuid
properties:
location_uuid:
type: string
format: uuid
description: UUID of a company work location from the company locations response.
example: 1da85d35-1910-40a7-9c1f-8e2b3d4c5a6f
home_address:
type: object
description: Residential address on file for tax withholding and compliance mail.
properties:
street_1:
type: string
description: Street address line 1.
example: 55 Mission St
street_2:
type:
- string
- 'null'
description: Apartment, suite, unit, or building (optional).
example: Floor 3
city:
type: string
description: City.
example: San Francisco
state:
type: string
description: Two-letter U.S. state or territory postal abbreviation.
example: CA
zip:
type: string
description: ZIP or ZIP+4.
example: '94105'
required:
- street_1
- city
- state
- zip
termination:
type: object
description: End of the historical employment period.
required:
- effective_date
properties:
effective_date:
type: string
format: date
description: Last day of employment (termination date). This is recorded on the employment; use the calendar date the person stopped working for the company.
example: '2022-01-01'
email:
type: string
format: email
description: Optional. When provided, stored on the employee record for notifications and profile.
example: soren.kierkegaard@example.com
job:
type: object
description: Hire date for the historical job used to build employments and filings.
required:
- hire_date
properties:
hire_date:
type: string
format: date
description: First calendar day the employee was employed in this role at the company.
example: '2020-01-01'
employee_state_taxes:
type: object
description: Workers' compensation fields for Washington (WA) or Wyoming (WY) when the work address is in those states; omit when not applicable.
properties:
wc_covered:
type: boolean
description: Whether this job is eligible for workers' compensation coverage in the states of Washington (WA) or Wyoming (WY).
example: true
wc_class_code:
type: string
description: The risk class code for workers' compensation in Washington or Wyoming state. For Washington, visit [Washington state's Risk Class page](https://www.lni.wa.gov/insurance/rates-risk-classes/risk-classes-for-workers-compensation/risk-class-lookup#/) to learn more. For Wyoming you can search for the code online using [WY Workforce Services website](https://dws.wyo.gov/dws-division/workers-compensation/) or call the agency at (307) 235-3217.
example: '051000'
required:
- first_name
- last_name
- date_of_birth
- ssn
- work_address
- home_address
- job
- termination
x-examples:
typical_historical_employee:
first_name: Soren
middle_initial: A
last_name: Kierkegaard
preferred_first_name: Angel
date_of_birth: '1995-05-05'
ssn: '123456294'
email: soren.kierkegaard@example.com
work_address:
location_uuid: 1da85d35-1910-40a7-9c1f-8e2b3d4c5a6f
home_address:
street_1: 55 Mission St
street_2: Floor 3
city: San Francisco
state: CA
zip: '94105'
job:
hire_date: '2020-01-01'
termination:
effective_date: '2022-01-01'
Pay-Schedule-Assignment-Body:
type: object
properties:
type:
anyOf:
- type: string
enum:
- single
- hourly_salaried
- by_employee
- by_department
- type: 'null'
description: The pay schedule assignment type.
hourly_pay_schedule_uuid:
type: string
description: Pay schedule for hourly employees.
salaried_pay_schedule_uuid:
type: string
description: Pay schedule for salaried employees.
default_pay_schedule_uuid:
type: string
description: Default pay schedule for employees.
partial_assignment:
type: boolean
description: Indicates whether the request provides pay schedule assignments for a partial list of employees or departments of the company. By default, this is set to false.
employees:
type: array
description: List of employees and their pay schedules.
items:
type: object
properties:
employee_uuid:
type: string
description: Employee UUID
pay_schedule_uuid:
type: string
description: Pay schedule UUID
departments:
type: array
description: List of departments and their pay schedules.
items:
type: object
properties:
department_uuid:
type: string
description: Department UUID
pay_schedule_uuid:
type: string
description: Pay schedule UUID
required:
- type
Form-Document-Content-Type-Type:
type:
- string
- 'null'
description: The content type of the associated document. Most forms are PDFs with a content type of `application/pdf`. Some tax file packages will be zip files (containing PDFs) with a content type of `application/zip`. This attribute will be `null` when the document has not been prepared.
readOnly: true
Form:
title: Form
type: object
properties:
uuid:
type: string
description: The UUID of the form
readOnly: true
employee_uuid:
type: string
description: The UUID of the employee to which the form belongs, if applicable.
readOnly: true
name:
type: string
description: The type identifier of the form
readOnly: true
title:
type: string
description: The title of the form
readOnly: true
description:
type: string
description: The description of the form
readOnly: true
draft:
type: boolean
description: If the form is in a draft state. E.g. End of year tax forms may be provided in a draft state prior to being finalized.
readOnly: true
year:
type:
- integer
- 'null'
description: The year of this form. For some forms, e.g. tax forms, this is the year which the form represents. A W2 for January - December 2022 would be delivered in January 2023 and have a year value of 2022. This value is nullable and will not be present on all forms.
readOnly: true
quarter:
type:
- integer
- 'null'
description: The quarter of this form. For some forms, e.g. tax forms, this is the calendar quarter which this form represents. An Employer's Quarterly Federal Tax Return (Form 941) for April, May, June 2022 would have a quarter value of 2 (and a year value of 2022). This value is nullable and will not be present on all forms.
readOnly: true
requires_signing:
type: boolean
description: A boolean flag that indicates whether the form needs signing or not. Note that this value will change after the form is signed.
readOnly: true
document_content_type:
"$ref": "#/components/schemas/Form-Document-Content-Type-Type"
x-examples:
Example:
uuid: 48cdd5ec-a4dd-4840-a424-ad79f38d8408
name: company_direct_deposit
title: Direct Deposit Authorization
description: We need you to sign paperwork to authorize us to debit and credit your bank account and file and pay your taxes.
draft: false
year:
quarter:
requires_signing: true
document_content_type: application/pdf
employee_form:
uuid: 48cdd5ec-a4dd-4840-a424-ad79f38d8408
employee_uuid: c5fdae67-b148-4b52-8b33-1384024a1256
name: w4_federal
title: 'Form W-4: 2024'
description: Form W-4 determines how much federal income tax your employer will withhold from your pay.
draft: false
year: 2024
quarter:
requires_signing: true
document_content_type: application/pdf
quarterly_tax_form:
uuid: 7a2b9f3e-1c4d-4e5f-8a6b-2d3e4f5a6b7c
name: form_941
title: 'Form 941: Q2 2024'
description: Employer's Quarterly Federal Tax Return for the second quarter of 2024.
draft: false
year: 2024
quarter: 2
requires_signing: false
document_content_type: application/pdf
sandbox_w2:
uuid: bf5b2496-26df-436e-b465-eae4ed5c8021
employee_uuid: 19394e76-a866-4570-b237-9a26b0163907
name: US_W-2
title: 'Draft Form W-2: 2021'
description: Form W-2 records your annual wages and taxes.
draft: true
year: 2021
quarter:
requires_signing: false
document_content_type: application/pdf
x-tags:
- Forms
required:
- uuid
Form_1099:
title: Form
type: object
properties:
uuid:
type: string
description: The UUID of the form
readOnly: true
name:
type: string
description: The type identifier of the form
readOnly: true
title:
type: string
description: The title of the form
readOnly: true
description:
type: string
description: The description of the form
readOnly: true
draft:
type: boolean
description: If the form is in a draft state. E.g. End of year tax forms may be provided in a draft state prior to being finalized.
readOnly: true
year:
type:
- integer
- 'null'
description: The year of this form. For some forms, e.g. tax forms, this is the year which the form represents. A 1099 for January - December 2022 would be delivered in January 2023 and have a year value of 2022. This value is nullable and will not be present on all forms.
readOnly: true
quarter:
type:
- integer
- 'null'
description: The quarter of this form. This value is currently always null since it is not present on any contractor forms.
readOnly: true
requires_signing:
type: boolean
description: A boolean flag that indicates whether the form needs signing or not. Note that this value will change after the form is signed.
readOnly: true
document_content_type:
"$ref": "#/components/schemas/Form-Document-Content-Type-Type"
contractor_uuid:
type: string
description: The contractor UUID
readOnly: true
x-examples:
Example:
uuid: 48cdd5ec-a4dd-4840-a424-ad79f38d8408
name: US_1099
title: 'Form 1099: 2020'
description: Form 1099 records your annual income as a contractor.
draft: false
requires_signing: false
year: 2020
quarter:
document_content_type: application/pdf
contractor_uuid: 123dd616-6dbc-4724-938a-403f6217a933
sandbox_1099:
uuid: 29afb141-2256-431d-90e0-1c7344222342
contractor_uuid: b68484a9-4487-4ee5-bafc-4245133a426c
name: US_1099
title: 'Form 1099: 2022'
description: Form 1099 records your annual income as a contractor.
draft: true
requires_signing: false
year: 2022
quarter:
document_content_type: application/pdf
x-tags:
- Forms
required:
- uuid
Form-Pdf:
title: Form Pdf
type: object
properties:
uuid:
type: string
description: the UUID of the form
readOnly: true
document_url:
type:
- string
- 'null'
description: the URL of the form
document_content_type:
"$ref": "#/components/schemas/Form-Document-Content-Type-Type"
x-examples:
Example:
uuid: 48cdd5ec-a4dd-4840-a424-ad79f38d8408
document_url: https://app.gusto-demo.com/assets/forms/7757842065202782/original/form.pdf?1633667020
document_content_type: application/pdf
document_not_ready:
uuid: 48cdd5ec-a4dd-4840-a424-ad79f38d8408
document_url:
document_content_type:
required:
- uuid
Document:
title: Document
type: object
properties:
uuid:
type: string
description: The UUID of the document
readOnly: true
title:
type: string
description: The title of the document
readOnly: true
name:
type: string
description: The type identifier of the document
readOnly: true
recipient_type:
type: string
description: The type of recipient associated with the document (will be `Contractor` for Contractor Documents)
enum:
- Company
- Employee
- Contractor
readOnly: true
recipient_uuid:
type: string
description: Unique identifier for the recipient associated with the document
readOnly: true
pages:
type: array
description: List of the document's pages and associated image URLs. This is only returned for documents with `required_signing` = `true`, and can be used for signing preparation.
items:
type: object
properties:
image_url:
type: string
description: Image URL for the page
page_number:
type: integer
description: Page number
readOnly: true
fields:
type: array
description: List of the document's fields and associated data. Values are set for auto-filled fields. This is only returned for documents with `required_signing` = `true`, and can be used for signing preparation.
items:
type: object
properties:
key:
type:
- string
- 'null'
description: Unique identifier of the field. May be null for custom fields that do not correspond to a known Gusto-managed key mapping.
value:
type:
- string
- 'null'
description: Auto-filled value of the field
x:
type:
- integer
- 'null'
description: X-coordinate location of the field on the page. May be null when the field has no positioning information.
"y":
type:
- integer
- 'null'
description: Y-coordinate location of the field on the page. May be null when the field has no positioning information.
width:
type:
- integer
- 'null'
description: Width of the field. May be null when the field has no positioning information.
height:
type:
- integer
- 'null'
description: Height of the field. May be null when the field has no positioning information.
page_number:
type:
- integer
- 'null'
description: Page number of the field. May be null when the field has no positioning information.
data_type:
type: string
description: The field's data type
required:
type: boolean
description: Whether the field is required
readOnly: true
signed_at:
type:
- string
- 'null'
description: When the document was signed (will be `null` if unsigned)
readOnly: true
description:
type: string
description: The description of the document
readOnly: true
requires_signing:
type: boolean
description: A boolean flag that indicates whether the document needs signing or not. Note that this value will change after the document is signed.
draft:
type: boolean
description: If the document is in a draft state
readOnly: true
year:
type:
- integer
- 'null'
description: The year of this document. This value is nullable and will not be present on all documents.
readOnly: true
quarter:
type:
- integer
- 'null'
description: The quarter of this document. This value is nullable and will not be present on all documents.
readOnly: true
x-examples:
Example:
uuid: e83b3c20-dc4f-4382-bee3-b478fc42c68b
title: Taxpayer Identification (Form W-9)
name: taxpayer_identification_form_w_9
recipient_type: Contractor
recipient_uuid: f079c253-29e2-45e2-b384-2cc615c9c568
pages:
- image_url: http://app.gusto-dev.com:3000/assets/document_templates/20/unmapped_template/images/0.jpg
page_number: 0
- image_url: http://app.gusto-dev.com:3000/assets/document_templates/20/unmapped_template/images/1.jpg
page_number: 1
fields:
- key: text1596141656513
value:
x: 69
"y": 94
width: 261
height: 13
page_number: 0
data_type: text
required: true
- key: optional_text1596141704672
value:
x: 69
"y": 118
width: 262
height: 13
page_number: 0
data_type: text
required: false
signed_at:
description: Form W-9, Request for Taxpayer Identification Number and Certification
requires_signing: true
draft: false
year:
quarter:
x-tags:
- Documents
Document-Signed:
title: Document Signed
type: object
properties:
uuid:
type: string
description: The UUID of the document
readOnly: true
title:
type: string
description: The title of the document
readOnly: true
name:
type: string
description: The type identifier of the document
readOnly: true
recipient_type:
type: string
description: The type of recipient associated with the document (will be `Contractor` for Contractor Documents)
enum:
- Company
- Employee
- Contractor
readOnly: true
recipient_uuid:
type: string
description: Unique identifier for the recipient associated with the document
readOnly: true
pages:
type: array
description: List of the document's pages and associated image URLs.
items:
type: object
properties:
image_url:
type: string
description: Image URL for the page
page_number:
type: integer
description: Page number
readOnly: true
fields:
type: array
description: List of the document's fields and associated data. Values reflect the data provided at signing.
items:
type: object
properties:
key:
type:
- string
- 'null'
description: Unique identifier of the field. May be null for custom fields that do not correspond to a known Gusto-managed key mapping.
value:
type:
- string
- 'null'
description: Value of the field
x:
type:
- integer
- 'null'
description: X-coordinate location of the field on the page. May be null when the field has no positioning information.
"y":
type:
- integer
- 'null'
description: Y-coordinate location of the field on the page. May be null when the field has no positioning information.
width:
type:
- integer
- 'null'
description: Width of the field. May be null when the field has no positioning information.
height:
type:
- integer
- 'null'
description: Height of the field. May be null when the field has no positioning information.
page_number:
type:
- integer
- 'null'
description: Page number of the field. May be null when the field has no positioning information.
data_type:
type: string
description: The field's data type
required:
type: boolean
description: Whether the field is required
readOnly: true
signed_at:
type:
- string
- 'null'
description: When the document was signed (will be `null` if unsigned)
readOnly: true
description:
type: string
description: The description of the document
readOnly: true
requires_signing:
type: boolean
description: A boolean flag that indicates whether the document needs signing or not. Note that this value will change after the document is signed.
draft:
type: boolean
description: If the document is in a draft state
readOnly: true
year:
type:
- integer
- 'null'
description: The year of this document. This value is nullable and will not be present on all documents.
readOnly: true
quarter:
type:
- integer
- 'null'
description: The quarter of this document. This value is nullable and will not be present on all documents.
readOnly: true
x-examples:
Example:
uuid: e83b3c20-dc4f-4382-bee3-b478fc42c68b
title: Taxpayer Identification (Form W-9)
name: taxpayer_identification_form_w_9
recipient_type: Contractor
recipient_uuid: f079c253-29e2-45e2-b384-2cc615c9c568
signed_at: '2024-09-03T16:39:22.000-07:00'
description: Form W-9, Request for Taxpayer Identification Number and Certification
requires_signing: false
draft: false
year:
quarter:
x-tags:
- Documents
Document-Pdf:
title: Document Pdf
type: object
properties:
uuid:
type: string
description: the UUID of the document
readOnly: true
document_url:
type: string
description: the URL of the document
x-examples:
Example:
uuid: e83b3c20-dc4f-4382-bee3-b478fc42c68b
document_url: https://app.gusto-demo.com/assets/personal_documents/23/original.pdf?1724367941
x-tags:
- Documents
Company-Industry-Selection-Required-Body:
type: object
properties:
title:
type:
- string
- 'null'
example: Computer Training
description: Industry title
naics_code:
type: string
pattern: "^\\d{6}$"
example: '611420'
description: North American Industry Classification System (NAICS) is used to classify businesses with a six digit number based on the primary type of work the business performs.
sic_codes:
type: array
description: A list of Standard Industrial Classification (SIC) codes, which are four digit numbers that categorize the industries that companies belong to based on their business activities. If sic_codes is not passed in, we will perform an internal lookup with `naics_code`.
items:
type: string
pattern: "^\\d{4}$"
example: '8243'
required:
- naics_code
Industry:
title: Industry
type: object
properties:
company_uuid:
type: string
description: Company UUID
readOnly: true
title:
type:
- string
- 'null'
example: Computer Training
description: Industry title
readOnly: true
naics_code:
type:
- string
- 'null'
example: '611420'
description: North American Industry Classification System (NAICS) is used to classify businesses with a six digit number based on the primary type of work the business performs.
sic_codes:
type: array
description: A list of Standard Industrial Classification (SIC) codes, which are four digit numbers that categorize the industries that companies belong to based on their business activities. If sic_codes is not passed in, we will perform an internal lookup with `naics_code`.
items:
type: string
example: '8243'
x-examples:
Example:
company_uuid: 423dd616-6dbc-4724-938a-403f6217a933
naics_code: '611420'
sic_codes:
- '8243'
title: Computer Training
success_status:
company_uuid: 423dd616-6dbc-4724-938a-403f6217a933
naics_code: '231208'
sic_codes:
- '1500'
title: Construction
x-tags:
- Industry
External-Payroll:
description: The representation of an external payroll.
type: object
x-tags:
- External Payrolls
title: ''
properties:
uuid:
type: string
description: The UUID of the external payroll.
readOnly: true
company_uuid:
type: string
description: The UUID of the company.
readOnly: true
check_date:
type: string
description: External payroll's check date.
readOnly: true
payment_period_start_date:
type: string
description: External payroll's pay period start date.
readOnly: true
payment_period_end_date:
type: string
description: External payroll's pay period end date.
readOnly: true
status:
type: string
enum:
- unprocessed
- processed
description: The status of the external payroll. The status will be `unprocessed` when the external payroll is created and transition to `processed` once tax liabilities are entered and finalized. Once in the `processed` status all actions that can edit an external payroll will be disabled.
readOnly: true
external_payroll_items:
type: array
description: External payroll items for employees
readOnly: true
items:
type: object
properties:
employee_uuid:
type: string
earnings:
type: array
items:
type: object
properties:
amount:
type: string
format: float
hours:
type: string
format: float
earning_type:
type: string
earning_id:
type: integer
benefits:
type: array
items:
type: object
properties:
benefit_id:
type: integer
company_contribution_amount:
type: string
format: float
employee_deduction_amount:
type: string
format: float
taxes:
type: array
items:
type: object
properties:
tax_id:
type: integer
amount:
type: string
format: float
applicable_earnings:
type: array
description: Applicable earnings based on company provisioning.
readOnly: true
items:
type: object
properties:
earning_type:
type: string
earning_id:
type: number
name:
type: string
input_type:
type: string
category:
type: string
applicable_benefits:
type:
- array
- 'null'
description: Applicable benefits based on company provisioning.
readOnly: true
items:
type: object
properties:
id:
type: integer
description:
type: string
active:
type: boolean
applicable_taxes:
type: array
description: Applicable taxes based on company provisioning.
readOnly: true
items:
type: object
properties:
id:
type: integer
name:
type: string
employer_tax:
type: boolean
description: Some taxes may have an amount withheld from the employee and an amount withheld from the employer, e.g. Social Security. A `true` value indicates this is the employer's amount.
resident_tax:
type: boolean
description: Some taxes may have different rates or reporting requirements depending on if the employee is a resident or non-resident of the tax jurisdiction.
metadata:
type: object
description: Stores metadata of the external payroll.
readOnly: true
properties:
deletable:
type: boolean
description: Determines if the external payroll can be deleted.
readOnly: true
x-examples:
Example:
uuid: c5fdae57-5483-4529-9aae-f0edceed92d4
company_uuid: bcb305b0-2855-4025-8d22-e484a9e6b7c9
check_date: '2022-06-03'
payment_period_start_date: '2022-05-15'
payment_period_end_date: '2022-05-30'
status: unprocessed
external_payroll_items:
- employee_uuid: 44f7cba9-7a3d-4f08-b7bd-6fcf5211f8ca
earnings:
- amount: '10000.0'
hours: '0.0'
earning_type: CompanyPayType
earning_id: 1
- amount: '500.0'
hours: '0.0'
earning_type: CompanyEarningType
earning_id: 4
benefits:
- benefit_id: 22
company_contribution_amount: '100.0'
employee_deduction_amount: '50.0'
- benefit_id: 25
company_contribution_amount: '0.0'
employee_deduction_amount: '300.0'
taxes:
- tax_id: 1
amount: '400.0'
- tax_id: 2
amount: '60.0'
applicable_earnings:
- earning_type: CompanyPayType
earning_id: 1
name: Regular Wages
input_type: amount
category: default
- earning_type: CompanyEarningType
earning_id: 4
name: Cash Tips
input_type: amount
category: default
applicable_benefits:
- id: 22
description: Kaiser
active: true
- id: 25
description: HSA
active: true
applicable_taxes:
- id: 1
name: Federal Income Tax
employer_tax: false
resident_tax: false
- id: 2
name: Social Security
employer_tax: false
resident_tax: false
metadata:
deletable: true
required:
- uuid
Webhook-Subscription:
description: The representation of webhook subscription.
type: object
x-tags:
- Webhooks
title: ''
properties:
uuid:
type: string
description: The UUID of the webhook subscription.
readOnly: true
url:
type: string
description: The webhook subscriber URL. Updates will be POSTed to this URL.
readOnly: true
status:
type: string
enum:
- pending
- verified
- removed
- unreachable
description: The status of the webhook subscription.
readOnly: true
subscription_types:
type: array
description: Receive updates for these types.
readOnly: false
items:
type: string
enum:
- BankAccount
- Company
- CompanyBenefit
- Contractor
- ContractorPayment
- Employee
- EmployeeBenefit
- EmployeeJobCompensation
- ExternalPayroll
- Form
- Location
- Notification
- Payroll
- PayrollSync
- PaySchedule
- Signatory
- TimeOffRequest
x-examples:
Example:
uuid: c5fdae57-5483-4529-9aae-f0edceed92d4
url: https://partner-app.com/subscriber
status: verified
subscription_types:
- BankAccount
- Company
- CompanyBenefit
- Contractor
- ContractorPayment
- Employee
- EmployeeBenefit
- EmployeeJobCompensation
- ExternalPayroll
- Form
- Location
- Notification
- Payroll
- PayrollSync
- PaySchedule
- Signatory
Pending:
uuid: a1b2c3d4-5678-90ab-cdef-1234567890ab
url: https://partner-app.com/webhooks
status: pending
subscription_types:
- Company
- Employee
required:
- uuid
Webhook-Verification-Token-Response:
description: The response from requesting a webhook subscription verification token.
type: object
x-tags:
- Webhooks
title: ''
properties:
message:
type: string
description: A message indicating the verification token has been sent.
x-examples:
Example:
message: Success! The subscriber will be notified with the verification token
External-Payroll-Basic:
description: The representation of an external payroll with minimal information.
type: object
x-tags:
- External Payrolls
title: ''
properties:
uuid:
type: string
description: The UUID of the external payroll.
readOnly: true
company_uuid:
type: string
description: The UUID of the company.
readOnly: true
check_date:
type: string
description: External payroll's check date.
readOnly: true
payment_period_start_date:
type: string
description: External payroll's pay period start date.
readOnly: true
payment_period_end_date:
type: string
description: External payroll's pay period end date.
readOnly: true
status:
type: string
enum:
- unprocessed
- processed
description: The status of the external payroll. The status will be `unprocessed` when the external payroll is created and transition to `processed` once tax liabilities are entered and finalized. Once in the `processed` status all actions that can edit an external payroll will be disabled.
readOnly: true
x-examples:
Example:
uuid: c5fdae57-5483-4529-9aae-f0edceed92d4
company_uuid: bcb305b0-2855-4025-8d22-e484a9e6b7c9
check_date: '2022-06-03'
payment_period_start_date: '2022-05-15'
payment_period_end_date: '2022-05-30'
status: unprocessed
required:
- uuid
External-Payroll-Tax-Suggestions:
description: The representation of an external payroll with minimal information.
type: object
x-tags:
- External Payrolls
title: ''
properties:
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
tax_suggestions:
type: array
description: Possible tax liabilities selections.
readOnly: true
items:
type: object
properties:
tax_id:
type: integer
description: The ID of the tax.
readOnly: true
amount:
type: string
description: Calculated tax amount.
readOnly: true
x-examples:
Example:
employee_uuid: d21848d5-446f-48a8-9430-30fbefeabda4
tax_suggestions:
- tax_id: 1
amount: '500.0'
- tax_id: 2
amount: '100.0'
- tax_id: 4
amount: '30.0'
Tax-Liabilities-Selections:
description: The representation of tax liabilities selections.
x-tags:
- External Payrolls
title: ''
type: object
properties:
tax_id:
type: integer
description: The ID of the tax.
readOnly: true
tax_name:
type: string
description: The name of the tax.
readOnly: true
description:
type:
- string
- 'null'
description: A description of the tax, providing additional detail about the tax type.
readOnly: true
last_unpaid_external_payroll_uuid:
type:
- string
- 'null'
description: The UUID of last unpaid external payroll.
readOnly: true
possible_liabilities:
type: array
description: Possible tax liabilities selections.
readOnly: true
items:
type: object
properties:
liability_amount:
type: string
description: Liability amount.
readOnly: true
payroll_check_date:
type:
- string
- 'null'
description: The external payroll check date.
readOnly: true
external_payroll_uuid:
type:
- string
- 'null'
description: The UUID of the external payroll.
readOnly: true
x-examples:
Example:
tax_id: 1
tax_name: Federal Income Tax
description: Employee Federal Income Tax
last_unpaid_external_payroll_uuid:
possible_liabilities:
- liability_amount: '0.0'
payroll_check_date:
external_payroll_uuid:
- liability_amount: '3000.0'
payroll_check_date: '2022-06-01'
external_payroll_uuid: 1bf1efe1-72d4-4e6e-a181-611f3ea66435
External-Payroll-Create-Request:
type: object
description: The request body for creating an external payroll.
x-tags:
- External Payrolls
required:
- check_date
- payment_period_start_date
- payment_period_end_date
properties:
check_date:
type: string
format: date
description: The check date of the external payroll.
example: '2022-06-03'
payment_period_start_date:
type: string
format: date
description: The start date of the external payroll payment period.
example: '2022-05-15'
payment_period_end_date:
type: string
format: date
description: The end date of the external payroll payment period.
example: '2022-05-30'
External-Payroll-Update-Request:
type: object
description: The request body for updating an external payroll with employee payroll items.
x-tags:
- External Payrolls
required:
- external_payroll_items
properties:
replace_fields:
type: boolean
description: Patch update external payroll items when set to true, otherwise it will overwrite the previous changes.
external_payroll_items:
type: array
description: Payroll items for each employee in the external payroll.
items:
type: object
required:
- employee_uuid
properties:
employee_uuid:
type: string
format: uuid
description: The UUID of the employee.
example: 44f7cba9-7a3d-4f08-b7bd-6fcf5211f8ca
earnings:
type: array
description: Earnings for the employee.
items:
type: object
properties:
earning_type:
type: string
enum:
- CompanyPayType
- CompanyEarningType
description: The earning type class name.
example: CompanyPayType
earning_id:
type: integer
description: The ID of the earning type.
example: 1
amount:
type: string
format: float
description: The earning amount in dollars.
example: '10000.00'
hours:
type: string
format: float
description: The number of hours worked.
example: '80.0'
benefits:
type: array
description: Benefits for the employee.
items:
type: object
properties:
benefit_id:
type: integer
description: The ID of the company benefit.
example: 22
company_contribution_amount:
type: string
format: float
description: The company contribution amount in dollars.
example: '100.00'
employee_deduction_amount:
type: string
format: float
description: The employee deduction amount in dollars.
example: '50.00'
taxes:
type: array
description: Taxes for the employee.
items:
type: object
properties:
tax_id:
type: integer
description: The ID of the tax.
example: 1
amount:
type: string
format: float
description: The tax amount in dollars.
example: '400.00'
Tax-Liability-Selections-Request:
type: object
description: The request body for updating tax liability selections.
x-tags:
- External Payrolls
required:
- liability_selections
properties:
liability_selections:
type: array
description: Tax liability selections to record for the company's external payrolls.
items:
type: object
required:
- tax_id
- last_unpaid_external_payroll_uuid
- unpaid_liability_amount
properties:
tax_id:
type: integer
description: The ID of the tax.
example: 1
last_unpaid_external_payroll_uuid:
type:
- string
- 'null'
description: The UUID of the last external payroll with an unpaid liability for this tax. Set to `null` to indicate no liability.
example: 1bf1efe1-72d4-4e6e-a181-611f3ea66435
unpaid_liability_amount:
type: string
format: float
description: The total cumulative unpaid liability amount for this tax across all external payrolls up to and including the one specified by `last_unpaid_external_payroll_uuid`.
example: '47.5'
Admin:
title: Admin
type: object
description: The representation of an admin user in Gusto.
x-examples:
Example:
uuid: 987058cc-23ee-46e9-81ef-5cee086cceca
first_name: John
last_name: Smith
email: jsmith99@gmail.com
phone: '8009360383'
properties:
uuid:
type: string
description: The unique id of the admin.
email:
type: string
description: The email of the admin for Gusto's system.
first_name:
type: string
description: The first name of the admin.
last_name:
type: string
description: The last name of the admin.
phone:
type:
- string
- 'null'
description: The phone number of the admin.
x-tags:
- Admins
required:
- uuid
Admin-Create-Request:
type: object
description: The request body for creating a company admin.
required:
- first_name
- last_name
- email
properties:
first_name:
type: string
description: The first name of the admin.
example: John
last_name:
type: string
description: The last name of the admin.
example: Smith
email:
type: string
description: The email of the admin for Gusto's system. If the email matches an existing user, this will create an admin account for them.
example: jsmith99@gmail.com
Company:
title: Company
type: object
description: The representation of a company in Gusto.
properties:
ein:
type: string
description: The Federal Employer Identification Number of the company.
readOnly: true
entity_type:
description: The tax payer type of the company.
anyOf:
- type: string
enum:
- C-Corporation
- S-Corporation
- Sole proprietor
- LLC
- LLP
- Limited partnership
- Co-ownership
- Association
- Trusteeship
- General partnership
- Joint venture
- Non-Profit
- type: 'null'
readOnly: true
contractor_only:
type: boolean
description: Whether the company only supports contractors.
tier:
type:
- string
- 'null'
description: The Gusto product tier of the company (not applicable to Embedded partner managed companies).
readOnly: true
enum:
- simple
- plus
- premium
- core
- complete
- concierge
- contractor_only
- basic
is_suspended:
type: boolean
description: Whether or not the company is suspended in Gusto. Suspended companies may not run payroll.
company_status:
type: string
description: The status of the company in Gusto. "Approved" companies are approved to run payroll from a risk and compliance perspective. However, an approved company may still need to resolve other [payroll blockers](https://docs.gusto.com/embedded-payroll/docs/payroll-blockers) to be able to run payroll. "Not Approved" companies may not yet run payroll with Gusto and may need to complete onboarding or contact support. "Suspended" companies may not run payroll with Gusto. In order to unsuspend their account, the company must contact support.
enum:
- Approved
- Not Approved
- Suspended
readOnly: true
uuid:
type: string
description: A unique identifier of the company in Gusto.
readOnly: true
name:
type: string
description: The name of the company.
readOnly: true
slug:
type: string
description: The slug of the name of the company.
readOnly: true
trade_name:
type:
- string
- 'null'
description: The trade name of the company.
readOnly: true
is_partner_managed:
type: boolean
description: Whether the company is fully managed by a partner via the API
readOnly: true
is_high_risk_business:
type: boolean
description: Whether or not Gusto has identified the company as representing a high fraud risk.
readOnly: true
is_marijuana_business:
type: boolean
description: Whether or not the company is a marijuana-related business.
readOnly: true
pay_schedule_type:
anyOf:
- type: string
enum:
- single
- hourly_salaried
- by_employee
- by_department
- type: 'null'
description: The pay schedule assignment type.
readOnly: true
join_date:
type:
- string
- 'null'
description: Company's first invoiceable event date
readOnly: true
funding_type:
description: Company's default funding type
anyOf:
- type: string
enum:
- ach
- reverse_wire
- wire_in
- partner_disbursement
- rtp
- line_of_credit
- type: 'null'
locations:
type: array
uniqueItems: false
description: The locations of the company.
items:
"$ref": "#/components/schemas/Company-Address"
readOnly: true
compensations:
type: object
description: The available company-wide compensation rates for the company.
properties:
hourly:
type: array
uniqueItems: true
description: The available hourly compensation rates for the company.
items:
type: object
properties:
uuid:
type:
- string
- 'null'
description: The UUID of the hourly compensation rate.
readOnly: true
name:
type: string
description: The name of the hourly compensation rate.
example: Overtime
readOnly: true
multiple:
type: number
description: The amount multiplied by the base rate of a job to calculate compensation.
example: 1.5
readOnly: true
readOnly: true
readOnly: true
fixed:
type: array
uniqueItems: true
description: The available fixed compensation rates for the company.
items:
type: object
properties:
uuid:
type:
- string
- 'null'
description: The UUID of the fixed compensation.
readOnly: true
name:
type: string
description: The name of the fixed compensation.
example: Bonus
readOnly: true
readOnly: true
paid_time_off:
type: array
uniqueItems: true
description: The available types of paid time off for the company.
items:
type: object
properties:
uuid:
type:
- string
- 'null'
description: The UUID of the paid time off type.
readOnly: true
name:
type: string
example: Vacation Hours
description: The name of the paid time off type.
readOnly: true
readOnly: true
readOnly: true
readOnly: true
primary_signatory:
type:
- object
- 'null'
description: The primary signatory of the company.
properties:
uuid:
type: string
readOnly: true
description: The UUID of the company's primary signatory.
first_name:
type: string
readOnly: true
description: The company's primary signatory's first name.
middle_initial:
type:
- string
- 'null'
readOnly: true
description: The company's primary signatory's middle initial.
last_name:
type: string
readOnly: true
description: The company's primary signatory's last name.
phone:
type: string
readOnly: true
description: The company's primary signatory's phone number.
email:
type: string
readOnly: true
description: The company's primary signatory's email address.
home_address:
type: object
properties:
street_1:
type: string
readOnly: true
street_2:
type:
- string
- 'null'
readOnly: true
city:
type: string
readOnly: true
state:
type: string
readOnly: true
zip:
type: string
readOnly: true
country:
type: string
readOnly: true
readOnly: true
description: The company's primary signatory's home address.
readOnly: true
primary_payroll_admin:
type: object
description: The primary payroll admin of the company.
properties:
first_name:
type: string
readOnly: true
description: The company's primary payroll admin's first name.
last_name:
type: string
readOnly: true
description: The company's primary payroll admin's last name.
phone:
type:
- string
- 'null'
readOnly: true
description: The company's primary payroll admin's phone number.
email:
type: string
readOnly: true
description: The company's primary payroll admin's email address.
x-examples:
success_status:
uuid: c7a07c73-a703-4462-9343-1b181182b6e0
name: Shoppe Studios LLC
trade_name: Record Shoppe
is_partner_managed: true
tier: complete
locations:
- street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
- street_1: 644 Fay Vista
street_2: Suite 842
city: Richmond
state: VA
zip: '23218'
country: USA
active: true
ein: 00-0000001
entity_type: C-Corporation
pay_schedule_type: by_department
join_date: '2024-01-15'
funding_type: ach
slug: shoppe-studios-llc
is_suspended: false
company_status: Approved
is_high_risk_business: false
is_marijuana_business: false
contractor_only: false
compensations:
hourly:
- uuid: 7da6b57d-22f9-11f1-ad28-0242ac100003
name: Overtime
multiple: 1.5
- uuid: 7da6b5ec-22f9-11f1-ad28-0242ac100003
name: Double overtime
multiple: 2
- uuid: 7da6b22f-22f9-11f1-ad28-0242ac100003
name: Regular
multiple: 1
- uuid: 7da6b3ac-22f9-11f1-ad28-0242ac100003
name: Outstanding vacation
multiple: 1
- uuid: 7da6b532-22f9-11f1-ad28-0242ac100003
name: Holiday
multiple: 1
- uuid: 7da6b44e-22f9-11f1-ad28-0242ac100003
name: Emergency sick - self care
multiple: 1
- uuid: 7da6b49d-22f9-11f1-ad28-0242ac100003
name: Emergency sick - caring for others
multiple: 1
- uuid: 7da6b4e6-22f9-11f1-ad28-0242ac100003
name: FMLA Public Health Emergency Leave
multiple: 1
fixed:
- uuid: 7da68d82-22f9-11f1-ad28-0242ac100003
name: Bonus
- uuid: 7da69024-22f9-11f1-ad28-0242ac100003
name: Commission
- uuid: 7da69104-22f9-11f1-ad28-0242ac100003
name: Paycheck Tips
- uuid: 7da6918f-22f9-11f1-ad28-0242ac100003
name: Cash Tips
- uuid: 7da69216-22f9-11f1-ad28-0242ac100003
name: Correction Payment
- uuid: 7da692a6-22f9-11f1-ad28-0242ac100003
name: Severance
- uuid: 7da69356-22f9-11f1-ad28-0242ac100003
name: Minimum Wage Adjustment
- uuid:
name: Reimbursement
paid_time_off:
- uuid: 7dcdcb77-22f9-11f1-ad28-0242ac100003
name: Vacation Hours
- uuid: 7dcdcc8b-22f9-11f1-ad28-0242ac100003
name: Sick Hours
- uuid:
name: Holiday Hours
primary_signatory:
uuid: 2d7cd96f-e2fb-4db7-8c04-99ef531b4527
first_name: Alda
middle_initial: ''
last_name: Carter
phone: '4160000000'
email: louie.hessel7757869450111547@zemlak.biz
home_address:
street_1: 524 Roob Divide
street_2: Suite 565
city: San Francisco
state: CA
zip: '94107'
country: USA
primary_payroll_admin:
first_name: Ian
last_name: Labadie
phone: 1-565-710-7559
email: louie.hessel7757869450111547@zemlak.biz
x-tags:
- Companies
required:
- uuid
Company-Onboarding-Status:
description: The representation of a company's onboarding status
type: object
title: ''
x-examples:
Example:
uuid: c44d66dc-c41b-4a60-9e25-5e93ff8583f2
onboarding_completed: false
onboarding_steps:
- title: Add Your Company's Addresses
id: add_addresses
required: true
completed: true
completed_at: '2025-02-18T10:00:00Z'
skippable: false
requirements: []
- title: Enter Your Federal Tax Information
id: federal_tax_setup
required: true
completed: true
completed_at: '2025-02-18T10:00:00Z'
skippable: false
requirements: []
- title: Select Industry
id: select_industry
required: true
completed: true
completed_at: '2025-02-18T10:00:00Z'
skippable: false
requirements: []
- title: Add Your Bank Account
id: add_bank_info
required: true
completed: true
completed_at: '2025-02-18T10:00:00Z'
skippable: false
requirements: []
- title: Add Your Employees
id: add_employees
required: true
completed: true
completed_at: '2025-02-18T10:00:00Z'
skippable: true
requirements:
- add_addresses
- title: Enter Your State Tax Information
id: state_setup
required: true
completed: false
completed_at:
skippable: false
requirements:
- add_addresses
- add_employees
- title: Select a Pay Schedule
id: payroll_schedule
required: true
completed: false
completed_at:
skippable: false
requirements: []
- title: Sign Documents
id: sign_all_forms
required: true
completed: false
completed_at:
skippable: false
requirements:
- add_employees
- federal_tax_setup
- state_setup
- add_bank_info
- payroll_schedule
- title: Verify Your Bank Account
id: verify_bank_info
required: true
completed: false
completed_at:
skippable: false
requirements:
- add_bank_info
x-tags:
- Companies
properties:
uuid:
type: string
description: the UUID of the company
onboarding_completed:
type: boolean
description: a boolean flag for the company's onboarding status
onboarding_steps:
type: array
description: a list of company onboarding steps
items:
title: Onboarding step
type: object
properties:
title:
type: string
description: The display name of the onboarding step
id:
type: string
description: The string identifier for each onboarding step
enum:
- add_addresses
- federal_tax_setup
- select_industry
- add_bank_info
- add_employees
- state_setup
- payroll_schedule
- sign_all_forms
- verify_bank_info
- external_payroll
required:
type: boolean
description: The boolean flag indicating whether the step is required or optional
completed:
type: boolean
description: The boolean flag indicating whether the step is completed or not.
completed_at:
type:
- string
- 'null'
description: The ISO 8601 timestamp indicating when the onboarding step was completed.
skippable:
type: boolean
description: The boolean flag indicating whether the step can be skipped or not.
requirements:
type: array
description: A list of onboarding steps that are required to be completed in order to proceed with the current onboarding step.
items:
type: string
enum:
- add_addresses
- federal_tax_setup
- select_industry
- add_bank_info
- add_employees
- state_setup
- payroll_schedule
- sign_all_forms
- verify_bank_info
- external_payroll
required:
- uuid
Payment-Configs:
title: Payment-Configs
type: object
properties:
company_uuid:
type: string
description: Company uuid
readOnly: true
partner_uuid:
type: string
description: Partner uuid
readOnly: true
fast_payment_limit:
type:
- string
- 'null'
description: Payment limit for 1-day or 2-day payroll (string representation of decimal).
readOnly: true
payment_speed:
type: string
enum:
- 1-day
- 2-day
- 4-day
description: |
Payment speed. READ-ONLY.
- `1-day`: Next-day ACH (only for partners that opt in).
- `2-day`: Two-day ACH.
- `4-day`: Standard ACH.
readOnly: true
partner_owned_disbursement:
type: boolean
description: Whether the company is configured to use the partner-owned disbursement payment rail
readOnly: true
earned_fast_ach_blockers:
type: array
description: Blockers preventing the company from earning fast ACH payments
readOnly: true
items:
type: object
properties:
blocker_type:
type: string
description: The type of blocker
enum:
- minimum_days
- minimum_funded_payments
readOnly: true
threshold:
type: number
description: The threshold needed to unblock
readOnly: true
x-examples:
typical_payment_config:
company_uuid: 423dd616-6dbc-4724-938a-403f6217a933
partner_uuid: 556f05d0-48e0-4c47-bce5-db9aea923043
fast_payment_limit: '5000.0'
payment_speed: 2-day
partner_owned_disbursement: false
earned_fast_ach_blockers: []
payment_config_with_blockers:
company_uuid: 423dd616-6dbc-4724-938a-403f6217a933
partner_uuid: 556f05d0-48e0-4c47-bce5-db9aea923043
fast_payment_limit:
payment_speed: 2-day
partner_owned_disbursement: false
earned_fast_ach_blockers:
- blocker_type: minimum_days
threshold: 15
- blocker_type: minimum_funded_payments
threshold: 5
x-tags:
- Payment Configs
Payment-Configs-Update-Request:
type: object
description: Request body for updating company payment configs. At least one of payment_speed, fast_payment_limit, or partner_owned_disbursement is required.
properties:
payment_configs:
type: object
properties:
payment_speed:
type: string
enum:
- 1-day
- 2-day
- 4-day
description: Desired payment speed. 1-day is only applicable to partners that opt in.
fast_payment_limit:
type:
- number
- 'null'
description: Payment limit for 1-day or 2-day payroll (in dollars).
partner_owned_disbursement:
type: boolean
description: Whether to use the partner-owned disbursement payment rail.
x-examples:
update_payment_speed_and_limit:
payment_configs:
payment_speed: 2-day
fast_payment_limit: 1000
update_payment_speed_only:
payment_configs:
payment_speed: 4-day
Contractor-Body:
type: object
properties:
type:
type: string
description: The contractor type.
default: Individual
enum:
- Individual
- Business
wage_type:
type: string
description: 'The contractor’s wage type.
'
enum:
- Fixed
- Hourly
start_date:
type: string
description: 'The day when the contractor will start working for the company.
'
example: '2020-01-11'
hourly_rate:
type: string
description: The contractor’s hourly rate. This attribute is required if the wage_type is `Hourly`.
example: '40.0'
self_onboarding:
type: boolean
default: false
description: |-
Whether the contractor or the payroll admin will complete onboarding in Gusto.
Self-onboarding is recommended so that contractors receive Gusto accounts.
If self_onboarding is true, then email is required.
email:
type: string
description: The contractor’s email address.
work_email:
type: string
description: The work email address of the contractor. This is provided to support syncing users between our system and yours. You may not use this email address for any other purpose (e.g. marketing).
first_name:
type: string
description: |-
The contractor’s first name.
This attribute is required for `Individual` contractors and will be ignored for `Business` contractors.
last_name:
type: string
description: |-
The contractor’s last name.
This attribute is required for `Individual` contractors and will be ignored for `Business` contractors.
middle_initial:
type: string
description: |-
The contractor’s middle initial.
This attribute is optional for `Individual` contractors and will be ignored for `Business` contractors.
file_new_hire_report:
type: boolean
default: false
description: |-
The boolean flag indicating whether Gusto will file a new hire report for the contractor.
This attribute is optional for `Individual` contractors and will be ignored for `Business` contractors.
work_state:
type:
- string
- 'null'
description: |-
State where the contractor will be conducting the majority of their work for the company.
This value is used when generating the new hire report.
This attribute is required for `Individual` contractors if `file_new_hire_report` is true and will be ignored for `Business` contractors.
ssn:
type: string
pattern: "[0-9]{9}"
description: |-
This attribute is optional for `Individual` contractors and will be ignored for `Business` contractors.
Social security number is needed to file the annual 1099 tax form.
business_name:
type: string
description: The name of the contractor business. This attribute is required for `Business` contractors and will be ignored for `Individual` contractors.
ein:
type: string
description: |-
The employer identification number of the contractor business.
This attribute is optional for `Business` contractors and will be ignored for `Individual` contractors.
is_active:
type: boolean
description: The status of the contractor. If the contractor's start date is in the future, updating this field to true means we are setting the start date to today. Attempting to deactivate a contractor while a dismissal is already scheduled, or reactivate while a rehire is already scheduled, will return a 422 error. Cancel the pending transition first using the appropriate cancel endpoint.
Contractor-Update-Request-Body:
description: Request body for updating a contractor.
type: object
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Contractor-Body"
x-examples:
update_individual_contractor:
version: b48c46abfed1487b873b442334b3c4ff
start_date: '2021-01-01'
first_name: Chanel
last_name: Boyle
middle_initial: X
wage_type: Hourly
hourly_rate: '20.00'
is_active: true
update_business_contractor:
version: b48c46abfed1487b873b442334b3c4ff
start_date: '2020-01-11'
business_name: Contracting Solutions
ein: '991113334'
wage_type: Fixed
is_active: false
Contractor-Create-Request-Body:
description: Request body for creating a contractor.
type: object
required:
- type
- wage_type
- start_date
allOf:
- "$ref": "#/components/schemas/Contractor-Body"
x-examples:
create_individual_contractor:
type: Individual
wage_type: Fixed
first_name: Johnson
last_name: Johnson
start_date: '2020-04-01'
self_onboarding: true
email: johnson@johnson.com
file_new_hire_report: true
work_state: CA
create_business_contractor:
type: Business
wage_type: Fixed
business_name: Johnson-Johnson Contractors
start_date: '2020-04-01'
Contractor-Onboarding-Status-Update-Request-Body:
description: Request body for updating a contractor's onboarding status.
type: object
required:
- onboarding_status
properties:
onboarding_status:
type: string
description: The updated onboarding status for the contractor.
enum:
- admin_onboarding_incomplete
- admin_onboarding_review
- self_onboarding_not_invited
- self_onboarding_invited
- self_onboarding_started
- self_onboarding_review
- onboarding_completed
x-examples:
update_onboarding_status:
onboarding_status: onboarding_completed
Contractor:
description: The representation of a contractor (individual or business) in Gusto.
type: object
properties:
uuid:
type: string
description: The UUID of the contractor in Gusto.
readOnly: true
company_uuid:
type: string
description: The UUID of the company the contractor is employed by.
readOnly: true
wage_type:
type: string
enum:
- Fixed
- Hourly
description: The contractor's wage type, either "Fixed" or "Hourly".
is_active:
type: boolean
default: true
description: The status of the contractor with the company.
readOnly: true
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
type:
type: string
enum:
- Individual
- Business
description: 'The contractor''s type, either "Individual" or "Business". '
first_name:
type:
- string
- 'null'
description: The contractor’s first name. This attribute is required for “Individual” contractors and will be ignored for “Business” contractors.
last_name:
type:
- string
- 'null'
description: The contractor’s last name. This attribute is required for “Individual” contractors and will be ignored for “Business” contractors.
middle_initial:
type:
- string
- 'null'
description: The contractor’s middle initial. This attribute is optional for “Individual” contractors and will be ignored for “Business” contractors.
business_name:
type:
- string
- 'null'
description: The name of the contractor business. This attribute is required for “Business” contractors and will be ignored for “Individual” contractors.
ein:
type:
- string
- 'null'
description: The Federal Employer Identification Number of the contractor business. This attribute is optional for “Business” contractors and will be ignored for “Individual” contractors.
has_ein:
type:
- boolean
- 'null'
description: Whether company's Employer Identification Number (EIN) is present
email:
type:
- string
- 'null'
description: 'The contractor’s email address. This attribute is optional for “Individual” contractors and will be ignored for “Business” contractors. '
work_email:
type:
- string
- 'null'
description: The work email address of the contractor. This is provided to support syncing users between our system and yours. You may not use this email address for any other purpose (e.g. marketing).
start_date:
type: string
description: The contractor's start date.
readOnly: true
address:
type:
- object
- 'null'
description: The contractor’s home address.
properties:
street_1:
type: string
readOnly: true
street_2:
type:
- string
- 'null'
readOnly: true
city:
type: string
readOnly: true
state:
type: string
readOnly: true
zip:
type: string
readOnly: true
country:
type: string
readOnly: true
readOnly: true
hourly_rate:
type: string
example: '50.0'
description: The contractor’s hourly rate. This attribute is required if the wage_type is “Hourly”.
file_new_hire_report:
type:
- boolean
- 'null'
description: The boolean flag indicating whether Gusto will file a new hire report for the contractor
work_state:
type:
- string
- 'null'
description: |-
State where the contractor will be conducting the majority of their work for the company.
This value is used when generating the new hire report.
onboarded:
type: boolean
description: The updated onboarding status for the contractor
onboarding_status:
type: string
description: One of the "onboarding_status" enum values.
enum:
- admin_onboarding_incomplete
- admin_onboarding_review
- self_onboarding_not_invited
- self_onboarding_invited
- self_onboarding_started
- self_onboarding_review
- onboarding_completed
payment_method:
anyOf:
- type: string
enum:
- Direct Deposit
- Check
- type: 'null'
description: The contractor's payment method.
has_ssn:
type: boolean
description: Indicates whether the contractor has an SSN in Gusto.
department_uuid:
type:
- string
- 'null'
description: The UUID of the department the contractor is under
department:
type:
- string
- 'null'
description: The contractor's department in the company.
readOnly: true
department_title:
type:
- string
- 'null'
description: The title of the contractor's department.
readOnly: true
dismissal_date:
type:
- string
- 'null'
description: The contractor's dismissal date.
readOnly: true
upcoming_employment:
type:
- object
- 'null'
description: The contractor's upcoming employment details, if a rehire is scheduled.
readOnly: true
properties:
start_date:
type: string
description: The start date of the upcoming employment.
setup_status:
type:
- string
- 'null'
description: The setup status of the upcoming employment.
dismissal_cancellation_eligible:
type: boolean
description: Whether the contractor's pending dismissal can be cancelled.
readOnly: true
rehire_cancellation_eligible:
type: boolean
description: Whether the contractor's pending rehire can be cancelled.
readOnly: true
member_portal_invitation_status:
type:
- object
- 'null'
description: Member portal invitation status information. Only included when the include param has the portal_invitations value set.
properties:
status:
type: string
description: The current status of the member portal invitation.
enum:
- pending
- sent
- verified
- complete
- cancelled
token_expired:
type:
- boolean
- 'null'
description: Whether the invitation token has expired.
welcome_email_sent_at:
type:
- string
- 'null'
format: date-time
description: The date and time when the welcome email was sent.
last_password_resent_at:
type:
- string
- 'null'
format: date-time
description: The date and time when the password reset was last resent.
partner_portal_invitation_sent:
type:
- boolean
- 'null'
description: Whether an external partner portal invitation webhook has been sent for this contractor. Only included when the include param has the portal_invitations value set.
x-tags:
- Contractors
required:
- uuid
x-examples:
Individual Contractor:
uuid: c9fc1ad3-c107-4e7b-aa21-2dd4b00a7a07
company_uuid: b7457fec-3b76-43bb-9c6e-69cca4688942
wage_type: Hourly
start_date: '2022-01-01'
is_active: true
version: 63859768485e218ccf8a449bb60f14ed
type: Individual
first_name: Kory
last_name: Gottlieb
middle_initial: P
business_name:
ein:
has_ein: false
has_ssn: true
department_uuid: 56260b3d-c375-415c-b77a-75d99f717193
email: keira.west@mckenzie.org
file_new_hire_report: true
work_state: FL
onboarded: true
onboarding_status: onboarding_completed
address:
street_1: 621 Jast Row
street_2: Apt. 281
city: Coral Springs
state: FL
zip: '33065'
country: USA
hourly_rate: '60.00'
payment_method: Direct Deposit
department: Engineering
department_title: Engineering
dismissal_date:
upcoming_employment:
dismissal_cancellation_eligible: false
rehire_cancellation_eligible: false
member_portal_invitation_status:
status: sent
token_expired: false
welcome_email_sent_at: '2024-01-15T14:30:00Z'
last_password_resent_at:
partner_portal_invitation_sent: true
Business Contractor:
uuid: c7c0659c-21a6-4b4e-b74c-9252576fc68c
company_uuid: 0ec4ae6e-e436-460d-b63c-94a14503d16f
wage_type: Fixed
start_date: '2022-01-01'
is_active: true
version: 8aab307f1e8ed788697f8986346af559
type: Business
first_name:
last_name:
middle_initial:
business_name: Labadie-Stroman
ein: XX-XXX0001
has_ein: true
has_ssn: false
email: jonatan@kerluke.info
file_new_hire_report: false
work_state:
onboarded: true
onboarding_status: onboarding_completed
address:
street_1: 1625 Bednar Center
street_2: Apt. 480
city: Port Charlotte
state: FL
zip: '33954'
country: USA
hourly_rate: '0.00'
payment_method: Direct Deposit
department_uuid:
department:
department_title:
dismissal_date:
upcoming_employment:
dismissal_cancellation_eligible: false
rehire_cancellation_eligible: false
member_portal_invitation_status:
partner_portal_invitation_sent: false
Contractor-Show:
title: Contractor-Show
description: A contractor, with additional fields that are only ever returned on GET requests gated behind the `include` query parameter.
allOf:
- "$ref": "#/components/schemas/Contractor"
- type: object
additionalProperties: true
properties:
company_name:
type: string
description: The name of the company the contractor is associated with. Only included when the include param has the company_name value set.
x-examples:
Individual Contractor:
uuid: c9fc1ad3-c107-4e7b-aa21-2dd4b00a7a07
company_name: Acme Consulting
company_uuid: b7457fec-3b76-43bb-9c6e-69cca4688942
wage_type: Hourly
start_date: '2022-01-01'
is_active: true
version: 63859768485e218ccf8a449bb60f14ed
type: Individual
first_name: Kory
last_name: Gottlieb
middle_initial: P
business_name:
ein:
has_ein: false
has_ssn: true
department_uuid: 56260b3d-c375-415c-b77a-75d99f717193
email: keira.west@mckenzie.org
file_new_hire_report: true
work_state: FL
onboarded: true
onboarding_status: onboarding_completed
address:
street_1: 621 Jast Row
street_2: Apt. 281
city: Coral Springs
state: FL
zip: '33065'
country: USA
hourly_rate: '60.00'
payment_method: Direct Deposit
department: Engineering
department_title: Engineering
dismissal_date:
upcoming_employment:
dismissal_cancellation_eligible: false
rehire_cancellation_eligible: false
member_portal_invitation_status:
status: sent
token_expired: false
welcome_email_sent_at: '2024-01-15T14:30:00Z'
last_password_resent_at:
partner_portal_invitation_sent: true
Business Contractor:
uuid: c7c0659c-21a6-4b4e-b74c-9252576fc68c
company_name: Acme Consulting
company_uuid: 0ec4ae6e-e436-460d-b63c-94a14503d16f
wage_type: Fixed
start_date: '2022-01-01'
is_active: true
version: 8aab307f1e8ed788697f8986346af559
type: Business
first_name:
last_name:
middle_initial:
business_name: Labadie-Stroman
ein: XX-XXX0001
has_ein: true
has_ssn: false
email: jonatan@kerluke.info
file_new_hire_report: false
work_state:
onboarded: true
onboarding_status: onboarding_completed
address:
street_1: 1625 Bednar Center
street_2: Apt. 480
city: Port Charlotte
state: FL
zip: '33954'
country: USA
hourly_rate: '0.00'
payment_method: Direct Deposit
department_uuid:
department:
department_title:
dismissal_date:
upcoming_employment:
dismissal_cancellation_eligible: false
rehire_cancellation_eligible: false
member_portal_invitation_status:
partner_portal_invitation_sent: false
Show-Contractors:
type: array
items:
"$ref": "#/components/schemas/Contractor-Show"
x-examples:
success_status:
- uuid: c9fc1ad3-c107-4e7b-aa21-2dd4b00a7a07
company_name: Acme Consulting
company_uuid: b7457fec-3b76-43bb-9c6e-69cca4688942
wage_type: Hourly
start_date: '2022-01-01'
is_active: true
version: 63859768485e218ccf8a449bb60f14ed
type: Individual
first_name: Kory
last_name: Gottlieb
middle_initial: P
business_name:
ein:
has_ein: false
has_ssn: true
department_uuid: 56260b3d-c375-415c-b77a-75d99f717193
email: keira.west@mckenzie.org
file_new_hire_report: true
work_state: FL
onboarded: true
onboarding_status: onboarding_completed
address:
street_1: 621 Jast Row
street_2: Apt. 281
city: Coral Springs
state: FL
zip: '33065'
country: USA
hourly_rate: '60.00'
payment_method: Direct Deposit
department: Engineering
department_title: Engineering
dismissal_date:
upcoming_employment:
dismissal_cancellation_eligible: false
rehire_cancellation_eligible: false
member_portal_invitation_status:
status: sent
token_expired: false
welcome_email_sent_at: '2024-01-15T14:30:00Z'
last_password_resent_at:
partner_portal_invitation_sent: true
- uuid: c7c0659c-21a6-4b4e-b74c-9252576fc68c
company_name: Acme Consulting
company_uuid: 0ec4ae6e-e436-460d-b63c-94a14503d16f
wage_type: Fixed
start_date: '2022-01-01'
is_active: true
version: 8aab307f1e8ed788697f8986346af559
type: Business
first_name:
last_name:
middle_initial:
business_name: Labadie-Stroman
ein: XX-XXX0001
has_ein: true
has_ssn: false
email: jonatan@kerluke.info
file_new_hire_report: false
work_state:
onboarded: true
onboarding_status: onboarding_completed
address:
street_1: 1625 Bednar Center
street_2: Apt. 480
city: Port Charlotte
state: FL
zip: '33954'
country: USA
hourly_rate: '0.00'
payment_method: Direct Deposit
department_uuid:
department:
department_title:
dismissal_date:
upcoming_employment:
dismissal_cancellation_eligible: false
rehire_cancellation_eligible: false
member_portal_invitation_status:
partner_portal_invitation_sent: false
Contractor-Onboarding-Status:
description: The representation of an contractor's onboarding status.
type: object
title: Contractor-Onboarding-Status
x-tags:
- Contractor
x-examples:
example:
uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
onboarding_status: admin_onboarding_incomplete
onboarding_steps:
- title: Basic details
id: basic_details
required: true
completed: false
requirements: []
- title: Enter compensation details
id: compensation_details
required: true
completed: false
requirements: []
- title: Add an address
id: add_address
required: true
completed: false
requirements: []
- title: Payment details
id: payment_details
required: true
completed: false
requirements: []
- title: Sign and acknowledge documents
id: sign_documents
required: false
completed: false
requirements:
- basic_details
- add_address
- title: File new hire report
id: file_new_hire_report
required: false
completed: false
requirements:
- basic_details
properties:
uuid:
type: string
description: Unique identifier for this contractor.
onboarding_status:
type: string
description: One of the "onboarding_status" enum values.
enum:
- onboarding_completed
- admin_onboarding_review
- admin_onboarding_incomplete
- self_onboarding_not_invited
- self_onboarding_invited
- self_onboarding_started
- self_onboarding_review
onboarding_steps:
type: array
description: List of steps required to onboard a contractor.
items:
title: Onboarding step
type: object
properties:
title:
type: string
description: User-friendly description of the onboarding step.
id:
type: string
description: String identifier for the onboarding step.
required:
type: boolean
description: When true, this step is required.
completed:
type: boolean
description: When true, this step has been completed.
requirements:
type: array
description: A list of onboarding steps required to begin this step.
items:
type: string
required:
- uuid
Contractor-Payment:
description: The representation of a single contractor payment.
type: object
x-examples:
success_status:
uuid: 04552eb9-7829-4b18-ae96-6983552948df
contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037,
bonus: '20.0'
date: '2020-10-19'
hours: '40.0'
payment_method: Direct Deposit
reimbursement: '100.0'
hourly_rate: '18.0'
may_cancel: true
status: Funded
wage: '0.0'
wage_type: Hourly
wage_total: '740.00'
example:
uuid: 04552eb9-7829-4b18-ae96-6983552948df
contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
bonus: '20.0'
date: '2020-10-19'
hours: '40.0'
payment_method: Direct Deposit
reimbursement: '100.0'
hourly_rate: '18.0'
may_cancel: false
status: Funded
wage: '0.0'
wage_type: Hourly
wage_total: '740.00'
title: Contractor Payment
properties:
uuid:
type: string
description: The unique identifier of the contractor payment in Gusto.
readOnly: true
contractor_uuid:
type: string
description: The UUID of the contractor.
readOnly: true
bonus:
type: string
format: float
description: The bonus amount in the payment.
readOnly: true
date:
type: string
description: The payment date.
readOnly: true
hours:
type: string
format: float
description: The number of hours worked for the payment.
readOnly: true
payment_method:
type: string
description: The payment method.
enum:
- Direct Deposit
- Check
- Historical Payment
- Correction Payment
readOnly: true
reimbursement:
type: string
format: float
description: The reimbursement amount in the payment.
readOnly: true
status:
type: string
description: Contractor payment status
enum:
- Funded
- Unfunded
hourly_rate:
type: string
format: float
description: The rate per hour worked for the payment.
readOnly: true
may_cancel:
type: boolean
description: Determine if the contractor payment can be cancelled.
readOnly: true
wage:
type: string
format: float
description: The fixed wage of the payment, regardless of hours worked.
readOnly: true
wage_type:
type: string
description: The wage type for the payment.
enum:
- Hourly
- Fixed
readOnly: true
wage_total:
type: string
format: float
description: "(hours * hourly_rate) + wage + bonus"
readOnly: true
x-tags:
- Contractor Payments
required:
- uuid
Contractor-Payment-Listing:
description: The representation of a contractor payment as it appears in a contractor's payment history.
type: object
x-examples:
success_status:
uuid: 04552eb9-7829-4b18-ae96-6983552948df
check_date: '2020-06-15'
bonus: '20.0'
hours: '40.0'
hourly_rate: '18.0'
payment_method: Direct Deposit
reimbursement: '100.0'
status: Funded
wage: '0.0'
wage_type: Hourly
wage_total: '740.00'
title: Contractor Payment Listing
properties:
uuid:
type: string
description: The unique identifier of the contractor payment in Gusto.
readOnly: true
check_date:
type: string
format: date
description: The check date for the payment.
readOnly: true
bonus:
type: string
format: float
description: The bonus amount in the payment.
readOnly: true
hours:
type: string
format: float
description: The number of hours worked for the payment.
readOnly: true
hourly_rate:
type: string
format: float
description: The rate per hour worked for the payment.
readOnly: true
payment_method:
type: string
description: The payment method.
enum:
- Direct Deposit
- Check
- Historical Payment
- Correction Payment
readOnly: true
reimbursement:
type: string
format: float
description: The reimbursement amount in the payment.
readOnly: true
status:
type: string
description: Contractor payment status
enum:
- Funded
- Unfunded
wage:
type: string
format: float
description: The fixed wage of the payment, regardless of hours worked.
readOnly: true
wage_type:
type: string
description: The wage type for the payment.
enum:
- Hourly
- Fixed
readOnly: true
wage_total:
type: string
format: float
description: "(hours * hourly_rate) + wage + bonus"
readOnly: true
x-tags:
- Contractor Payments
required:
- uuid
Contractor-Payment-Body:
description: Request body for creating a contractor payment.
type: object
required:
- contractor_uuid
- date
properties:
contractor_uuid:
type: string
description: The contractor receiving the payment.
date:
type: string
format: date
description: Date of contractor payment.
example: '2020-01-01'
payment_method:
type: string
enum:
- Direct Deposit
- Check
- Historical Payment
default: Direct Deposit
wage:
type: string
format: float
description: If the contractor is on a fixed wage, this is the fixed wage payment for the contractor, regardless of hours worked.
example: '5000.00'
hours:
type: string
format: float
description: If the contractor is on an hourly wage, this is the number of hours that the contractor worked for the payment.
example: '40.5'
bonus:
type: string
format: float
description: If the contractor is on an hourly wage, this is the bonus the contractor earned.
example: '500.00'
reimbursement:
type: string
format: float
description: Reimbursed wages for the contractor.
example: '20.00'
x-tags:
- Contractor Payments
Contractor-Payments-Preview-Body:
description: Request body for previewing contractor payments. The expected debit date for the payments is calculated from the provided check date and the company's ACH speed.
type: object
required:
- contractor_payments
properties:
contractor_payments:
type: array
description: A list of contractor payments to preview.
items:
type: object
properties:
contractor_uuid:
type: string
description: The contractor receiving the payment.
date:
type: string
description: Date of the contractor payment (check date).
payment_method:
type: string
enum:
- Direct Deposit
- Check
- Historical Payment
description: The payment method.
wage:
type: string
format: float
description: Fixed wage amount for the payment.
hours:
type: string
format: float
description: Number of hours worked for the payment.
bonus:
type: string
format: float
description: Bonus amount for the payment.
reimbursement:
type: string
format: float
description: Reimbursement amount for the payment.
x-examples:
Example:
contractor_payments:
- bonus: '0.00'
date: '2022-09-02'
contractor_uuid: 5376e95b-cca0-482b-bb81-aba5e360eb04
hours: '0.00'
payment_method: Check
reimbursement: '0.00'
wage: '123.00'
- bonus: '0.00'
date: '2022-09-02'
contractor_uuid: 0c984dce-de9a-47db-8bfb-5f0c823afe6f
hours: '0.00'
payment_method: Check
reimbursement: '0.00'
wage: '456.50'
x-tags:
- Contractor Payments
Contractor-Payments-Preview:
type: object
description: The expected debit date computed for a set of previewed contractor payments.
properties:
expected_debit_date:
type: string
format: date
description: The calculated debit date. If the payment method is Direct Deposit, the debit date will account for the company's ACH speed. If the payment method is Check, the debit date will be the same as the check date.
x-examples:
example:
expected_debit_date: '2022-08-16'
x-tags:
- Contractor Payments
Contractor-Payment-Group:
description: The full contractor payment group, including associated contractor payments.
type: object
allOf:
- "$ref": "#/components/schemas/Contractor-Payment-Group-Base"
- type: object
properties:
partner_owned_disbursement:
type:
- boolean
- 'null'
description: Whether the disbursement is partner owned.
readOnly: true
submission_blockers:
type: array
description: List of submission blockers for the contractor payment group.
readOnly: true
items:
"$ref": "#/components/schemas/Payroll-Submission-Blocker-Type"
credit_blockers:
type: array
description: List of credit blockers for the contractor payment group.
readOnly: true
items:
"$ref": "#/components/schemas/Payroll-Credit-Blocker-Type"
totals:
type: object
properties:
amount:
type: string
description: The total amount for the group of contractor payments.
readOnly: true
debit_amount:
type: string
description: The total debit amount for the group of contractor payments. Sum of wage & reimbursement amount.
readOnly: true
wage_amount:
type: string
description: The total wage amount for the group of contractor payments.
readOnly: true
reimbursement_amount:
type: string
description: The total reimbursement amount for the group of contractor payments.
readOnly: true
check_amount:
type: string
description: The total check amount for the group of contractor payments.
readOnly: true
readOnly: true
contractor_payments:
type: array
items:
"$ref": "#/components/schemas/Contractor-Payment-For-Group"
x-examples:
success:
uuid: f693e034-d833-46e3-88d4-2c820c383c57
company_uuid: c54046f7-1be4-4c54-8194-f4842c30c86d
check_date: '2024-05-07'
debit_date: '2024-05-01'
status: Unfunded
creation_token: 45ef81bb-ae24-4ad1-b2c6-6e563a4c30ed
contractor_payments:
- uuid: 630dc982-f498-4ebc-a6dc-4d76711027ce
contractor_uuid: 2e6d0970-31bf-47ce-bdb4-713e4207ecf4
bonus: '0.0'
hours: '40.0'
hourly_rate: '18.0'
may_cancel: false
payment_method: Direct Deposit
reimbursement: '75.0'
status: Unfunded
wage: '0.0'
wage_type: Hourly
wage_total: '720.0'
- uuid: 12f51eba-d653-4357-8c05-1f1f8d0fd5e3
contractor_uuid: a975fda0-fcf5-469a-a5fd-06e43d1cd99d
bonus: '0.0'
hours: '0.0'
hourly_rate: '0.0'
may_cancel: false
payment_method: Check
reimbursement: '0.0'
status: Unfunded
wage: '1500.0'
wage_type: Fixed
wage_total: '1500.0'
totals:
amount: '2295.0'
debit_amount: '2295.0'
wage_amount: '2220.0'
reimbursement_amount: '75.0'
With submission blockers:
uuid: 5ec3b582-7d04-4397-be1e-f0e79d00e1b7
company_uuid: 4a39b249-1e22-4fc9-a40f-cb07d2ab394e
check_date: '2025-08-21'
debit_date: '2025-08-19'
status: Unfunded
creation_token: 5ec3b582-7d04-4397-be1e-f0e79d00e1b7
partner_owned_disbursement: false
submission_blockers:
- blocker_type: fast_ach_threshold_exceeded
blocker_name: Fast ACH Threshold Exceeded
selected_option: wire_in
status: resolved
unblock_options:
- unblock_type: wire_in
check_date: '2025-08-21'
metadata:
wire_in_deadline: '2025-08-21T18:00:00Z'
wire_in_amount: '760000.0'
- unblock_type: move_to_four_day
check_date: '2025-08-21'
metadata:
debit_date: '2025-08-15'
credit_blockers:
- blocker_type: waiting_for_wire_in
blocker_name: Waiting for Wire In
selected_option: submit_wire
status: unresolved
unblock_options:
- unblock_type: submit_wire
check_date: '2025-08-21'
metadata:
wire_in_deadline: '2025-08-21T18:00:00Z'
wire_in_amount: '760000.0'
wire_in_request_uuid: 7a31fef8-46c6-4114-9677-214b7a3cb532
contractor_payments:
- uuid: ca8c7899-c2dc-40bb-8b7e-08c1309f5135
contractor_uuid: b4c6cd3c-4b45-4738-ad40-3da45b29a765
bonus: '0.0'
hours: '0.0'
hourly_rate: '0.0'
may_cancel: false
payment_method: Direct Deposit
reimbursement: '750000.0'
status: Unfunded
wage: '10000.0'
wage_type: Fixed
wage_total: '10000.0'
totals:
amount: '760000.00'
debit_amount: '760000.00'
wage_amount: '10000.00'
reimbursement_amount: '750000.00'
check_amount: '0.00'
x-tags:
- Contractor Payment Groups
Contractor-Payment-Group-Base:
description: Base properties for contractor payment groups.
type: object
properties:
uuid:
type: string
description: The unique identifier of the contractor payment group.
readOnly: true
company_uuid:
type: string
description: The UUID of the company.
readOnly: true
check_date:
type: string
description: The check date of the contractor payment group.
readOnly: true
debit_date:
type: string
description: The debit date of the contractor payment group.
readOnly: true
status:
type: string
description: The status of the contractor payment group. Will be `Funded` if all payments that should be funded (i.e. have `Direct Deposit` for payment method) are funded. A group can have status `Funded` while having associated payments that have status `Unfunded`, i.e. payment with `Check` payment method.
enum:
- Unfunded
- Funded
readOnly: true
creation_token:
type:
- string
- 'null'
description: Token used to make contractor payment group creation idempotent. Will error if attempting to create a group with a duplicate token.
readOnly: true
Contractor-Payment-Group-With-Blockers:
description: Contractor payment group with submission and credit blockers, but without individual contractor payments.
type: object
allOf:
- "$ref": "#/components/schemas/Contractor-Payment-Group-Base"
- type: object
properties:
partner_owned_disbursement:
type:
- boolean
- 'null'
description: Whether the disbursement is partner owned.
readOnly: true
submission_blockers:
type: array
description: List of submission blockers for the contractor payment group.
readOnly: true
items:
"$ref": "#/components/schemas/Payroll-Submission-Blocker-Type"
credit_blockers:
type: array
description: List of credit blockers for the contractor payment group.
readOnly: true
items:
"$ref": "#/components/schemas/Payroll-Credit-Blocker-Type"
totals:
type: object
properties:
amount:
type: string
description: The total amount for the group of contractor payments.
readOnly: true
debit_amount:
type: string
description: The total debit amount for the group of contractor payments. Sum of wage & reimbursement amount.
readOnly: true
wage_amount:
type: string
description: The total wage amount for the group of contractor payments.
readOnly: true
reimbursement_amount:
type: string
description: The total reimbursement amount for the group of contractor payments.
readOnly: true
check_amount:
type: string
description: The total check amount for the group of contractor payments.
readOnly: true
readOnly: true
x-examples:
success:
uuid: 94d9698e-9c95-45d6-b66e-d208258666ab
company_uuid: 5f5aaa38-f517-4f56-85e4-afdb83321663
check_date: '2025-09-22'
debit_date: '2025-09-18'
status: Unfunded
creation_token: 94d9698e-9c95-45d6-b66e-d208258666ab
partner_owned_disbursement: false
submission_blockers:
- blocker_type: fast_ach_threshold_exceeded
blocker_name: Fast ACH Threshold Exceeded
selected_option: wire_in
status: resolved
unblock_options:
- unblock_type: wire_in
check_date: '2025-09-22'
metadata:
wire_in_deadline: '2025-09-22T18:00:00Z'
wire_in_amount: '760000.0'
- unblock_type: move_to_four_day
check_date: '2025-09-22'
metadata:
debit_date: '2025-09-16'
credit_blockers:
- blocker_type: waiting_for_wire_in
blocker_name: Waiting for Wire In
selected_option: submit_wire
status: unresolved
unblock_options:
- unblock_type: submit_wire
check_date: '2025-09-22'
metadata:
wire_in_deadline: '2025-09-22T18:00:00Z'
wire_in_amount: '760000.0'
wire_in_request_uuid: 96ea4784-979a-45aa-9ccb-83be86b6dcea
totals:
amount: '760000.00'
debit_amount: '760000.00'
wage_amount: '10000.00'
reimbursement_amount: '750000.00'
check_amount: '0.00'
x-tags:
- Contractor Payment Groups
Contractor-Payment-Group-Minimal:
description: The summary of a contractor payment group.
type: object
allOf:
- "$ref": "#/components/schemas/Contractor-Payment-Group-Base"
- type: object
properties:
totals:
type: object
properties:
amount:
type: string
description: The total amount for the group of contractor payments.
readOnly: true
debit_amount:
type: string
description: The total debit amount for the group of contractor payments. Sum of wage & reimbursement amount.
readOnly: true
wage_amount:
type: string
description: The total wage amount for the group of contractor payments.
readOnly: true
reimbursement_amount:
type: string
description: The total reimbursement amount for the group of contractor payments.
readOnly: true
readOnly: true
x-examples:
success:
- uuid: 7f2337f9-9b78-44b9-aeed-be4777b833a8
company_uuid: c54046f7-1be4-4c54-8194-f4842c30c86d
check_date: '2024-03-15'
debit_date: '2024-03-11'
status: Funded
creation_token: a51a3500-3200-43af-a738-169d4b66a9db
totals:
debit_amount: '740.00'
wage_amount: '720.00'
reimbursement_amount: '20.00'
- uuid: 56260b3d-c375-415c-b77a-75d99f717193
company_uuid: c54046f7-1be4-4c54-8194-f4842c30c86d
check_date: '2024-05-02'
debit_date: '2024-04-26'
status: Unfunded
creation_token: 45ef81bb-ae24-4ad1-b2c6-6e563a4c30ed
totals:
debit_amount: '2365.00'
wage_amount: '2270.00'
reimbursement_amount: '95.00'
x-tags:
- Contractor Payment Groups
Contractor-Payment-For-Group:
description: The representation of a single contractor payment.
type: object
properties:
uuid:
type: string
description: The unique identifier of the contractor payment in Gusto.
readOnly: true
contractor_uuid:
type: string
description: The UUID of the contractor.
readOnly: true
bonus:
type: string
description: The bonus amount in the payment.
readOnly: true
hours:
type: string
description: The number of hours worked for the payment.
readOnly: true
payment_method:
type: string
description: The payment method.
enum:
- Direct Deposit
- Check
- Historical Payment
- Correction Payment
readOnly: true
reimbursement:
type: string
description: The reimbursement amount in the payment.
readOnly: true
status:
type: string
description: The status of the contractor payment. Will transition to `Funded` during payments processing if the payment should be funded, i.e. has `Direct Deposit` for payment method. Contractors payments with `Check` payment method will remain `Unfunded`.
enum:
- Funded
- Unfunded
hourly_rate:
type: string
description: The rate per hour worked for the payment.
readOnly: true
may_cancel:
type: boolean
description: Determine if the contractor payment can be cancelled.
readOnly: true
wage:
type: string
description: The fixed wage of the payment, regardless of hours worked.
readOnly: true
wage_type:
type: string
description: The wage type for the payment.
enum:
- Hourly
- Fixed
readOnly: true
wage_total:
type: string
description: "(hours * hourly_rate) + wage + bonus"
readOnly: true
x-tags:
- Contractor Payment Groups
Contractor-Payment-For-Group-Preview:
description: Preview representation of a single contractor payment with nullable uuid.
type: object
properties:
uuid:
type:
- string
- 'null'
description: The unique identifier of the contractor payment in Gusto.
readOnly: true
contractor_uuid:
type: string
description: The UUID of the contractor.
readOnly: true
bonus:
type: string
description: The bonus amount in the payment.
readOnly: true
hours:
type: string
description: The number of hours worked for the payment.
readOnly: true
payment_method:
type: string
description: The payment method.
enum:
- Direct Deposit
- Check
- Historical Payment
- Correction Payment
readOnly: true
reimbursement:
type: string
description: The reimbursement amount in the payment.
readOnly: true
status:
type: string
description: The status of the contractor payment. Will transition to `Funded` during payments processing if the payment should be funded, i.e. has `Direct Deposit` for payment method. Contractors payments with `Check` payment method will remain `Unfunded`.
enum:
- Funded
- Unfunded
hourly_rate:
type: string
description: The rate per hour worked for the payment.
readOnly: true
may_cancel:
type: boolean
description: Determine if the contractor payment can be cancelled.
readOnly: true
wage:
type: string
description: The fixed wage of the payment, regardless of hours worked.
readOnly: true
wage_type:
type: string
description: The wage type for the payment.
enum:
- Hourly
- Fixed
readOnly: true
wage_total:
type: string
description: "(hours * hourly_rate) + wage + bonus"
readOnly: true
x-tags:
- Contractor Payment Groups
Contractor-Payment-Summary:
description: The representation of the summary of contractor payments for a given company in a given time period.
type: object
x-examples:
success_status:
total:
reimbursements: '110.0'
wages: '1840.0'
contractor_payments:
- contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
reimbursement_total: '110.0'
wage_total: '1840.0'
payments:
- uuid: 04552eb9-7829-4b18-ae96-6983552948df
contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
bonus: '20.0'
date: '2020-10-19'
hours: '40.0'
payment_method: Direct Deposit
reimbursement: '100.0'
hourly_rate: '18.0'
may_cancel: true
wage: '0.0'
wage_type: Hourly
wage_total: '740.00'
- uuid: 25cfeb96-17fc-4fdf-8941-57f3fb9eea00
contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
bonus: '100.0'
date: '2020-10-19'
hours: '0.00'
payment_method: Direct Deposit
reimbursement: '10.0'
hourly_rate: '0.0'
may_cancel: true
wage: '1000.0'
wage_type: Fixed
wage_total: '1100.0'
properties:
total:
type: object
description: The wage and reimbursement totals for all contractor payments within a given time period.
properties:
reimbursements:
type: string
format: float
description: The total reimbursements for contractor payments within a given time period.
readOnly: true
wages:
type: string
format: float
description: The total wages for contractor payments within a given time period.
readOnly: true
readOnly: true
contractor_payments:
type: array
uniqueItems: false
description: The individual contractor payments, within a given time period, grouped by contractor.
items:
type: object
description: ''
properties:
contractor_uuid:
type: number
description: The UUID of the contractor.
readOnly: true
reimbursement_total:
type: string
format: float
description: The total reimbursements for the contractor within a given time period.
readOnly: true
wage_total:
type: string
format: float
description: The total wages for the contractor within a given time period.
readOnly: true
payments:
type: array
uniqueItems: false
description: The contractor's payments within a given time period.
items:
"$ref": "#/components/schemas/Contractor-Payment"
readOnly: true
readOnly: true
x-tags:
- Contractor Payments
Contractor-Payment-Summary-By-Dates:
description: The representation of the summary of contractor payments for a given company in a given time period.
type: object
x-examples:
success_status:
total:
reimbursements: '110.0'
wages: '1840.0'
contractor_payments:
- check_date: '2020-10-19'
reimbursement_total: '110.0'
wage_total: '1840.0'
payments:
- uuid: 04552eb9-7829-4b18-ae96-6983552948df
contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
bonus: '20.0'
date: '2020-10-19'
hours: '40.0'
payment_method: Direct Deposit
reimbursement: '100.0'
hourly_rate: '18.0'
wage: '0.0'
wage_type: Hourly
wage_total: '740.00'
- uuid: 25cfeb96-17fc-4fdf-8941-57f3fb9eea00
contractor_uuid: bc57832c-d8bc-43a7-ae99-3a03380ff037
bonus: '100.0'
date: '2020-10-19'
hours: '0.00'
payment_method: Direct Deposit
reimbursement: '10.0'
hourly_rate: '0.0'
wage: '1000.0'
wage_type: Fixed
wage_total: '1100.0'
properties:
total:
type: object
description: The wage and reimbursement totals for all contractor payments within a given time period.
properties:
reimbursements:
type: string
format: float
description: The total reimbursements for contractor payments within a given time period.
readOnly: true
wages:
type: string
format: float
description: The total wages for contractor payments within a given time period.
readOnly: true
readOnly: true
contractor_payments:
type: array
uniqueItems: false
description: The individual contractor payments, within a given time period, grouped by check date.
items:
type: object
description: ''
properties:
contractor_uuid:
type: string
description: The UUID of the contractor.
readOnly: true
check_date:
type: string
description: The payment check date.
readOnly: true
reimbursement_total:
type: string
format: float
description: The total reimbursements for the contractor within a given time period.
readOnly: true
wage_total:
type: string
format: float
description: The total wages for the contractor within a given time period.
readOnly: true
payments:
type: array
uniqueItems: false
description: The contractor's payments within a given time period.
items:
"$ref": "#/components/schemas/Contractor-Payment"
readOnly: true
readOnly: true
readOnly: true
x-tags:
- Contractor Payments
Contractor-Payment-Method:
title: Contractor-Payment-Method
type: object
x-examples:
check_method:
version: 63859768485e218ccf8a449bb60f14ed
type: Check
split_by:
splits:
Example-1:
value:
version: 63859768485e218ccf8a449bb60f14ed
type: Direct Deposit
split_by: Percentage
splits:
- uuid: e88f9436-b74e-49a8-87e9-777b9bfe715e
name: BoA Checking Account
priority: 1
split_amount: 100
Example-2:
value:
version: 63859768485e218ccf8a449bb60f14ed
type: Check
description: ''
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
type:
anyOf:
- type: string
enum:
- Direct Deposit
- Check
- type: 'null'
description: The payment method type. If type is Check, then `split_by` and `splits` do not need to be populated. If type is Direct Deposit, `split_by` and `splits` are required.
split_by:
anyOf:
- type: string
enum:
- Amount
- Percentage
- type: 'null'
description: Describes how the payment will be split. If `split_by` is Percentage, then the `split` amounts must add up to exactly 100. If `split_by` is Amount, then values are in cents and the last split amount must be `null` to capture the remainder.
splits:
type:
- array
- 'null'
items:
"$ref": "#/components/schemas/Payment-Method-Bank-Account"
x-tags:
- Contractor Payment Method
Payment-Method-Bank-Account:
type: object
description: Representation of a bank account item
properties:
uuid:
type: string
description: The bank account ID
name:
type: string
description: The bank account name
hidden_account_number:
type: string
description: Masked bank account number
priority:
type: integer
description: The order of priority for each payment split, with priority 1 being the first bank account paid. Priority must be unique and sequential.
split_amount:
description: If `split_by` is 'Amount', this is in cents (e.g., 500 for $5.00) and exactly one account must have a `split_amount` of `null` to capture the remainder. If `split_by` is 'Percentage', this is the percentage value (e.g., 60 for 60%).
type:
- integer
- 'null'
required:
- uuid
Payroll-Blockers-Error:
description: |-
Payroll Blockers Error
For detailed information, see the [Payroll Blockers guide](https://docs.gusto.com/embedded-payroll/docs/payroll-blockers)
type: object
x-examples:
needs_onboarding:
errors:
- error_key: base
category: payroll_blocker
message: Company must complete all onboarding requirements in order to run payroll.
metadata:
key: needs_onboarding
properties:
errors:
type: array
items:
type: object
properties:
error_key:
type: string
description: The string "base"
category:
type: string
description: The string "payroll_blocker"
message:
type: string
description: Human readable description of the payroll blocker
metadata:
type: object
properties:
key:
type: string
description: A categorization of the payroll blocker, e.g. "geocode_error"
Create-Token-Authentication:
description: ''
type: object
required:
- access_token
- token_type
- expires_in
- created_at
properties:
access_token:
type: string
description: A new access token that can be used for subsequent authenticated requests
token_type:
type: string
default: Bearer
description: The literal string 'Bearer'
expires_in:
type: number
default: 7200
description: The TTL of this token. After this amount of time, you must hit the refresh token endpoint to continue making authenticated requests.
created_at:
type: number
description: Datetime for when the new access token is created.
refresh_token:
type:
- string
- 'null'
description: A token that must be passed to the refresh token endpoint to get a new authenticated token. Only present when refresh token is provided.
Refresh-Token-Authentication:
description: ''
type: object
allOf:
- "$ref": "#/components/schemas/Create-Token-Authentication"
- type: object
properties:
refresh_token:
type: string
description: A token that must be passed to the refresh token endpoint to get a new authenticated token.
scope:
type: string
description: All of the scopes for which the access token provides access.
Authentication:
description: ''
type: object
oneOf:
- "$ref": "#/components/schemas/Create-Token-Authentication"
- "$ref": "#/components/schemas/Refresh-Token-Authentication"
x-examples:
create_token:
access_token: As8qKfNObHbwe7abbJqF0WUF6iCQoIW2R664TFzXd-A
token_type: Bearer
created_at: 1767644464
expires_in: 7200
refresh_token:
refresh_token:
access_token: As8qKfNObHbwe7abbJqF0WUF6iCQoIW2R664TFzXd-A
refresh_token: As8qKfNObHbwe7abbJqF0WUF6iCQoIW2R664TFzXd-A
scope: public payroll:read
token_type: Bearer
created_at: 1767644464
expires_in: 7200
Token-Info:
type: object
properties:
scope:
type: string
description: 'Space-separated list of OAuth scopes granted to this access token.
'
example: companies:read public
resource:
type:
- object
- 'null'
description: |
The resource associated with this access token. Null when
the token has no associated resource.
properties:
type:
type: string
description: 'The type of resource associated with the access token, e.g. `Company` for a company-level token or `Oauth::Application` for a system-level token.
'
example: Company
uuid:
type: string
format: uuid
description: The UUID of the associated resource
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
resource_owner:
type:
- object
- 'null'
description: |
The resource owner (user) who authorized this access token. Null for
system-level tokens or when the owner cannot be determined.
properties:
type:
type: string
enum:
- CompanyAdmin
- Employee
- Contractor
description: |
The type of resource owner:
- `CompanyAdmin`: A company administrator
- `Employee`: An employee
- `Contractor`: A contractor
example: CompanyAdmin
uuid:
type: string
format: uuid
description: The UUID of the resource owner
example: 8fdc31f0-a8a7-4872-a9f1-dcb5e6f876e3
x-examples:
company_admin_token:
scope: companies:read public
resource:
type: Company
uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
resource_owner:
type: CompanyAdmin
uuid: 8fdc31f0-a8a7-4872-a9f1-dcb5e6f876e3
system_token:
scope: partner_managed_companies:create public
resource:
type: Oauth::Application
uuid: 9c2a1b3d-4e5f-6789-abcd-ef0123456789
resource_owner:
Pay-Schedule:
type: object
title: Pay Schedule
x-examples:
Example:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Twice per month
anchor_pay_date: '2020-05-15'
anchor_end_of_pay_period: '2020-05-08'
day_1: 15
day_2: 31
name: Engineering
auto_pilot: false
custom_name: A new monthly pay schedule
success_status:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Twice per month
anchor_pay_date: '2022-09-01'
anchor_end_of_pay_period: '2022-08-18'
day_1: 1
day_2: 15
name:
custom_name: every 1st and 15th of the month
auto_payroll: true
active: true
auto_payroll_enablement_blockers:
description: |
The pay schedule object in Gusto captures the details of when employees work and when they should be paid. A company can have multiple pay schedules.
Response includes frequency, anchor dates, optional day_1/day_2 for monthly/semi-monthly, auto_pilot (or auto_payroll for API version 2025-11-15 and later), and auto_payroll_enablement_blockers when Autopayroll is disabled.
**Webhooks:** Subscribe to [Pay Schedule Events](https://docs.gusto.com/embedded-payroll/docs/pay-schedule-events) to receive `pay_schedule.created` and `pay_schedule.updated` when pay schedules are created or updated.
properties:
uuid:
"$ref": "#/components/schemas/Pay-Schedule-Uuid"
version:
"$ref": "#/components/schemas/Pay-Schedule-Version"
frequency:
"$ref": "#/components/schemas/Pay-Schedule-Frequency"
anchor_pay_date:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-Pay-Date"
anchor_end_of_pay_period:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-End-Of-Pay-Period"
day_1:
"$ref": "#/components/schemas/Pay-Schedule-Day-1"
day_2:
"$ref": "#/components/schemas/Pay-Schedule-Day-2"
name:
"$ref": "#/components/schemas/Pay-Schedule-Name"
custom_name:
"$ref": "#/components/schemas/Pay-Schedule-Custom-Name"
auto_pilot:
type: boolean
description: |
With automatic payroll enabled, payroll runs automatically one day before payroll deadlines. When false, payroll does not run automatically.
For API version 2025-11-15 and later the response uses auto_payroll (Autopayroll) instead.
readOnly: true
auto_payroll:
"$ref": "#/components/schemas/Pay-Schedule-Auto-Payroll"
active:
"$ref": "#/components/schemas/Pay-Schedule-Active"
auto_payroll_enablement_blockers:
"$ref": "#/components/schemas/Pay-Schedule-Auto-Payroll-Enablement-Blockers"
x-tags:
- Pay Schedules
required:
- uuid
Pay-Schedule-Show:
type: object
title: Pay Schedule
description: |
Pay schedule returned from pay schedule endpoints (GET by ID, POST create, PUT update). Same fields as Pay-Schedule with a required `version` for [optimistic concurrency](https://docs.gusto.com/embedded-payroll/docs/api-fundamentals#optimistic-version-control).
For API version 2025-11-15 and later, responses use `auto_payroll`; earlier versions use `auto_pilot` for the same semantic.
required:
- uuid
- version
properties:
uuid:
"$ref": "#/components/schemas/Pay-Schedule-Uuid"
version:
"$ref": "#/components/schemas/Pay-Schedule-Version"
frequency:
"$ref": "#/components/schemas/Pay-Schedule-Frequency"
anchor_pay_date:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-Pay-Date"
anchor_end_of_pay_period:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-End-Of-Pay-Period"
day_1:
"$ref": "#/components/schemas/Pay-Schedule-Day-1"
day_2:
"$ref": "#/components/schemas/Pay-Schedule-Day-2"
name:
"$ref": "#/components/schemas/Pay-Schedule-Name"
custom_name:
"$ref": "#/components/schemas/Pay-Schedule-Custom-Name"
auto_pilot:
type: boolean
description: |
With automatic payroll enabled, payroll runs automatically one day before payroll deadlines. When false, payroll does not run automatically.
For API version 2025-11-15 and later the response uses auto_payroll (Autopayroll) instead.
readOnly: true
auto_payroll:
"$ref": "#/components/schemas/Pay-Schedule-Auto-Payroll"
active:
"$ref": "#/components/schemas/Pay-Schedule-Active"
auto_payroll_enablement_blockers:
"$ref": "#/components/schemas/Pay-Schedule-Auto-Payroll-Enablement-Blockers"
workweek_start_day:
"$ref": "#/components/schemas/Pay-Schedule-Workweek-Start-Day"
x-tags:
- Pay Schedules
x-examples:
Example:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Twice per month
anchor_pay_date: '2020-05-15'
anchor_end_of_pay_period: '2020-05-08'
day_1: 15
day_2: 31
name: Engineering
auto_pilot: false
custom_name: A new monthly pay schedule
active: true
auto_payroll_enablement_blockers:
workweek_start_day: Monday
success_status:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Twice per month
anchor_pay_date: '2022-09-01'
anchor_end_of_pay_period: '2022-08-18'
day_1: 1
day_2: 15
name:
custom_name: every 1st and 15th of the month
auto_pilot: true
active: true
auto_payroll_enablement_blockers:
workweek_start_day: Monday
Pay-Schedule-List-Item:
type: object
title: Pay Schedule
description: 'Pay schedule returned from [GET /v1/companies/{company_id}/pay_schedules](ref:get-v1-companies-company_id-pay_schedules).
'
required:
- uuid
- version
properties:
uuid:
"$ref": "#/components/schemas/Pay-Schedule-Uuid"
version:
"$ref": "#/components/schemas/Pay-Schedule-Version"
frequency:
"$ref": "#/components/schemas/Pay-Schedule-Frequency"
anchor_pay_date:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-Pay-Date"
anchor_end_of_pay_period:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-End-Of-Pay-Period"
day_1:
"$ref": "#/components/schemas/Pay-Schedule-Day-1"
day_2:
"$ref": "#/components/schemas/Pay-Schedule-Day-2"
name:
"$ref": "#/components/schemas/Pay-Schedule-Name"
custom_name:
"$ref": "#/components/schemas/Pay-Schedule-Custom-Name"
auto_pilot:
type: boolean
description: 'With automatic payroll enabled, payroll runs automatically one day before payroll deadlines. When false, payroll does not run automatically.
'
readOnly: true
active:
"$ref": "#/components/schemas/Pay-Schedule-Active"
workweek_start_day:
"$ref": "#/components/schemas/Pay-Schedule-Workweek-Start-Day"
x-tags:
- Pay Schedules
x-examples:
Example:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Twice per month
anchor_pay_date: '2020-05-15'
anchor_end_of_pay_period: '2020-05-08'
day_1: 15
day_2: 31
name: Engineering
auto_pilot: false
custom_name: A new monthly pay schedule
active: true
workweek_start_day: Monday
success_status:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Twice per month
anchor_pay_date: '2022-09-01'
anchor_end_of_pay_period: '2022-08-18'
day_1: 1
day_2: 15
name:
custom_name: every 1st and 15th of the month
auto_pilot: true
active: true
workweek_start_day: Monday
Pay-Schedule-Show-Response:
type: array
description: 'List of pay schedules for a company, as returned from [GET /v1/companies/{company_id}/pay_schedules](ref:get-v1-companies-company_id-pay_schedules).
'
items:
"$ref": "#/components/schemas/Pay-Schedule-List-Item"
x-tags:
- Pay Schedules
x-examples:
success_status:
- uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Monthly
anchor_pay_date: '2022-12-11'
anchor_end_of_pay_period: '2022-11-13'
day_1: 11
day_2:
name:
custom_name: every 11th of the month
auto_pilot: true
active: true
workweek_start_day: Monday
Pay-Schedule-Version:
type: string
description: The current version of the pay schedule. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/api-fundamentals#optimistic-version-control) for information on how to use this field for optimistic concurrency.
readOnly: true
Pay-Schedule-Auto-Payroll:
type: boolean
description: |
With automatic payroll enabled, payroll runs automatically one day before payroll deadlines. When false, payroll does not run automatically.
Returned for API version 2025-11-15 and later; for earlier versions the response uses auto_pilot instead.
Pay-Schedule-Auto-Payroll-Enablement-Blockers:
type:
- array
- 'null'
description: List of blockers preventing automatic payroll from being enabled. If automatic payroll is already enabled, this field is null.
items:
"$ref": "#/components/schemas/Pay-Schedule-Auto-Payroll-Enablement-Blocker"
Pay-Schedule-Auto-Payroll-Enablement-Blocker:
type: object
description: A single blocker preventing Autopayroll enablement.
properties:
key:
type: string
description: 'The blocker type. Possible values: employees_not_on_direct_deposit, employees_not_salaried, missing_state_tax_requirements, missing_funding_method, one_day_ach_speed_not_supported, company_suspended, earned_fast_ach_not_met, hourly_employees_missing_default_hours.'
metadata:
type: object
description: Blocker-specific metadata (e.g. employee_uuids, states).
Pay-Schedule-List:
type: array
description: List of pay schedules for a company. The pay schedule object in Gusto captures the details of when employees work and when they should be paid. A company can have multiple pay schedules.
items:
"$ref": "#/components/schemas/Pay-Schedule-Show"
x-examples:
success_status:
- uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
version: 68934a3e9455fa72420237eb05902327
frequency: Monthly
anchor_pay_date: '2022-12-11'
anchor_end_of_pay_period: '2022-11-13'
day_1: 11
day_2:
name:
custom_name: every 11th of the month
auto_payroll: true
active: true
Pay-Schedule-Preview-Pay-Period:
type: object
description: A single pay period in a pay schedule preview, with check date, period boundaries, and payroll deadline.
required:
- check_date
- start_date
- run_payroll_by
- end_date
properties:
check_date:
type: string
format: date
description: The payment date, "Check date", for the pay period.
start_date:
type: string
format: date
description: The first day of the pay period.
run_payroll_by:
type: string
format: date
description: The deadline to run payroll for direct deposit on the check date.
end_date:
type: string
format: date
description: The last day of the pay period.
Pay-Schedule-Preview:
type: object
description: |
Preview of pay schedule dates for the next 18 months. Use this to show partners expected pay dates, pay period boundaries, and payroll deadlines before they create or change a pay schedule. See [Preview pay schedule dates](https://docs.gusto.com/embedded-payroll/reference/get-v1-companies-company_id-pay_schedules-preview) for usage.
- **pay_periods**: One entry per pay period in the range; each includes check_date, start_date, end_date, and run_payroll_by.
- **holidays**: Observed bank holidays (ISO date strings) that may affect payroll timing.
x-examples:
success_status:
pay_periods:
- check_date: '2022-01-15'
start_date: '2022-01-01'
run_payroll_by: '2022-01-14'
end_date: '2022-01-15'
- check_date: '2022-01-31'
start_date: '2022-01-16'
run_payroll_by: '2022-01-30'
end_date: '2022-01-31'
holidays:
- '2022-01-01'
- '2022-01-17'
properties:
pay_periods:
type: array
description: A list of pay periods for the previewed pay schedule (default range is 18 months from today, or up to end_date when provided).
items:
"$ref": "#/components/schemas/Pay-Schedule-Preview-Pay-Period"
holidays:
type: array
description: A list of dates for bank closures (ISO date strings); may affect payroll processing.
items:
type: string
format: date
Pay-Schedule-Date-Input:
type: string
format: date
description: ISO 8601 date (YYYY-MM-DD). Required for anchor and period dates in create, update, and preview requests.
Pay-Schedule-Create-Request:
type: object
description: |
Request body for creating a pay schedule. Required when a company has no pay schedules (onboarding) or when adding an additional schedule. Be sure to [check state laws](https://www.dol.gov/agencies/whd/state/payday) to know what schedule is right for your customers.
- **anchor_pay_date**: The first date that employees on this pay schedule will be paid (first company payday).
- **anchor_end_of_pay_period**: The last date of the first pay period; can be the same as anchor_pay_date.
example:
frequency: Twice per month
anchor_pay_date: '2020-05-15'
anchor_end_of_pay_period: '2020-05-08'
day_1: 15
day_2: 31
custom_name: demo pay schedule
workweek_start_day: Monday
properties:
frequency:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Frequency-Create-Update"
example: Twice per month
anchor_pay_date:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Date-Input"
example: '2020-05-15'
anchor_end_of_pay_period:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Date-Input"
example: '2020-05-08'
day_1:
type:
- integer
- 'null'
example: 15
description: |
An integer between 1 and 31 indicating the first day of the month that employees are paid. This field is only relevant for pay schedules with the "Twice per month" and "Monthly" frequencies. It will be null for pay schedules with other frequencies.
On create: required for Twice per month and Monthly; omit or null for Every week and Every other week.
day_2:
type:
- integer
- 'null'
example: 31
description: |
An integer between 1 and 31 indicating the second day of the month that employees are paid. This field is the second pay date for pay schedules with the "Twice per month" frequency. For semi-monthly pay schedules, set this field to 31. For months shorter than 31 days, the second pay date is set to the last day of the month. It will be null for pay schedules with other frequencies.
On create: only for Twice per month; omit or null for other frequencies.
custom_name:
type:
- string
- 'null'
example: demo pay schedule
description: |
A custom pay schedule name; defaults to the pay frequency description when null or omitted.
When null or omitted, the system generates a description from the pay frequency and pay days (e.g. "every 1st and 15th of the month" for twice-monthly, "every 11th of the month" for monthly, "every Friday" for weekly). The response returns this generated value in `custom_name` when no custom name was set. When provided, the value you set is stored and returned.
workweek_start_day:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Workweek-Start-Day-Create-Update"
example: Monday
required:
- frequency
- anchor_pay_date
- anchor_end_of_pay_period
Pay-Schedule-Update-Request:
type: object
description: Request body for updating a pay schedule. Sent in the pay_schedule_update root key. Version is required for optimistic concurrency. Pay schedules may be automatically adjusted if an onboarded company misses their first pay date; see [Create a pay schedule](https://docs.gusto.com/embedded-payroll/docs/create-a-pay-schedule).
example:
version: 68934a3e9455fa72420237eb05902327
auto_payroll: true
frequency: Twice per month
anchor_pay_date: '2021-10-15'
anchor_end_of_pay_period: '2021-10-15'
day_1: 15
day_2: 31
custom_name: demo pay schedule
workweek_start_day: Monday
properties:
version:
type: string
example: 68934a3e9455fa72420237eb05902327
description: Current version of the pay schedule from the GET response; required for optimistic concurrency. Mismatch returns 409 Conflict.
auto_payroll:
type: boolean
example: true
description: |
With automatic payroll enabled, payroll runs automatically one day before payroll deadlines. When false, payroll does not run automatically and must be run manually.
For API versions before 2025-11-15 the request field is auto_pilot.
frequency:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Frequency-Create-Update"
example: Twice per month
anchor_pay_date:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Date-Input"
example: '2020-05-15'
anchor_end_of_pay_period:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Date-Input"
example: '2020-05-08'
day_1:
type:
- integer
- 'null'
example: 15
description: 'An integer between 1 and 31 indicating the first day of the month that employees are paid. This field is only relevant for pay schedules with the "Twice per month" and "Monthly" frequencies. It will be null for pay schedules with other frequencies.
'
day_2:
type:
- integer
- 'null'
example: 31
description: 'An integer between 1 and 31 indicating the second day of the month that employees are paid. This field is the second pay date for pay schedules with the "Twice per month" frequency. For semi-monthly pay schedules, set this field to 31. For months shorter than 31 days, the second pay date is set to the last day of the month. It will be null for pay schedules with other frequencies.
'
custom_name:
type:
- string
- 'null'
example: demo pay schedule
description: A custom pay schedule name; null clears any custom name so the default frequency description applies.
workweek_start_day:
allOf:
- "$ref": "#/components/schemas/Pay-Schedule-Workweek-Start-Day-Create-Update"
example: Monday
required:
- version
Pay-Schedule-Create-Update:
type: object
title: Pay Schedule
x-examples:
Example:
uuid: f2a69c38-e2f9-4e31-b5c5-4754fc60a052
frequency: Twice per month
anchor_pay_date: '2020-05-15'
anchor_end_of_pay_period: '2020-05-08'
day_1: 15
day_2: 31
name: Engineering
auto_pilot: false
custom_name: A new monthly pay schedule
description: The representation of a pay schedule.
properties:
uuid:
"$ref": "#/components/schemas/Pay-Schedule-Uuid"
frequency:
"$ref": "#/components/schemas/Pay-Schedule-Frequency-Create-Update"
anchor_pay_date:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-Pay-Date"
anchor_end_of_pay_period:
"$ref": "#/components/schemas/Pay-Schedule-Anchor-End-Of-Pay-Period"
day_1:
"$ref": "#/components/schemas/Pay-Schedule-Day-1"
day_2:
"$ref": "#/components/schemas/Pay-Schedule-Day-2"
name:
"$ref": "#/components/schemas/Pay-Schedule-Name"
custom_name:
"$ref": "#/components/schemas/Pay-Schedule-Custom-Name"
auto_pilot:
type: boolean
description: |
With automatic payroll enabled, payroll runs automatically one day before payroll deadlines. When false, payroll does not run automatically.
For API version 2025-11-15 and later the response uses auto_payroll (Autopayroll) instead.
readOnly: true
active:
"$ref": "#/components/schemas/Pay-Schedule-Active"
x-tags:
- Pay Schedules
required:
- uuid
Pay-Schedule-Uuid:
type: string
description: The unique identifier of the pay schedule in Gusto.
readOnly: true
Pay-Schedule-Frequency:
type: string
description: |
The frequency that employees on this pay schedule are paid with Gusto.
READ-ONLY in responses. Possible values:
- `Every week`: Employees are paid weekly.
- `Every other week`: Employees are paid bi-weekly (every two weeks).
- `Twice per month`: Employees are paid on two fixed days each month (e.g. 1st and 15th); use day_1 and day_2.
- `Monthly`: Employees are paid once per month; use day_1 for the pay day.
- `Quarterly`: Employees are paid every three months.
- `Annually`: Employees are paid once per year.
enum:
- Every week
- Every other week
- Twice per month
- Monthly
- Quarterly
- Annually
readOnly: true
Pay-Schedule-Frequency-Create-Update:
type: string
description: |
The frequency that employees on this pay schedule are paid with Gusto. Only weekly, bi-weekly, twice per month, and monthly are supported on create and update.
- `Every week`: Weekly pay.
- `Every other week`: Biweekly pay.
- `Twice per month`: Two pay dates per month; require day_1 and day_2 (use 31 for last day of month).
- `Monthly`: One pay date per month; require day_1 (1-31).
enum:
- Every week
- Every other week
- Twice per month
- Monthly
Pay-Schedule-Anchor-Pay-Date:
type: string
format: date
description: The first date that employees on this pay schedule are paid with Gusto (ISO 8601 YYYY-MM-DD).
readOnly: true
Pay-Schedule-Anchor-End-Of-Pay-Period:
type: string
format: date
description: The last date of the first pay period. This can be the same date as the anchor pay date (ISO 8601 YYYY-MM-DD).
readOnly: true
Pay-Schedule-Day-1:
type:
- integer
- 'null'
description: 'An integer between 1 and 31 indicating the first day of the month that employees are paid. This field is only relevant for pay schedules with the "Twice per month" and "Monthly" frequencies. It will be null for pay schedules with other frequencies.
'
readOnly: true
Pay-Schedule-Day-2:
type:
- integer
- 'null'
description: 'An integer between 1 and 31 indicating the second day of the month that employees are paid. This field is the second pay date for pay schedules with the "Twice per month" frequency. For semi-monthly pay schedules, this field should be set to 31. For months shorter than 31 days, the second pay date is set to the last day of the month. It will be null for pay schedules with other frequencies.
'
readOnly: true
Pay-Schedule-Name:
type:
- string
- 'null'
description: This field will be hourly when the pay schedule is for hourly employees, salaried when the pay schedule is for salaried employees, the department name if pay schedule is by department, and null when the pay schedule is for all employees.
readOnly: true
Pay-Schedule-Custom-Name:
type: string
description: |
A custom name for a pay schedule; defaults to the pay frequency description when none was set by the partner.
When the partner never set a custom name (or cleared it), this field contains the auto-generated description derived from frequency and pay days (e.g. "every 1st and 15th of the month", "every Friday"). When the partner set a custom name on create or update, this field contains that value.
readOnly: true
Pay-Schedule-Active:
type: boolean
description: Whether this pay schedule is associated with any employees. A pay schedule is inactive when it's unassigned.
readOnly: true
Pay-Schedule-Workweek-Start-Day:
description: 'The day of the week that this pay schedule''s workweeks start on, used for regular rate of pay overtime calculations. Null when no workweek start day has been configured (e.g. legacy pay schedules).
'
anyOf:
- type: string
enum:
- Sunday
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- type: 'null'
readOnly: true
Pay-Schedule-Workweek-Start-Day-Create-Update:
type: string
description: 'The day of the week that this pay schedule''s workweeks start on, used for regular rate of pay overtime calculations.
'
enum:
- Sunday
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
Ytd-Benefit-Amounts-From-Different-Company:
type: object
description: Ytd Benefit Amounts From Different Company
properties:
uuid:
type: string
description: The unique identifier for this benefit amount record.
benefit_type:
type: integer
description: The benefit type supported by Gusto. See [Benefit Types](https://docs.gusto.com/embedded-payroll/reference/get-v1-benefits) for more information.
ytd_employee_deduction_amount:
type: string
description: The year-to-date employee deduction made outside the current company.
ytd_company_contribution_amount:
type: string
description: The year-to-date company contribution made outside the current company.
required:
- uuid
- benefit_type
- ytd_employee_deduction_amount
- ytd_company_contribution_amount
x-examples:
Ytd-Benefit-Amounts-List:
- uuid: c5fdae57-5483-4529-9aae-f0edceed92d3
benefit_type: 1
ytd_employee_deduction_amount: '5000.00'
ytd_company_contribution_amount: '2500.00'
- uuid: 1bfdb946-b2be-4909-ac46-9e7f73872d0a
benefit_type: 5
ytd_employee_deduction_amount: '2132.00'
ytd_company_contribution_amount: '3345.00'
Ytd-Benefit-Amounts-From-Different-Company-Body:
type: object
description: Year-to-date benefit amounts contributed at a different company for the specified employee.
properties:
benefit_type:
type: integer
description: The benefit type supported by Gusto.
tax_year:
type: number
minimum: 2000
maximum: 2999
description: The tax year for which this amount applies.
ytd_employee_deduction_amount:
type: string
default: '0.00'
description: The year-to-date employee deduction made outside the current company.
ytd_company_contribution_amount:
type: string
default: '0.00'
description: The year-to-date company contribution made outside the current company.
required:
- benefit_type
- tax_year
- ytd_employee_deduction_amount
- ytd_company_contribution_amount
x-tags:
- Employee Benefits
Company-Attachment:
description: The company attachment
type: object
required:
- uuid
- name
- category
- upload_time
x-examples:
success_status:
uuid: 1263eae5-4411-48d9-bd6d-18ed93082e65
name: Company_Attachment_File.pdf
category: gep_notice
upload_time: '2024-09-10T01:54:20Z'
compliance_attachment:
uuid: 987058cc-23ee-46e9-81ef-5cee086cceca
name: Compliance_Document.pdf
category: compliance
upload_time: '2024-10-15T14:30:00Z'
x-tags:
- Company Attachment
properties:
uuid:
type: string
description: UUID of the company attachment
name:
type: string
description: name of the file uploaded
category:
type: string
description: |
The category of the company attachment.
- `gep_notice`: A tax notice attachment
- `compliance`: A compliance attachment
- `other`: Any other attachment type
enum:
- gep_notice
- compliance
- other
upload_time:
type: string
description: The ISO 8601 timestamp of when an attachment was uploaded
Company-Attachment-List:
type: array
x-examples:
success_status:
- uuid: 5de11791-98fd-4587-9ed0-d5d804b8e647
name: Company_Attachment_File1.pdf
category: gep_notice
upload_time: '2022-02-01T00:00:00.000Z'
- uuid: 987058cc-23ee-46e9-81ef-5cee086cceca
name: Company_Attachment_File2.pdf
category: compliance
upload_time: '2022-02-01T00:00:00.000Z'
items:
"$ref": "#/components/schemas/Company-Attachment"
Company-Attachment-Download-Url:
description: The temporary url to download a Company Attachment File
type: object
required:
- url
x-examples:
success_status:
url: https://s3.amazonaws.com/static.gusto.com/assets/uploaded_files/334721.pdf?parameter=daer8r3432423djklsdafaso
success_status_alternate:
url: https://s3.amazonaws.com/static.gusto.com/assets/uploaded_files/112233.pdf?parameter=abc123def456
properties:
url:
type: string
description: A full URL to download a Company Attachment File
Company-Attachment-Create-Request-Body:
description: The binary payload of the file and the company attachment category.
type: object
required:
- document
- category
properties:
document:
type: string
format: binary
description: The binary payload of the file to be uploaded. Supported file types are .qbb, .qbm, .gif, .jpg, .png, .pdf, .xls, .xlsx, .doc and .docx.
category:
type: string
description: |
The category of a company attachment.
- `gep_notice`: A tax notice attachment
- `compliance`: A compliance attachment
enum:
- gep_notice
- compliance
Company-Bank-Account:
description: The company bank account
type: object
x-examples:
success_status:
uuid: 1263eae5-4411-48d9-bd6d-18ed93082e65
company_uuid: e2c4c0ce-2986-48b9-86cf-ec27f6ed9a36
account_type: Checking
routing_number: '851070439'
hidden_account_number: XXXX4087
verification_status: verified
verification_type: bank_deposits
name: Employer Funding Account
reverse_wire_enabled: false
plaid_external_status:
uuid: 1263eae5-4411-48d9-bd6d-18ed93082e65
company_uuid: e2c4c0ce-2986-48b9-86cf-ec27f6ed9a36
account_type: Checking
routing_number: '851070439'
hidden_account_number: XXXX4087
verification_status: verified
verification_type: plaid_external
name: Employer Funding Account
reverse_wire_enabled: true
x-tags:
- Company Bank Accounts
properties:
uuid:
type: string
description: UUID of the bank account
company_uuid:
type: string
description: UUID of the company
account_type:
type: string
description: Bank account type
enum:
- Checking
- Savings
routing_number:
type: string
description: The bank account's routing number
hidden_account_number:
type: string
description: Masked bank account number
verification_status:
type: string
enum:
- awaiting_deposits
- ready_for_verification
- verified
description: |-
The verification status of the bank account.
'awaiting_deposits' means the bank account is just created and money is being transferred.
'ready_for_verification' means the micro-deposits are completed and the verification process can begin by using the verify endpoint.
'verified' means the bank account is verified.
verification_type:
type: string
enum:
- bank_deposits
- plaid
- plaid_external
description: |-
The verification type of the bank account.
'bank_deposits' means the bank account is connected by entering routing and accounting numbers and verifying through micro-deposits.
'plaid' means the bank account is connected through Plaid.
plaid_status:
anyOf:
- type: string
enum:
- connected
- disconnected
- type: 'null'
description: The Plaid connection status of the bank account. Only applies when verification type is Plaid.
last_cached_balance:
type:
- string
- 'null'
description: The last fetch balance for the bank account. Please be aware that this amount does not reflect the most up-to-date balance and only applies when the verification type is Plaid.
balance_fetched_date:
type:
- string
- 'null'
description: The balance fetch date associated with the last_cached_balance. Only applies when verification type is Plaid.
name:
type: string
description: Name of bank account
reverse_wire_enabled:
type:
- boolean
- 'null'
description: |-
Whether the company has at least one bank account with active reverse-wire
funding. The same value is returned on every bank-account row in this
response.
required:
- uuid
Company-Bank-Account-Request:
type: object
properties:
routing_number:
type: string
description: The bank routing number
account_number:
type: string
description: The bank account number
account_type:
type: string
description: The bank account type
enum:
- Checking
- Savings
required:
- routing_number
- account_number
- account_type
Employee-Bank-Account-Request:
type: object
description: Request body for creating or updating an employee bank account. Send these fields as top-level JSON keys (the API wraps them server-side).
properties:
routing_number:
type: string
description: The bank routing number (nine digits).
example: '266905059'
account_number:
type: string
description: The bank account number.
example: '5809431207'
account_type:
type: string
description: The bank account type.
example: Checking
enum:
- Checking
- Savings
name:
type: string
description: A name for the bank account (e.g. "Primary Checking").
example: BoA Checking Account
required:
- routing_number
- account_number
- account_type
- name
Company-Bank-Account-Verify-Request:
type: object
description: Request body for verifying a company bank account with the two micro-deposit amounts.
required:
- deposit_1
- deposit_2
properties:
deposit_1:
type: number
format: float
description: The first micro-deposit amount (order does not matter).
deposit_2:
type: number
format: float
description: The second micro-deposit amount (order does not matter).
Plaid-Processor-Token-Request:
type: object
description: Request body for creating a verified company bank account from a Plaid processor token.
required:
- owner_type
- owner_id
- processor_token
properties:
owner_type:
description: The owner type of the bank account
type: string
enum:
- Company
owner_id:
description: The owner UUID of the bank account
type: string
processor_token:
description: The Plaid processor token
type: string
x-examples:
example:
owner_type: Company
owner_id: ef279fbd-0fc6-4cf1-a977-6939d621c429
processor_token: processor-sandbox-0asd1-a92nc
Benefit-Type-Requirements:
description: ''
type: object
x-tags:
- Company Benefits
properties:
employee_deduction:
type: object
description: The amount to be deducted, per pay period, from the employee's pay.
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
contribution:
type: object
description: An object representing the type and value of the company contribution.
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
deduct_as_percentage:
type: object
description: Whether the employee deduction amount should be treated as a percentage to be deducted from each payroll.
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
catch_up:
type: object
description: Whether the employee should use a benefit’s 'catch up' rate. Only Roth 401k and 401k benefits use this value for employees over 50.
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
limit_option:
type: object
description: Some benefits require additional information to determine their limit. For example, for an HSA benefit, the limit option should be either 'Family' or 'Individual'. For a Dependent Care FSA benefit, the limit option should be either 'Joint Filing or Single' or 'Married and Filing Separately'.
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
company_contribution_annual_maximum:
type: object
description: The maximum company contribution amount per year. A null value signifies no limit.
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
coverage_salary_multiplier:
type: object
description: 'The coverage amount as a multiple of the employee''s salary. Only applicable for Group Term Life benefits. Note: cannot be set if coverage amount is also set.'
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
coverage_amount:
type: object
description: 'The amount that the employee is insured for. Note: company contribution cannot be present if coverage amount is set.'
properties:
required:
type: boolean
editable:
type: boolean
default_value:
type:
- object
- 'null'
properties:
value:
type: string
type:
type: string
choices:
type:
- array
- 'null'
items:
type: string
x-examples:
Example:
employee_deduction:
required: true
editable: true
default_value:
choices:
contribution:
required: true
editable: true
default_value:
choices:
- amount
deduct_as_percentage:
required: false
editable: false
default_value:
choices:
catch_up:
required: false
editable: false
default_value:
choices:
limit_option:
required: false
editable: false
default_value:
choices:
company_contribution_annual_maximum:
required: false
editable: false
default_value:
choices:
coverage_salary_multiplier:
required: false
editable: false
default_value:
choices:
coverage_amount:
required: false
editable: false
default_value:
choices:
Benefit-Summary:
description: ''
type: object
x-tags:
- Company Benefits
x-examples:
typical_summary:
start_date: '2022-01-01'
end_date: '2022-12-31'
description: Simple IRA
company_benefit_deduction: '60.0'
company_benefit_contribution: '30.0'
employees:
- uuid: 54b7114f-f5e2-4f4b-911b-5cd5ad9032b0
company_benefit_deduction: '60.0'
company_benefit_contribution: '30.0'
benefit_deduction: '660.0'
benefit_contribution: '330.0'
gross_pay: '18000.0'
imputed_pay: '350.0'
payroll_benefits:
- payroll_uuid: 8cc3471b-9da5-47df-88ea-f238c7cb968b
payroll_type: Regular
check_date: '2022-03-01'
gross_pay: '3000.0'
imputed_pay: '70.0'
company_benefit_deduction: '10.0'
company_benefit_contribution: '5.0'
pay_period:
start_date: '2022-02-01'
end_date: '2022-02-28'
- payroll_uuid: d9d92786-722b-4bf7-bb32-79140418d349
payroll_type: Bonus
check_date: '2022-12-31'
gross_pay: '3000.0'
imputed_pay: '70.0'
company_benefit_deduction: '20.0'
company_benefit_contribution: '10.0'
pay_period:
start_date: nil
end_date: nil
properties:
start_date:
type: string
description: The start date of benefit summary.
end_date:
type: string
description: The end date of benefit summary.
description:
type: string
description: Description of the benefit.
company_benefit_deduction:
type: string
description: The aggregate of employee deduction for all employees given the period of time and the specific company benefit.
company_benefit_contribution:
type: string
description: The aggregate of company contribution for all employees given the period of time and the specific company benefit.
employees:
type: array
description: ''
items:
type: object
properties:
uuid:
type: string
description: The UUID of the employee
company_benefit_deduction:
type: string
description: The sum of employee deduction for this employee given the period of time and the specific company benefit.
company_benefit_contribution:
type: string
description: The sum of company contribution for this employee given the period of time and the specific company benefit.
benefit_deduction:
type: string
description: The sum of employee benefit deduction for this employee given the period of time and the benefit type.
benefit_contribution:
type: string
description: The sum of company contribution for this employee given the period of time and the benefit type.
gross_pay:
type: string
description: Gross pay for this employee given the period of time.
imputed_pay:
type: string
description: Total imputed pay for this employee given the period of time (not scoped to a benefit type).
payroll_benefits:
type: array
items:
type: object
properties:
payroll_uuid:
type: string
payroll_type:
type: string
description: Whether it is regular or bonus payroll
check_date:
type: string
description: Check date of this payroll.
gross_pay:
type: string
description: Gross pay for this employee on the payroll.
imputed_pay:
type: string
description: Total imputed pay for this employee on the payroll.
company_benefit_deduction:
type: string
description: The employee benefit deduction amount for this employee on the payroll.
company_benefit_contribution:
type: string
description: The company contribution amount for this employee on the payroll.
pay_period:
type: object
properties:
start_date:
type:
- string
- 'null'
description: The beginning of the payroll's pay period.
end_date:
type:
- string
- 'null'
description: The end of the payroll's pay period.
Supported-Benefit:
description: ''
type: object
properties:
benefit_type:
type: integer
description: The benefit type in Gusto.
readOnly: true
name:
type: string
description: The name of the benefit.
readOnly: true
description:
type: string
description: The description of the benefit.
readOnly: true
pretax:
type: boolean
description: Whether the benefit is deducted before tax calculations, thus reducing one’s taxable income
readOnly: true
posttax:
type: boolean
description: Whether the benefit is deducted after tax calculations.
readOnly: true
imputed:
type: boolean
description: Whether the benefit is considered imputed income.
readOnly: true
healthcare:
type: boolean
description: Whether the benefit is healthcare related.
readOnly: true
retirement:
type: boolean
description: Whether the benefit is associated with retirement planning.
readOnly: true
yearly_limit:
type: boolean
description: Whether the benefit has a government mandated yearly limit. If the benefit has a government mandated yearly limit, employees cannot be added to more than one benefit of this type.
readOnly: true
category:
type: string
description: Category where the benefit belongs to.
readOnly: true
writable_by_application:
type: boolean
description: Whether this benefit can be written (created, updated, or destroyed). Returns true if the benefit type is permitted for the application, false otherwise.
readOnly: true
x-examples:
Example:
benefit_type: 1
name: Medical Insurance
description: Deductions and contributions for Medical Insurance
pretax: true
posttax: false
imputed: false
healthcare: true
retirement: false
yearly_limit: false
category: Health
Supported-Benefits-List:
benefit_type: 1
name: Medical Insurance
description: Deductions and contributions for Medical Insurance
pretax: true
posttax: false
imputed: false
healthcare: true
retirement: false
yearly_limit: false
category: Health
Supported-Benefit-List:
type: array
items:
"$ref": "#/components/schemas/Supported-Benefit"
x-examples:
full_catalog:
- benefit_type: 1
name: Medical Insurance
description: Health-related insurance under IRS section 125 includes medical, dental and vision insurance, and is the most common benefit provided by employers today. It allows paying for certain health benefits using pre-tax dollars. This lowers the employee taxable income and the overall tax payments for both the employee and the employer.
pretax: true
posttax: false
imputed: false
healthcare: true
retirement: false
yearly_limit: false
category: Health
- benefit_type: 2
name: Dental Insurance
description: Health-related insurance under IRS section 125 includes medical, dental and vision insurance, and is the most common benefit provided by employers today. It allows paying for certain health benefits using pre-tax dollars. This lowers the employee taxable income and the overall tax payments for both the employee and the employer.
pretax: true
posttax: false
imputed: false
healthcare: true
retirement: false
yearly_limit: false
category: Health
- benefit_type: 3
name: Vision Insurance
description: Health-related insurance under IRS section 125 includes medical, dental and vision insurance, and is the most common benefit provided by employers today. It allows paying for certain health benefits using pre-tax dollars. This lowers the employee taxable income and the overall tax payments for both the employee and the employer.
pretax: true
posttax: false
imputed: false
healthcare: true
retirement: false
yearly_limit: false
category: Health
- benefit_type: 6
name: Health Savings Account
description: HSA allows employees to be reimbursed for qualified medical expenses. In most cases, deductions are pre-tax and lower the total amount of tax paid by employees and the employer. Employers may also make tax-free contributions to employee HSA. Remaining balances are carried over to the next year.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: true
category: Health
- benefit_type: 7
name: Health FSA
description: FSA allows employees to be reimbursed for qualified medical expenses. Contributions are pre-tax and lower the total amount of tax paid by employees and the employer.Employers may also make tax-free contributions to employee FSA. Remaining balances are not carried over to the next year.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: true
category: Health
- benefit_type: 11
name: Dependent Care FSA
description: Dependent Care FSA reimburses employees for expenses to care for dependents while the employee is at work (e.g. Daycares). Contributions are pre-tax and lower the total amount of tax paid by employees and the employer. Employers may also make tax-free contributions to employee FSA. Remaining balances are not carried over to the next year.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: true
category: Health
- benefit_type: 8
name: SIMPLE IRA
description: Simple IRA is a tax-deferred retirement savings plan for employees. It is often use by small businesses as an alternative to 401(k) due to its relatively low operating cost. Employers are required to contribute a specific percentage to an employee’s SIMPLE IRA.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 14
name: SIMPLE IRA (Non-elective)
description: Simple IRA is a tax-deferred retirement savings plan for employees. It is often use by small businesses as an alternative to 401(k) due to its relatively low operating cost. Employers are required to contribute a specific percentage to an employee’s SIMPLE IRA.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 105
name: Roth 401(k)
description: Roth 401(k) is an after-tax savings plan for employees. Contributions made by employees are taxable for federal and state withholding. Often, employers contribute additional pre-tax dollars to the employee’s Roth account to encourage saving for retirement.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 110
name: Roth 403(b)
description: Roth 403(b) is an after-tax savings plan for certain clerics, employees of public schools, and employees of other types of tax-exempt organizations. Contributions made by employees are taxable for federal and state withholding. Often, employers contribute additional pre-tax dollars to the employee’s Roth account to encourage saving for retirement.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 5
name: 401(k)
description: 401(k) is tax-deferred retirement savings plan for employees. It is the most common retirement plan benefit offered by employers in all sizes. Often, employers contribute to the employee savings plan additional pre-tax dollars as an encouragement for retirement saving.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 9
name: 403(b)
description: 403(b) is tax-deferred retirement savings plan for certain clerics, employees of public schools, and employees of other types of tax-exempt organizations. Often, employers contribute to the employee savings plan additional pre-tax dollars as an encouragement for retirement saving.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 108
name: SEP-IRA
description: A SEP-IRA is a pre-tax retirement savings plan where only the employer contributes. It is often used by small businesses as an alternative to 401(k) due to its relatively low operating cost. Employers are required to contribute the same percentage to all enrolled employees, with a maximum contribution of 25% of the employee’s compensation.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 109
name: SARSEP
description: A SARSEP is a pre-tax retirement savings plan used by small businesses as an alternative to 401(k) due to its relatively low operating cost. While new SARSEP plans are not available, there are still some companies that are grandfathered into the plan. Employers are required to contribute the same percentage to all enrolled employees, with a maximum contribution of 25% of the employee’s compensation.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: true
yearly_limit: true
category: Savings and Retirement
- benefit_type: 107
name: Group-Term Life Insurance
description: Group-Term Life Insurance is for coverage in excess of $50,000 per employee and is a taxable fringe benefit. Add this benefit only if you have employees with a coverage that is larger than $50,000. See IRS Publication 15-B to determine the dollar value of the excess coverage. Learn more about the taxability of this benefit on the IRS website
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 10
name: Commuter Benefits (pre-tax)
description: Tax-free commuter benefits allow employees to reduce their monthly commuting expenses for transit, carpooling, bicycling, and work-related parking costs. Please note that there is an annual maximum for this pre-tax benefit. The maximum dollar amount is found in IRS Publication 15-B
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Transportation
- benefit_type: 106
name: Personal Use of Company Car
description: Personal use of a company car is a non-cash, taxable fringe benefit. A portion of the car’s value is considered part of the employee’s total compensation for tax purposes, even though the employer owns or leases the car.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Transportation
- benefit_type: 111
name: 529 College Savings
description: 529 College Savings is an after-tax savings plan for employees designed to encourage saving for future college costs. This benefit should be reported as a taxable benefit and will therefore be taxed.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Other
- benefit_type: 998
name: Short Term Disability (post-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 1000
name: Short Term Disability (post-tax imputed)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 999
name: Long Term Disability (post-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 1001
name: Long Term Disability (post-tax imputed)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 996
name: Short Term Disability (pre-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 997
name: Long Term Disability (pre-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 991
name: Voluntary Short Term Disability (post-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 992
name: Voluntary Long Term Disability (post-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 993
name: Voluntary Life (post-tax)
description: Third Party Disability or Third Party Leave are policies offered by employers that pay an employee for a specific life event (maternity leave, injury). All payments made to employees come from a third-party, such as an insurer. For more information on the taxation of these plans, please refer to publication 15-A for more details.
pretax: false
posttax: true
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Health
- benefit_type: 113
name: Commuter Parking
description: Tax-free commuter benefits allow employees to reduce their monthly commuting expenses for transit, carpooling, bicycling, and work-related parking costs. Please note that there is an annual maximum for this pre-tax benefit. The maximum dollar amount is found in IRS Publication 15-B
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Transportation
- benefit_type: 114
name: Commuter Transit
description: Tax-free commuter benefits allow employees to reduce their monthly commuting expenses for transit, carpooling, bicycling, and work-related parking costs. Please note that there is an annual maximum for this pre-tax benefit. The maximum dollar amount is found in IRS Publication 15-B
pretax: true
posttax: false
imputed: false
healthcare: false
retirement: false
yearly_limit: false
category: Transportation
- benefit_type: 100
name: Other (taxable)
description: Employer-sponsored benefits like this are called fringe benefits, and they don’t get special tax treatment—they’ll be reported as taxable wages on your employees’ paystubs.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Other
- benefit_type: 201
name: Cell Phone (taxable)
description: Employer-sponsored benefits like this are called fringe benefits, and they don’t get special tax treatment—they’ll be reported as taxable wages on your employees’ paystubs.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Other
- benefit_type: 202
name: Gym & Fitness (taxable)
description: Employer-sponsored benefits like this are called fringe benefits, and they don’t get special tax treatment—they’ll be reported as taxable wages on your employees’ paystubs.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Other
- benefit_type: 203
name: Housing (taxable)
description: Employer-sponsored benefits like this are called fringe benefits, and they don’t get special tax treatment—they’ll be reported as taxable wages on your employees’ paystubs.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Other
- benefit_type: 204
name: Wellness (taxable)
description: Employer-sponsored benefits like this are called fringe benefits, and they don’t get special tax treatment—they’ll be reported as taxable wages on your employees’ paystubs.
pretax: false
posttax: true
imputed: true
healthcare: false
retirement: false
yearly_limit: false
category: Other
Contribution-Exclusion:
description: The representation of a contribution exclusion for a company benefit.
type: object
properties:
contribution_uuid:
type: string
description: The UUID of the contribution type.
example: '082dfd3e-5b55-11f0-bb42-ab7136ba04e2'
contribution_type:
type: string
description: The name of the contribution type.
example: Bonus
excluded:
type: boolean
description: Whether this contribution type is excluded from the benefit.
required:
- contribution_uuid
- contribution_type
- excluded
x-tags:
- Company Benefits
x-examples:
exclusion_bonus:
contribution_uuid: b82e35c5-d7c6-4705-9e16-9f87499ade18
contribution_type: Bonus
excluded: false
exclusion_cash_tips:
contribution_uuid: f5618c94-ed7d-4366-b2c4-ff05e430064f
contribution_type: Cash Tips
excluded: false
exclusion_commission:
contribution_uuid: 60191999-004a-49d9-b163-630574433653
contribution_type: Commission
excluded: false
exclusion_regular:
contribution_uuid: 75a7a827-1f2d-4d6f-94f2-514c1fc32b13
contribution_type: Regular
excluded: false
exclusion_imputed:
contribution_uuid: eead3c7c-7964-4e3c-b609-670456127b09
contribution_type: Life insurance imputed benefit
excluded: true
Company-Benefit-Create-Request:
description: ''
type: object
properties:
benefit_type:
type: integer
description: The ID of the benefit to which the company benefit belongs.
active:
type: boolean
default: true
description: Whether this benefit is active for employee participation.
description:
type: string
description: The description of the company benefit.For example, a company may offer multiple benefits with an ID of 1 (for Medical Insurance). The description would show something more specific like "Kaiser Permanente" or "Blue Cross/ Blue Shield".
responsible_for_employer_taxes:
type: boolean
description: Whether the employer is subject to pay employer taxes when an employee is on leave. Only applicable to third party sick pay benefits.
responsible_for_employee_w2:
type: boolean
description: Whether the employer is subject to file W-2 forms for an employee on leave. Only applicable to third party sick pay benefits.
catch_up_type:
description: The type of catch-up contribution for this benefit, as required by Section 603 of the SECURE 2.0 Act. Only applicable to pre-tax 401(k) and 403(b) benefits.
anyOf:
- type: string
enum:
- elective
- deemed
- type: 'null'
required:
- description
Company-Benefit-Update-Request:
description: ''
type: object
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field.
active:
type: boolean
description: Whether this benefit is active for employee participation. Company benefits may only be deactivated if no employees are actively participating.
description:
type: string
description: The description of the company benefit.For example, a company may offer multiple benefits with an ID of 1 (for Medical Insurance). The description would show something more specific like "Kaiser Permanente" or "Blue Cross/ Blue Shield".
responsible_for_employer_taxes:
type: boolean
description: Whether the employer is subject to pay employer taxes when an employee is on leave. Only applicable to short-term and long-term disability benefits (different from voluntary disability).
responsible_for_employee_w2:
type: boolean
description: Whether the employer is subject to file W-2 forms for an employee on leave. Only applicable to short-term and long-term disability benefits (different from voluntary disability).
catch_up_type:
description: The type of catch-up contribution for this benefit, as required by Section 603 of the SECURE 2.0 Act. Only applicable to pre-tax 401(k) and 403(b) benefits.
anyOf:
- type: string
enum:
- elective
- deemed
- type: 'null'
required:
- version
Contribution-Exclusion-Update-Request:
description: ''
type: object
properties:
contribution_exclusions:
type: array
description: The list of contribution exclusions to update
items:
"$ref": "#/components/schemas/Contribution-Exclusion"
required:
- contribution_exclusions
Employee-Benefit-Bulk-Update-Request:
description: ''
type: object
properties:
employee_benefits:
type: array
description: The list of employee benefits to create or update
items:
"$ref": "#/components/schemas/Employee-Benefit-For-Company-Benefit"
required:
- employee_benefits
Company-Benefit-With-Employee-Benefits:
description: The representation of a company benefit.
type: object
x-examples:
Example:
uuid: d2cec746-caee-464a-bcaf-00d93f7049c9
version: 98jr3289h3298hr9329gf9egskt3kagri32qqgiqe3872
active: true
description: Kaiser Permanente
source: external
partner_name: XYZ Corp
deletable: true
supports_percentage_amounts: true
responsible_for_employer_taxes: false
responsible_for_employee_w2: false
catch_up_type: elective
employee_benefits:
- employee_uuid: ae44a0b2-3c89-41e1-91c8-5f8224a779ca
company_benefit_uuid: d2cec746-caee-464a-bcaf-00d93f7049c9
active: true
deduct_as_percentage: false
employee_deduction: '3'
company_contribution: '0'
uuid: 9988f241-9aee-4383-bfca-eac79cf58135
contribution:
type: amount
value: '0'
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
company_uuid:
type: string
description: The UUID of the company.
readOnly: true
uuid:
type: string
description: The UUID of the company benefit.
readOnly: true
benefit_type:
type: integer
description: The type of the benefit to which the company benefit belongs (same as benefit_id).
readOnly: true
active:
type: boolean
default: true
description: Whether this benefit is active for employee participation. Company benefits may only be deactivated if no employees are actively participating.
description:
type: string
minLength: 1
description: The description of the company benefit. For example, a company may offer multiple benefits with an ID of 1 (for Medical Insurance). The description would show something more specific like “Kaiser Permanente” or “Blue Cross/ Blue Shield”.
source:
type: string
enum:
- internal
- external
- partnered
description: The source of the company benefit. This can be "internal", "external", or "partnered". Company benefits created via the API default to "external". Certain partners can create company benefits with a source of "partnered".
readOnly: true
partner_name:
type:
- string
- 'null'
description: The partner name of the partner that created the company benefit. For example, "XYZ Corp".
readOnly: true
deletable:
type: boolean
description: Whether this company benefit can be deleted. Deletable will be set to true if the benefit has not been used in payroll, has no employee benefits associated, and the benefit is not owned by Gusto or a Partner
supports_percentage_amounts:
type: boolean
description: Whether employee deductions and company contributions can be set as percentages of payroll for an individual employee. This is determined by the type of benefit and is not configurable by the company.
readOnly: true
responsible_for_employer_taxes:
type: boolean
description: Whether the employer is subject to pay employer taxes when an employee is on leave. Only applicable to third party sick pay benefits.
responsible_for_employee_w2:
type: boolean
description: Whether the employer is subject to file W-2 forms for an employee on leave. Only applicable to third party sick pay benefits.
catch_up_type:
description: The type of catch-up contribution for this benefit, as required by Section 603 of the SECURE 2.0 Act. Only applicable to pre-tax 401(k) and 403(b) benefits.
anyOf:
- type: string
enum:
- elective
- deemed
- type: 'null'
employee_benefits:
type: array
items:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee to which the benefit belongs.
company_benefit_uuid:
type: string
description: The UUID of the company benefit.
active:
type: boolean
default: true
description: Whether the employee benefit is active.
deduct_as_percentage:
type: boolean
default: false
description: Whether the employee deduction amount should be treated as a percentage to be deducted from each payroll.
employee_deduction:
type: string
default: '0.00'
description: The amount to be deducted, per pay period, from the employee's pay.
company_contribution:
type: string
description: The value of the company contribution
effective_date:
type: string
description: The date when the employee benefit becomes effective. If not provided, the benefit will be effective from 1970-01-01 (unix epoch).
expiration_date:
type: string
description: The date when the employee benefit expires. If not provided, the benefit will have no expiration date.
contribution:
type: object
description: An object representing the type and value of the company contribution.
properties:
type:
type: string
description: |-
The company contribution scheme.
"amount": The company contributes a fixed amount per payroll. If elective is true, the contribution is matching, dollar-for-dollar.
"percentage": The company contributes a percentage of the payroll amount per payroll period. If elective is true, the contribution is matching, dollar-for-dollar.
"tiered": The company contribution varies according to the size of the employee deduction.
value:
description: |-
For the `amount` and `percentage` contribution types, the value of the corresponding amount or percentage.
For the `tiered` contribution type, an array of tiers.
oneOf:
- type: string
- type: object
properties:
tiers:
type: array
description: ''
items:
type: object
description: A single tier of a tiered matching scheme.
properties:
rate:
type: string
description: The percentage of employee deduction within this tier the company contribution will match.
threshold:
type: string
description: |-
Specifies the upper limit (inclusive) percentage of the employee contribution that this tier applies to.
Use threshold to define each tier's end point, with tiers applied cumulatively from 0% upwards.
For example:
If the first tier has a threshold of "3", and `rate` of "100", the company will match 100% of employee contributions from 0% up to and including 3% of payroll.
If the next tier has a threshold of "5" and a rate of "50", the company will match 50% of contributions from above 3% up to and including 5% of payroll.
threshold_delta:
type: string
description: The step up difference between this tier's threshold and the previous tier's threshold. In the first tier, this is equivalent to threshold.
required:
- uuid
Company-Benefit:
description: The representation of a company benefit.
type: object
x-examples:
Example:
uuid: 54e37c27-43e6-4ae5-a5b2-e29895a133be
version: 98jr3289h3298hr9329gf9egskt3kagri32qqgiqe3872
benefit_type: 1
active: true
description: Kaiser Permanente
enrollment_count: 2
source: external
partner_name: XYZ Corp
deletable: true
supports_percentage_amounts: true
responsible_for_employer_taxes: false
responsible_for_employee_w2: false
catch_up_type: elective
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
enrollment_count:
type: integer
description: The number of employees enrolled in the benefit, only returned when enrollment_count query param is set to true.
readOnly: true
company_uuid:
type: string
description: The UUID of the company.
readOnly: true
uuid:
type: string
description: The UUID of the company benefit.
readOnly: true
benefit_type:
type: integer
description: The type of the benefit to which the company benefit belongs.
readOnly: true
active:
type: boolean
default: true
description: Whether this benefit is active for employee participation. Company benefits may only be deactivated if no employees are actively participating.
description:
type: string
minLength: 1
description: The description of the company benefit. For example, a company may offer multiple benefits with an ID of 1 (for Medical Insurance). The description would show something more specific like “Kaiser Permanente” or “Blue Cross/ Blue Shield”.
source:
type: string
enum:
- internal
- external
- partnered
description: The source of the company benefit. This can be "internal", "external", or "partnered". Company benefits created via the API default to "external". Certain partners can create company benefits with a source of "partnered".
readOnly: true
partner_name:
type:
- string
- 'null'
description: The partner name of the partner that created the company benefit. For example, "XYZ Corp".
readOnly: true
deletable:
type: boolean
description: Whether this company benefit can be deleted. Deletable will be set to true if the benefit has not been used in payroll, has no employee benefits associated, and the benefit is not owned by Gusto or a Partner
supports_percentage_amounts:
type: boolean
description: Whether employee deductions and company contributions can be set as percentages of payroll for an individual employee. This is determined by the type of benefit and is not configurable by the company.
readOnly: true
responsible_for_employer_taxes:
type: boolean
description: Whether the employer is subject to pay employer taxes when an employee is on leave. Only applicable to third party sick pay benefits.
responsible_for_employee_w2:
type: boolean
description: Whether the employer is subject to file W-2 forms for an employee on leave. Only applicable to third party sick pay benefits.
catch_up_type:
description: The type of catch-up contribution for this benefit, as required by Section 603 of the SECURE 2.0 Act. Only applicable to pre-tax 401(k) and 403(b) benefits.
anyOf:
- type: string
enum:
- elective
- deemed
- type: 'null'
required:
- uuid
Earning-Type:
description: The representation of an earning type in Gusto.
type: object
x-examples:
success:
name: Cash Tips
uuid: f5618c94-ed7d-4366-b2c4-ff05e430064f
active: true
custom_earning_type:
name: Gym Membership Stipend
uuid: 6b4a8efb-db90-4c13-a75f-aae11b3f4ff9
active: true
custom_bonus_category:
name: Gym Membership Stipend
uuid: 6b4a8efb-db90-4c13-a75f-aae11b3f4ff9
active: true
category: Other
included_in_overtime_pay: true
properties:
name:
type: string
description: The name of the earning type.
uuid:
type: string
description: The ID of the earning type.
readOnly: true
active:
type: boolean
description: Whether the earning type is active.
category:
type: string
description: |
The earning type category. Only present when the company has access to
categorized custom bonus earning types.
enum:
- CashTips
- Commission
- DiscretionaryBonus
- BenefitContributions
- MinimumWageAdjustment
- MinisterHousing
- NonDiscretionaryBonus
- OnCallPay
- OwnersDraw
- PaycheckTips
- CorrectionPayment
- ServiceCharges
- SeverancePay
- Other
- NonTaxableDisability
- OtherRegularIncome
- OtherNonTaxable
included_in_overtime_pay:
type: boolean
description: |
Whether earnings of this type are included when calculating an employee's
regular rate of pay for overtime purposes. Only settable when `category` is `Other`.
x-tags:
- Earning Types
required:
- uuid
Earning-Type-List:
type: object
description: Lists of default and custom earning types for a company.
x-examples:
success:
default:
- name: Bonus
uuid: b82e35c5-d7c6-4705-9e16-9f87499ade18
active: true
- name: Cash Tips
uuid: f5618c94-ed7d-4366-b2c4-ff05e430064f
active: true
- name: Commission
uuid: 60191999-004a-49d9-b163-630574433653
active: true
- name: Correction Payment
uuid: 368226e0-8e8c-48f0-bc91-aee46caafbc9
active: true
- name: Minimum Wage Adjustment
uuid: 88a2e519-9ff5-4c19-9071-6a709f3c2939
active: true
- name: Paycheck Tips
uuid: a3eaf03d-e712-4144-8f9b-71a85528adcf
active: true
- name: Severance
uuid: a6a2eba7-6c7d-4ced-bbe8-43452fbc9f63
active: true
custom:
- name: Gym Membership Stipend
uuid: 6b4a8efb-db90-4c13-a75f-aae11b3f4ff9
active: true
defaults_only:
default:
- name: Bonus
uuid: b82e35c5-d7c6-4705-9e16-9f87499ade18
active: true
- name: Cash Tips
uuid: f5618c94-ed7d-4366-b2c4-ff05e430064f
active: true
- name: Commission
uuid: 60191999-004a-49d9-b163-630574433653
active: true
- name: Correction Payment
uuid: 368226e0-8e8c-48f0-bc91-aee46caafbc9
active: true
- name: Minimum Wage Adjustment
uuid: 88a2e519-9ff5-4c19-9071-6a709f3c2939
active: true
- name: Paycheck Tips
uuid: a3eaf03d-e712-4144-8f9b-71a85528adcf
active: true
- name: Severance
uuid: a6a2eba7-6c7d-4ced-bbe8-43452fbc9f63
active: true
custom: []
properties:
default:
type: array
description: The default earning types for the company.
items:
"$ref": "#/components/schemas/Earning-Type"
custom:
type: array
description: The custom earning types for the company.
items:
"$ref": "#/components/schemas/Earning-Type"
Employee-Benefit-Base-Object:
description: ''
type: object
title: ''
additionalProperties: true
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
active:
type: boolean
default: true
description: Whether the employee benefit is active.
employee_deduction:
type: string
default: '0.00'
description: The amount to be deducted, per pay period, from the employee's pay.
deduct_as_percentage:
type: boolean
default: false
description: Whether the employee deduction amount should be treated as a percentage to be deducted from each payroll.
employee_deduction_annual_maximum:
type:
- string
- 'null'
description: The maximum employee deduction amount per year. A null value signifies no limit.
contribution:
type: object
description: An object representing the type and value of the company contribution.
properties:
type:
type: string
description: |-
The company contribution scheme.
"amount": The company contributes a fixed amount per payroll. If elective is true, the contribution is matching, dollar-for-dollar.
"percentage": The company contributes a percentage of the payroll amount per payroll period. If elective is true, the contribution is matching, dollar-for-dollar.
"tiered": The company contribution varies according to the size of the employee deduction.
value:
description: |-
For the `amount` and `percentage` contribution types, the value of the corresponding amount or percentage.
For the `tiered` contribution type, an array of tiers.
oneOf:
- type: string
- type: object
properties:
tiers:
type: array
description: ''
items:
type: object
description: A single tier of a tiered matching scheme.
properties:
rate:
type: string
description: The percentage of employee deduction within this tier the company contribution will match.
threshold:
type: string
description: |-
Specifies the upper limit (inclusive) percentage of the employee contribution that this tier applies to.
Use threshold to define each tier's end point, with tiers applied cumulatively from 0% upwards.
For example:
If the first tier has a threshold of "3", and `rate` of "100", the company will match 100% of employee contributions from 0% up to and including 3% of payroll.
If the next tier has a threshold of "5" and a rate of "50", the company will match 50% of contributions from above 3% up to and including 5% of payroll.
threshold_delta:
type: string
description: The step up difference between this tier's threshold and the previous tier's threshold. In the first tier, this is equivalent to threshold.
elective:
type: boolean
description: Whether the company contribution is elective (aka matching). For "tiered" contribution types, this is always true.
default: false
company_contribution_annual_maximum:
type:
- string
- 'null'
description: The maximum company contribution amount per year. A null value signifies no limit.
limit_option:
type:
- string
- 'null'
description: |-
Some benefits require additional information to determine their limit.
`Family` and `Individual` are applicable to HSA benefit.
`Joint Filing or Single` and `Married and Filing Separately` are applicable to Dependent Care FSA benefit.
catch_up:
type:
- boolean
- 'null'
default: false
description: Whether the employee should use a benefit's "catch up" rate. Only Roth 401k and 401k benefits use this value for employees over 50.
retirement_loan_identifier:
type:
- string
- 'null'
description: Identifier for a 401(k) loan assigned by the 401(k) provider
coverage_amount:
type:
- string
- 'null'
description: 'The amount that the employee is insured for. Note: company contribution cannot be present if coverage amount is set.'
deduction_reduces_taxable_income:
description: 'Whether the employee deduction reduces taxable income or not. Only valid for Group Term Life benefits. Note: when the value is not "unset", coverage amount and coverage salary multiplier are ignored.'
anyOf:
- type: string
enum:
- unset
- reduces_taxable_income
- does_not_reduce_taxable_income
- type: 'null'
default: unset
coverage_salary_multiplier:
type:
- string
- 'null'
default: '0.00'
description: 'The coverage amount as a multiple of the employee''s salary. Only applicable for Group Term Life benefits. Note: cannot be set if coverage amount is also set.'
company_contribution:
type: string
default: '0.00'
description: The amount to be paid, per pay period, by the company. This field will not appear for tiered contribution types.
deprecated: true
contribute_as_percentage:
type: boolean
default: false
description: Whether the company_contribution value should be treated as a percentage to be added to each payroll. This field will not appear for tiered contribution types.
deprecated: true
effective_date:
type: string
format: date
description: The date the employee benefit will start.
expiration_date:
type:
- string
- 'null'
format: date
description: The date the employee benefit will expire. A null value indicates the benefit will not expire.
Employee-Benefit-Create-Request:
description: ''
type: object
properties:
company_benefit_uuid:
type: string
description: The UUID of the company benefit.
active:
type: boolean
default: true
description: Whether the employee benefit is active.
employee_deduction:
type: string
default: '0.00'
description: The amount to be deducted, per pay period, from the employee's pay.
deduct_as_percentage:
type: boolean
default: false
description: Whether the employee deduction amount should be treated as a percentage to be deducted from each payroll.
employee_deduction_annual_maximum:
type:
- string
- 'null'
description: The maximum employee deduction amount per year. A null value signifies no limit.
contribution:
type: object
description: An object representing the company contribution type and value.
properties:
type:
type: string
enum:
- tiered
- percentage
- amount
description: |-
The company contribution scheme.
`amount`: The company contributes a fixed amount per payroll. If elective is true, the contribution is matching, dollar-for-dollar.
`percentage`: The company contributes a percentage of the payroll amount per payroll period. If elective is true, the contribution is matching, dollar-for-dollar.
`tiered`: The size of the company contribution corresponds to the size of the employee deduction relative to a tiered matching scheme.
value:
description: |-
For the `amount` and `percentage` contribution types, the value of the corresponding amount or percentage.
For the `tiered` contribution type, an array of tiers.
oneOf:
- type: string
description: For the `amount` and `percentage` contribution types, the value of the corresponding amount or percentage.
- type: array
description: For `tiered` contribution types, an array of tiers.
items:
type: object
description: A single tier of a tiered matching scheme.
properties:
rate:
type: string
description: The percentage of employee deduction within this tier the company contribution will match.
threshold:
type: string
description: |-
Specifies the upper limit (inclusive) percentage of the employee contribution that this tier applies to.
Use threshold to define each tier's end point, with tiers applied cumulatively from 0% upwards.
For example:
If the first tier has a threshold of "3", and rate of "100", the company will match 100% of employee contributions from 0% up to and including 3% of payroll.
If the next tier has a threshold of "5" and a rate of "50", the company will match 50% of contributions from above 3% up to and including 5% of payroll.
elective:
type: boolean
description: Whether the company contribution is elective (aka "matching"). For `tiered`, `elective_amount`, and `elective_percentage` contribution types this is ignored and assumed to be `true`.
default: false
company_contribution_annual_maximum:
type:
- string
- 'null'
description: The maximum company contribution amount per year. A null value signifies no limit.
limit_option:
description: |-
Some benefits require additional information to determine
their limit.
`Family` or `Individual`: Applicable to HSA benefit.
`Joint Filing or Single` or `Married and Filing Separately`: Applicable to Dependent Care FSA benefit.
anyOf:
- type: string
enum:
- Family
- Individual
- Joint Filing or Single
- Married and Filing Separately
- type: 'null'
catch_up:
type: boolean
default: false
description: Whether the employee should use a benefit's "catch up" rate. Only Roth 401k and 401k benefits use this value for employees over 50.
coverage_amount:
type:
- string
- 'null'
description: 'The amount that the employee is insured for. Note: company contribution cannot be present if coverage amount is set.'
coverage_salary_multiplier:
type: string
default: '0.00'
description: 'The coverage amount as a multiple of the employee''s salary. Only applicable for Group Term Life benefits. Note: cannot be set if coverage amount is also set.'
deduction_reduces_taxable_income:
description: 'Whether the employee deduction reduces taxable income or not. Only valid for Group Term Life benefits. Note: when the value is not "unset", coverage amount and coverage salary multiplier are ignored.'
anyOf:
- type: string
enum:
- unset
- reduces_taxable_income
- does_not_reduce_taxable_income
- type: 'null'
company_contribution:
type: string
default: '0.00'
description: The amount to be paid, per pay period, by the company.
deprecated: true
contribute_as_percentage:
type: boolean
default: false
description: Whether the company contribution amount should be treated as a percentage to be deducted from each payroll.
deprecated: true
effective_date:
type: string
format: date
default: '1970-01-01'
description: The date the employee benefit will start. If not provided, the benefit will be effective from 1970-01-01 (unix epoch).
expiration_date:
type:
- string
- 'null'
format: date
default:
description: The date the employee benefit will expire. A null value indicates the benefit will not expire.
required:
- company_benefit_uuid
x-examples:
Example:
company_benefit_uuid: f68abb42-431e-4392-bc3f-2795627e00f3
active: true
employee_deduction: '100.00'
contribution:
type: amount
value: '100.00'
Employee-Benefit-Update-Request:
description: ''
type: object
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field.
active:
type: boolean
description: Whether the employee benefit is active.
employee_deduction:
type: string
default: '0.00'
description: The amount to be deducted, per pay period, from the employee's pay.
deduct_as_percentage:
type: boolean
description: Whether the employee deduction amount should be treated as a percentage to be deducted from each payroll.
employee_deduction_annual_maximum:
type:
- string
- 'null'
description: The maximum employee deduction amount per year. A null value signifies no limit.
effective_date:
type: string
format: date
description: The date the employee benefit will start.
expiration_date:
type:
- string
- 'null'
format: date
description: The date the employee benefit will expire. A null value indicates the benefit will not expire.
contribution:
type: object
description: An object representing the type and value of the company contribution.
properties:
type:
type: string
enum:
- amount
- percentage
- tiered
description: |-
The company contribution scheme.
`amount`: The company contributes a fixed amount per payroll. If elective is true, the contribution is matching, dollar-for-dollar.
`percentage`: The company contributes a percentage of the payroll amount per payroll period. If elective is true, the contribution is matching, dollar-for-dollar.
`tiered`: The size of the company contribution corresponds to the size of the employee deduction relative to a tiered matching scheme.
value:
description: |-
For the `amount` and `percentage` contribution types, the value of the corresponding amount or percentage.
For the `tiered` contribution type, an array of tiers.
oneOf:
- type: string
description: For the `amount` and `percentage` contribution types, the value of the corresponding amount or percentage.
- type: array
description: For `tiered` contribution types, an array of tiers.
items:
type: object
description: A single tier of a tiered matching scheme.
properties:
rate:
type: string
description: The percentage of employee deduction within this tier the company contribution will match.
threshold:
type: string
description: |-
Specifies the upper limit (inclusive) percentage of the employee contribution that this tier applies to.
Use threshold to define each tier's end point, with tiers applied cumulatively from 0% upwards.
For example:
If the first tier has a threshold of "3", and rate of "100", the company will match 100% of employee contributions from 0% up to and including 3% of payroll.
If the next tier has a threshold of "5" and a rate of "50", the company will match 50% of contributions from above 3% up to and including 5% of payroll.
elective:
type: boolean
description: Whether the company contribution is elective (aka "matching"). For `tiered`, `elective_amount`, and `elective_percentage` contribution types this is ignored and assumed to be `true`.
default: false
company_contribution_annual_maximum:
type:
- string
- 'null'
description: The maximum company contribution amount per year. A null value signifies no limit.
limit_option:
description: |-
Some benefits require additional information to determine
their limit.
`Family` or `Individual`: Applicable to HSA benefit.
`Joint Filing or Single` or `Married and Filing Separately`: Applicable to Dependent Care FSA benefit.
anyOf:
- type: string
enum:
- Family
- Individual
- Joint Filing or Single
- Married and Filing Separately
- type: 'null'
catch_up:
type: boolean
default: false
description: Whether the employee should use a benefit's "catch up" rate. Only Roth 401k and 401k benefits use this value for employees over 50.
coverage_amount:
type:
- string
- 'null'
description: 'The amount that the employee is insured for. Note: company contribution cannot be present if coverage amount is set.'
deduction_reduces_taxable_income:
description: 'Whether the employee deduction reduces taxable income or not. Only valid for Group Term Life benefits. Note: when the value is not "unset", coverage amount and coverage salary multiplier are ignored.'
anyOf:
- type: string
enum:
- unset
- reduces_taxable_income
- does_not_reduce_taxable_income
- type: 'null'
default: unset
coverage_salary_multiplier:
type: string
default: '0.00'
description: 'The coverage amount as a multiple of the employee''s salary. Only applicable for Group Term Life benefits. Note: cannot be set if coverage amount is also set.'
company_contribution:
type: string
default: '0.00'
description: The amount to be paid, per pay period, by the company.
deprecated: true
contribute_as_percentage:
type: boolean
default: false
description: Whether the company contribution amount should be treated as a percentage to be deducted from each payroll.
deprecated: true
required:
- version
x-examples:
Example:
version: '09j3d29jqdpj92109j9j2d90dq'
employee_deduction: '250.00'
Employee-Benefit:
description: The representation of an employee benefit.
type: object
title: ''
x-examples:
Example:
version: '09j3d29jqdpj92109j9j2d90dq'
employee_uuid: 73274962-63ce-4e5c-b689-1df8d4df09f4
company_benefit_uuid: 54e37c27-43e6-4ae5-a5b2-e29895a133be
active: true
uuid: e91ca856-a915-4339-9b18-29f9cd66b031
employee_deduction: '100.00'
company_contribution: '100.00'
employee_deduction_annual_maximum: '200.00'
company_contribution_annual_maximum: '200.00'
limit_option:
retirement_loan_identifier:
deduct_as_percentage: false
contribute_as_percentage: false
catch_up: false
coverage_amount:
deduction_reduces_taxable_income:
coverage_salary_multiplier: '0.00'
contribution:
type: amount
value: '100.00'
elective: false
effective_date: '2025-01-01'
expiration_date:
Tiered Example:
version: '09j3d29jqdpj92109j9j2d90dq'
employee_uuid: 73274962-63ce-4e5c-b689-1df8d4df09f4
company_benefit_uuid: 54e37c27-43e6-4ae5-a5b2-e29895a133be
active: true
uuid: e91ca856-a915-4339-9b18-29f9cd66b031
employee_deduction: '100.00'
employee_deduction_annual_maximum: '200.00'
company_contribution_annual_maximum: '200.00'
limit_option:
deduct_as_percentage: false
catch_up: false
coverage_amount:
deduction_reduces_taxable_income:
coverage_salary_multiplier: '0.00'
elective: true
contribution:
type: tiered
value:
tiers:
- rate: '100.0'
threshold: '2.0'
threshold_delta: '2.0'
- rate: '50.0'
threshold: '5.0'
threshold_delta: '3.0'
effective_date: '2025-01-01'
expiration_date:
allOf:
- "$ref": "#/components/schemas/Employee-Benefit-Base-Object"
- type: object
additionalProperties: true
properties:
employee_uuid:
type: string
description: The UUID of the employee to which the benefit belongs.
readOnly: true
company_benefit_uuid:
type: string
description: The UUID of the company benefit.
readOnly: true
uuid:
type: string
description: The UUID of the employee benefit.
readOnly: true
required:
- uuid
Employee-Benefit-For-Company-Benefit:
description: The representation of an employee benefit for a company benefit.
type: object
title: ''
allOf:
- "$ref": "#/components/schemas/Employee-Benefit-Base-Object"
- type: object
additionalProperties: true
properties:
employee_uuid:
type: string
description: The UUID of the employee to which the benefit belongs.
company_benefit_uuid:
type: string
description: The UUID of the company benefit.
readOnly: true
uuid:
type: string
description: The UUID of the employee benefit. Required for updating an effective dated employee benefit.
action:
type: string
description: The action to perform on the employee benefit. Required for creating/updating an effective dated employee benefit.
enum:
- create
- update
required:
- employee_uuid
Employee-Pay-Stub:
description: The representation of an employee pay stub information.
type: object
properties:
uuid:
type: string
description: The UUID of the employee pay stub.
readOnly: true
check_date:
type: string
description: The check date of the pay stub.
readOnly: true
gross_pay:
type: string
description: The gross pay amount for the pay stub.
readOnly: true
net_pay:
type: string
description: The net pay amount for the pay stub.
readOnly: true
payroll_uuid:
type: string
description: A unique identifier of the payroll to which the pay stub belongs.
readOnly: true
check_amount:
type: string
description: The check amount for the pay stub.
readOnly: true
x-tags:
- Payrolls
required:
- uuid
Pay-Period:
description: The representation of a pay period.
type: object
properties:
start_date:
type: string
description: The start date, inclusive, of the pay period.
readOnly: true
end_date:
type: string
minLength: 1
description: The end date, inclusive, of the pay period.
pay_schedule_uuid:
type: string
description: A unique identifier of the pay schedule to which the pay period belongs.
readOnly: true
payroll:
type: object
description: Information about the payroll for the pay period.
properties:
payroll_uuid:
type: string
readOnly: true
description: The UUID of the payroll for this pay period.
check_date:
type: string
description: The date on which employees will be paid for the payroll if the payroll is submitted on time.
readOnly: true
processed:
type: boolean
readOnly: true
description: Whether or not the payroll has been successfully processed. Note that processed payrolls cannot be updated. Additionally, a payroll is not guaranteed to be processed just because the payroll deadline has passed. Late payrolls are not uncommon. Conversely, users may choose to run payroll before the payroll deadline.
payroll_deadline:
type: string
format: date-time
description: The date by which payroll should be run for employees to be paid on time. Payroll data, such as time and attendance data, should be submitted on or before this date.
readOnly: true
payroll_type:
type: string
description: Whether it is regular pay period or transition pay period.
enum:
- regular
- transition
readOnly: true
readOnly: true
x-examples:
typical_pay_period:
start_date: '2024-01-01'
end_date: '2024-01-15'
pay_schedule_uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
payroll:
payroll_uuid: 8c2e1ef2-7514-5b17-9879-d2ee8e35e38b
check_date: '2024-01-19'
processed: false
payroll_deadline: '2024-01-17T18:00:00Z'
payroll_type: regular
x-tags:
- Payrolls
People-Batch:
type: object
description: A batch for bulk people creation.
x-examples:
success_status:
uuid: 191e7162-3026-497e-aca2-f81b7e93204e
idempotency_key: 80a74f8b-2c16-45e5-9038-aa108849c6e6
status: pending
batch_action: create
properties:
uuid:
type: string
format: uuid
description: The unique identifier of the people batch.
readOnly: true
idempotency_key:
type: string
format: uuid
description: The idempotency key provided when creating the batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
- partial_success
description: The current status of the batch processing.
batch_action:
type: string
description: The action being performed on the batch.
required:
- uuid
- idempotency_key
- status
- batch_action
People-Batch-Results:
type: object
description: A people batch with processing results.
x-examples:
success_status:
uuid: f711ab7a-2d44-4556-b90c-9f883195f53a
idempotency_key: 95d84feb-3a17-4c0b-a00b-bf8d3dec3326
status: pending
submitted_at: '2026-03-02T15:09:50-08:00'
completed_at:
submitted_items:
processed_items: 0
excluded_items: 0
results: []
properties:
uuid:
type: string
format: uuid
description: The unique identifier of the people batch.
readOnly: true
idempotency_key:
type: string
format: uuid
description: The idempotency key provided when creating the batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
- partial_success
description: The current status of the batch processing.
submitted_at:
type: string
format: date-time
description: The timestamp when the batch was submitted.
completed_at:
type:
- string
- 'null'
format: date-time
description: The timestamp when the batch processing completed.
submitted_items:
type:
- integer
- 'null'
description: The number of items submitted in the batch.
processed_items:
type: integer
description: The number of items successfully processed.
excluded_items:
type: integer
description: The number of items excluded from processing.
results:
type: array
description: The results for each batch item.
items:
type: object
properties:
external_id:
type: string
description: The external ID provided in the batch request.
role:
type: string
enum:
- employee
description: The type of person created.
status:
type: string
enum:
- success
- partial_success
- failed
description: The status of this batch item.
idx:
type: integer
description: The index of this item in the original batch request.
uuid:
type: string
format: uuid
description: The UUID of the created person.
employee_uuid:
type: string
format: uuid
description: The UUID of the created employee (if role is employee).
errors:
type:
- array
- 'null'
description: Errors encountered while processing this batch item.
items:
type: object
properties:
error_key:
type: string
description: The key identifying the error source.
category:
type: string
description: The error category.
message:
type:
- string
- 'null'
description: Human-readable error message.
errors:
type:
- array
- 'null'
description: Nested errors for sub-operations.
items:
type: object
exclusions:
type:
- array
- 'null'
description: Items excluded from processing due to validation errors.
items:
type: object
properties:
external_id:
type: string
description: The external ID of the excluded item(s).
category:
type: string
description: The exclusion category.
message:
type: string
description: Human-readable explanation for exclusion.
item_count:
type: integer
description: Number of items affected by this exclusion.
required:
- uuid
- idempotency_key
- status
People-Batch-Conflict-Error:
type: object
description: Error response when a people batch idempotency key conflict occurs.
x-examples:
conflict:
errors:
- error_key: idempotency_key
category: invalid_attribute_value
message: Idempotency token already used
metadata:
entity_uuid: 14c53a55-0a80-4d46-a866-f5f64bc06486
entity_type: PeopleBatch
properties:
errors:
type: array
items:
type: object
properties:
error_key:
type: string
description: The key identifying the error source.
category:
type: string
description: The error category.
message:
type: string
description: Human-readable error message.
metadata:
type: object
properties:
entity_uuid:
type: string
format: uuid
description: The UUID of the existing entity.
entity_type:
type: string
description: The type of the existing entity.
Payroll-Batch:
type: object
description: A payroll cancellation batch request.
x-examples:
success_status:
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
idempotency_key: 80a74f8b-2c16-45e5-9038-aa108849c6e6
batch_action: cancel
status: pending
properties:
uuid:
type: string
format: uuid
description: The unique identifier of the payroll cancellation batch.
readOnly: true
idempotency_key:
type: string
format: uuid
description: The idempotency key provided when creating the batch.
batch_action:
type: string
enum:
- cancel
description: The action being performed on the batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: The lifecycle status of the batch request itself. Terminal values are `completed` (processing finished — inspect `results` and `exclusions` for per-payroll outcomes) and `failed` (the batch crashed at the system level; can be retried). This is distinct from the per-payroll `status` returned inside `results[]`. A `completed` batch does not imply every payroll was cancelled.
required:
- uuid
- idempotency_key
- batch_action
- status
Payroll-Batch-Results:
type: object
description: A payroll cancellation batch with per-payroll results.
x-examples:
success_status:
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
idempotency_key: 80a74f8b-2c16-45e5-9038-aa108849c6e6
status: completed
submitted_at: '2026-04-01T14:30:00Z'
completed_at: '2026-04-01T14:30:09Z'
submitted_items: 4
processed_items: 2
excluded_items: 2
results:
- idx: 0
uuid: 11111111-2222-3333-4444-555555555555
status: success
- idx: 1
uuid: 66666666-7777-8888-9999-000000000000
status: failed
errors:
- error_key: base
category: not_cancellable
message: Payroll cannot be canceled
exclusions:
- idx: 2
entity_type: payroll
uuid: 11111111-2222-3333-4444-555555555555
company_uuid: cccccccc-1111-2222-3333-444444444444
status: failed
category: duplicate_operation
message: Duplicate UUID. Only the first occurrence is processed.
- idx: 3
entity_type: payroll
uuid: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
company_uuid: dddddddd-1111-2222-3333-444444444444
status: failed
category: not_found
message: Payroll not found or not associated with this partner
properties:
uuid:
type: string
format: uuid
description: The unique identifier of the payroll cancellation batch.
readOnly: true
idempotency_key:
type: string
format: uuid
description: The idempotency key provided when creating the batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: The lifecycle status of the batch request itself. Terminal values are `completed` (processing finished — inspect `results` and `exclusions` for per-payroll outcomes) and `failed` (the batch crashed at the system level; can be retried). This is distinct from the per-payroll `status` returned inside `results[]`. A `completed` batch does not imply every payroll was cancelled.
submitted_at:
type: string
format: date-time
description: The timestamp when the batch was submitted.
completed_at:
type:
- string
- 'null'
format: date-time
description: The timestamp when the batch processing completed.
submitted_items:
type:
- integer
- 'null'
description: The number of payrolls submitted in the batch.
processed_items:
type: integer
description: The number of payrolls processed (cancelled or attempted). Only present once the batch reaches a terminal status.
excluded_items:
type: integer
description: The number of payrolls excluded from processing. Only present once the batch reaches a terminal status.
results:
type: array
description: Per-payroll cancellation results. Only present once the batch reaches a terminal status. One entry per authorized payroll.
items:
type: object
properties:
idx:
type: integer
description: The index of this payroll in the original POST batch array.
uuid:
type: string
format: uuid
description: The UUID of the payroll.
status:
type: string
enum:
- success
- failed
description: |
The outcome of cancelling this payroll. A cancel is atomic — there is no per-payroll `partial_success`.
- `success`: the payroll was cancelled, or required no action (already cancelled / never run)
- `failed`: the payroll could not be cancelled; see `errors`
errors:
type: array
description: Present only when `status` is `failed`. A cancel is a single atomic operation, so this is a flat array with exactly one error.
items:
type: object
properties:
error_key:
type: string
description: The key identifying the error source.
category:
type: string
enum:
- not_cancellable
- internal_error
description: |
Machine-readable reason the cancellation failed.
- `not_cancellable`: the payroll is past the point where it can be cancelled
- `internal_error`: an unexpected error occurred; the request can be retried
message:
type: string
description: Human-readable explanation of the failure.
exclusions:
type: array
description: Payrolls that could not be processed, determined at submission time. Only present once the batch reaches a terminal status. Every UUID submitted in the POST batch appears in exactly one of `results` or `exclusions`.
items:
type: object
properties:
idx:
type: integer
description: The index of this payroll in the original POST batch array.
entity_type:
type: string
enum:
- payroll
description: The type of entity this exclusion represents.
uuid:
type: string
format: uuid
description: The UUID of the excluded payroll.
company_uuid:
type: string
format: uuid
description: The UUID of the company asserted to own the payroll.
status:
type: string
enum:
- failed
description: Always `failed` for an excluded payroll.
category:
type: string
enum:
- not_found
- duplicate_operation
description: |
Machine-readable category for why the payroll was excluded.
- `not_found`: the payroll does not exist, or is not associated with a company the partner is mapped to
- `duplicate_operation`: the same payroll UUID appeared more than once in the request; only the first occurrence is processed
message:
type: string
description: Human-readable explanation for the exclusion.
required:
- uuid
- idempotency_key
- status
- submitted_at
Payroll-Batch-Conflict-Error:
type: object
description: Error response when a payroll cancellation idempotency key has already been used by the same partner.
x-examples:
conflict:
errors:
- error_key: idempotency_key
category: invalid_attribute_value
message: Idempotency key has already been used
metadata:
request_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
properties:
errors:
type: array
items:
type: object
properties:
error_key:
type: string
description: The key identifying the error source.
category:
type: string
description: The error category.
message:
type: string
description: Human-readable error message.
metadata:
type: object
properties:
request_uuid:
type: string
format: uuid
description: The UUID of the existing payroll cancellation batch that already used this idempotency key.
Payroll-Digest:
type: object
description: A payroll digest batch request.
x-examples:
success_status:
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
idempotency_key: 80a74f8b-2c16-45e5-9038-aa108849c6e6
batch_action: create
status: pending
properties:
uuid:
type: string
format: uuid
description: The unique identifier of the payroll digest batch.
readOnly: true
idempotency_key:
type: string
format: uuid
description: The idempotency key provided when creating the batch.
batch_action:
type: string
enum:
- create
description: The action being performed on the batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: The lifecycle status of the batch request itself. Terminal values are `completed` (processing finished — inspect `results` and `exclusions` for per-company outcomes) and `failed` (request failed; can be retried). This is distinct from the per-company `status` returned inside `results[]` and `exclusions[]`.
required:
- uuid
- idempotency_key
- batch_action
- status
Payroll-Digest-Results:
type: object
description: A payroll digest batch with processing results.
x-examples:
success_status:
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
idempotency_key: 80a74f8b-2c16-45e5-9038-aa108849c6e6
status: completed
submitted_at: '2026-04-01T14:30:00Z'
completed_at: '2026-04-01T14:30:12Z'
submitted_items: 4
processed_items: 2
excluded_items: 2
results:
- idx: 0
entity_type: company
uuid: c1111111-1111-1111-1111-111111111111
name: Acme Corporation
status: success
blockers:
- type: missing_bank_account
description: Company bank account not set up
payrolls:
- payroll_uuid:
payroll_type: regular
display_title: Run biweekly payroll
auto_payroll: false
status: ready_to_start
pay_period:
start_date: '2026-03-16'
end_date: '2026-03-29'
check_date: '2026-04-03'
run_payroll_by: '2026-03-31'
pay_schedule:
uuid: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
frequency: Every other week
custom_name: Custom - every 1st and 15th
totals:
- payroll_uuid: 11111111-2222-3333-4444-555555555555
payroll_type: regular
display_title: Run biweekly payroll
auto_payroll: true
status: submitted
pay_period:
start_date: '2026-03-02'
end_date: '2026-03-15'
check_date: '2026-03-20'
run_payroll_by: '2026-03-17'
pay_schedule:
uuid: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
frequency: Every other week
custom_name: Custom - every 1st and 15th
totals:
total_debit_amount: '15234.56'
net_pay: '11456.78'
total_employer_cost: '16890.12'
- idx: 3
entity_type: company
uuid: c2222222-2222-2222-2222-222222222222
name: Widget Inc
status: success
payrolls: []
exclusions:
- idx: 1
entity_type: company
uuid: c3333333-3333-3333-3333-333333333333
status: failed
category: not_found
message: Company not found.
- idx: 2
entity_type: company
uuid: c4444444-4444-4444-4444-444444444444
status: failed
category: company_inactive
message: Company is inactive or not fully onboarded.
properties:
uuid:
type: string
format: uuid
description: The unique identifier of the payroll digest batch.
readOnly: true
idempotency_key:
type: string
format: uuid
description: The idempotency key provided when creating the batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: The lifecycle status of the batch request itself. Terminal values are `completed` (processing finished — inspect `results` and `exclusions` for per-company outcomes) and `failed` (request failed; can be retried). This is distinct from the per-company `status` returned inside `results[]` and `exclusions[]`.
submitted_at:
type: string
format: date-time
description: The timestamp when the batch was submitted.
completed_at:
type:
- string
- 'null'
format: date-time
description: The timestamp when the batch processing completed.
submitted_items:
type:
- integer
- 'null'
description: The number of companies submitted in the batch.
processed_items:
type: integer
description: The number of companies successfully processed. Only present once the batch reaches a terminal status.
excluded_items:
type: integer
description: The number of companies excluded from processing. Only present once the batch reaches a terminal status.
results:
type: array
description: Per-company results. Only present once the batch reaches a terminal status. Includes successfully processed companies (with their `payrolls` array, which may be empty when the company has no payrolls in the date window).
items:
type: object
properties:
idx:
type: integer
description: The index of this company in the original POST batch array.
entity_type:
type: string
enum:
- company
description: The type of entity this result represents.
uuid:
type: string
format: uuid
description: The UUID of the company.
name:
type: string
description: The legal/display name of the company.
status:
type: string
enum:
- success
- partial_success
- failed
description: The status of this company's digest computation.
blockers:
type: array
description: Reasons the company cannot currently run payroll. Applies to every payroll in this company's `payrolls` array — blockers are evaluated at the company level, not per payroll. Empty when there are no blockers.
items:
type: object
properties:
type:
type: string
description: A machine-readable blocker key (e.g. `missing_bank_account`).
description:
type: string
description: Human-readable description of the blocker.
payrolls:
type: array
description: Payrolls for this company within the digest date window (7 days past, 30–60 days future). May be empty.
items:
type: object
properties:
payroll_uuid:
type:
- string
- 'null'
format: uuid
description: UUID of the payroll. `null` for upcoming pay periods that have not been started yet (the `payrolls` API has not yet created a payroll record). Once a payroll is created, subsequent digest requests will include the real `payroll_uuid`.
payroll_type:
type: string
description: The type of payroll (e.g. `regular`, `new_hire`, `termination`, `transition`, `bonus`, `correction`).
display_title:
type: string
description: Partner-facing display title for this payroll (e.g. "Run biweekly payroll").
auto_payroll:
type: boolean
description: Whether the company has auto-payroll enabled for this pay schedule.
status:
type: string
description: The lifecycle status of the payroll (e.g. `ready_to_start`, `in_progress`, `submitted`, `completed`, `failed`).
pay_period:
type: object
properties:
start_date:
type:
- string
- 'null'
format: date
description: First day of the pay period.
end_date:
type:
- string
- 'null'
format: date
description: Last day of the pay period.
check_date:
type:
- string
- 'null'
format: date
description: The date employees get paid.
run_payroll_by:
type:
- string
- 'null'
format: date
description: The deadline to run payroll for this pay period.
pay_schedule:
type:
- object
- 'null'
properties:
uuid:
type: string
format: uuid
description: UUID of the pay schedule.
frequency:
type: string
description: Human-friendly pay frequency (e.g. "Every other week").
custom_name:
type:
- string
- 'null'
description: Custom name for the pay schedule, when set.
totals:
type:
- object
- 'null'
description: Pay totals. `null` when the payroll has not been calculated, or when the calculation is stale (the partner edited hours/earnings after the last calculation).
properties:
total_debit_amount:
type: string
description: Total amount debited from the company bank account (string-formatted decimal).
net_pay:
type: string
description: Total net pay across all employees on this payroll (string-formatted decimal).
total_employer_cost:
type: string
description: Total employer cost including taxes and benefits (string-formatted decimal).
exclusions:
type: array
description: Companies that could not be processed. Only present once the batch reaches a terminal status. Every UUID submitted in the POST batch appears in exactly one of `results` or `exclusions`.
items:
type: object
properties:
idx:
type: integer
description: The index of this company in the original POST batch array.
entity_type:
type: string
enum:
- company
description: The type of entity this exclusion represents.
uuid:
type: string
format: uuid
description: The UUID of the excluded company.
status:
type: string
enum:
- failed
description: The status of this company's digest computation.
category:
type: string
enum:
- not_found
- company_inactive
- duplicate
- internal_error
description: Machine-readable category for why the company was excluded.
message:
type: string
description: Human-readable explanation for the exclusion.
required:
- uuid
- idempotency_key
- status
- submitted_at
Payroll-Digest-Conflict-Error:
type: object
description: Error response when a payroll digest idempotency key has already been used by the same partner.
x-examples:
conflict:
errors:
- error_key: idempotency_key
category: invalid_attribute_value
message: Idempotency key has already been used
metadata:
request_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
properties:
errors:
type: array
items:
type: object
properties:
error_key:
type: string
description: The key identifying the error source.
category:
type: string
description: The error category.
message:
type: string
description: Human-readable error message.
metadata:
type: object
properties:
request_uuid:
type: string
format: uuid
description: The UUID of the existing payroll digest batch that already used this idempotency key.
Reversal-Payroll-Uuids-Type:
type: array
description: Array of reversal payroll UUIDs, if applicable.
uniqueItems: true
items:
type: string
description: The UUID of the reversal payroll.
nullable: false
readOnly: true
Payroll-Minimal:
description: ''
type: object
x-tags:
- Payrolls
properties:
payroll_deadline:
"$ref": "#/components/schemas/Payroll-Deadline-Type"
check_date:
"$ref": "#/components/schemas/Payroll-Check-Date-Type"
processed:
"$ref": "#/components/schemas/Payroll-Processed-Type"
processed_date:
"$ref": "#/components/schemas/Payroll-Processed-Date-Type"
calculated_at:
"$ref": "#/components/schemas/Payroll-Calculated-At-Type"
uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
payroll_uuid:
"$ref": "#/components/schemas/Payroll-Payroll-Uuid-Type"
company_uuid:
"$ref": "#/components/schemas/Payroll-Company-Uuid-Type"
off_cycle:
"$ref": "#/components/schemas/Payroll-Off-Cycle-Type"
off_cycle_reason:
"$ref": "#/components/schemas/Off-Cycle-Reason-Type"
auto_pilot:
"$ref": "#/components/schemas/Auto-Pilot-Type"
external:
"$ref": "#/components/schemas/Payroll-External-Type"
final_termination_payroll:
"$ref": "#/components/schemas/Payroll-Final-Termination-Payroll-Type"
withholding_pay_period:
"$ref": "#/components/schemas/Payroll-Withholding-Pay-Period-Type"
skip_regular_deductions:
"$ref": "#/components/schemas/Payroll-Skip-Regular-Deductions-Type"
fixed_withholding_rate:
"$ref": "#/components/schemas/Payroll-Fixed-Withholding-Rate-Type"
pay_period:
"$ref": "#/components/schemas/Payroll-Pay-Period-Type"
payroll_status_meta:
"$ref": "#/components/schemas/Payroll-Payroll-Status-Meta-Type"
totals:
"$ref": "#/components/schemas/Payroll-Totals-Type"
payment_speed_changed:
"$ref": "#/components/schemas/Payroll-Payment-Speed-Changed-Type"
created_at:
"$ref": "#/components/schemas/Created-At-Type"
submission_blockers:
"$ref": "#/components/schemas/Payroll-Submission-Blockers-Type"
credit_blockers:
"$ref": "#/components/schemas/Payroll-Credit-Blockers-Type"
reversal_payroll_uuids:
"$ref": "#/components/schemas/Reversal-Payroll-Uuids-Type"
required:
- company_uuid
- uuid
- payroll_uuid
- processed
Payroll-Blocker:
type: object
required:
- key
- message
properties:
key:
type: string
description: A unique identifier for the payroll blocker reason. For a complete list of blockers and their meanings, see the [Payroll Blockers guide](https://docs.gusto.com/embedded-payroll/docs/payroll-blockers).
enum:
- company_ownership_required
- contractor_only_company
- eftps_in_error
- geocode_error
- geocode_needed
- invalid_signatory
- missing_addresses
- missing_bank_info
- missing_bank_verification
- missing_employee_setup
- missing_federal_tax_setup
- missing_forms
- missing_industry_selection
- missing_pay_schedule
- missing_signatory
- missing_state_tax_setup
- needs_approval
- needs_onboarding
- pay_schedule_setup_not_complete
- pending_information_request
- pending_payroll_review
- pending_recovery_case
- soft_suspended
- suspended
example: needs_approval
message:
type: string
description: A human-readable message describing the payroll blocker and what action is needed to resolve it.
example: Company needs to be approved to run payroll.
x-examples:
blockers_list:
key: needs_approval
message: Company needs to be approved to run payroll.
empty_blockers_list: []
Printable-Payroll-Checks-Body:
description: Request body for generating printable payroll checks.
type: object
required:
- printing_format
properties:
printing_format:
type: string
enum:
- top
- bottom
description: The type of check stock being printed. Check the "Types of check stock" section in this [link](https://support.gusto.com/article/999877761000000/Pay-your-team-by-check) for more info on check types
starting_check_number:
type: integer
description: The starting check number we will start generating checks from. Use to override the sequence that will be used to generate check numbers.
x-tags:
- Payrolls
Payroll-Check:
type: object
properties:
payroll_uuid:
type: string
description: A unique identifier of the payroll.
printing_format:
type: string
description: The format the checks will be printed.
starting_check_number:
type:
- integer
- 'null'
description: The starting check number for the checks being printed.
request_uuid:
type: string
description: A unique identifier of the Generated Document request
status:
type: string
description: Current status of the Generated Document
employee_check_number_mapping:
type: array
description: An array of mapping employee uuids to their check numbers
items:
type: object
properties:
employee_uuid:
type: string
description: The UUID for an employee
check_number:
type: number
description: The check number for the relevant employee
x-examples:
example:
payroll_uuid: a83d0bd8-7d20-43b9-834c-6d514ef6cb20
printing_format: top
starting_check_number: 10
request_uuid: p83d0ca8-7d41-42a9-834y-7d218ef6cb20
status: pending
employee_check_number_mapping:
- employee_uuid: f83d0bd8-7e20-43b9-834c-6d514ef6cb47
check_number: 10
Generated-Document:
type: object
properties:
request_uuid:
type: string
description: A unique identifier of the Generated Document request
status:
type: string
description: Current status of the Generated Document
enum:
- pending
- started
- succeeded
- failed
document_urls:
type: array
description: The array of urls to access the documents.
items:
type: string
x-examples:
Example:
status: succeeded
document_urls:
- https://document.url.com
request_uuid: p83d0ca8-7d41-42a9-834y-7d218ef6cb20
pending:
status: pending
document_urls: []
request_uuid: p83d0ca8-7d41-42a9-834y-7d218ef6cb20
Report:
type: object
properties:
request_uuid:
type: string
description: A unique identifier of the report request
status:
type: string
description: Current status of the report, possible values are 'succeeded', 'pending', or 'failed'
report_urls:
type: array
description: The array of urls to access the report
items:
type: string
x-examples:
example:
status: succeeded
report_urls:
- https://report.url.com
request_uuid: p83d0ca8-7d41-42a9-834y-7d218ef6cb20
Create-Report:
type: object
properties:
request_uuid:
type: string
description: A unique identifier of the report request
company_uuid:
type: string
description: Company UUID
custom_name:
type:
- string
- 'null'
description: Title of the report
file_type:
type: string
description: File type
x-examples:
example:
request_uuid: p83d0ca8-7d41-42a9-834y-7d218ef6cb20
company_uuid: w83d0ca8-7d41-42a9-834y-7d218ef6cb20
custom_name: Custom Report
file_type: csv
Report-Template:
type: object
properties:
columns:
type: array
description: List of columns recommended
items:
type: string
groupings:
type: array
description: List of groupings recommended
items:
type: string
company_uuid:
type: string
description: Company UUID
report_type:
type: string
description: Type of report template
x-examples:
example:
columns:
- regular_rate
- regular_hours
- regular_earnings
groupings:
- payroll
- employee
company_uuid: p83d0ca8-7d41-42a9-834y-7d218ef6cb20
report_type: payroll_journal
Create-Report-Body:
description: Request body for creating a custom report.
type: object
required:
- columns
- file_type
properties:
columns:
type: array
description: Columns to include in the report
items:
type: string
enum:
- additional_earnings
- bank_account_account_number
- bank_account_routing_number
- bank_account_type
- bank_account
- bonus
- cash_tips
- check_amount
- check_date
- commission
- date_of_birth
- double_overtime_earnings
- double_overtime_hours
- double_overtime_rate
- employee_additional_taxes
- employee_benefit_contributions
- employee_compensation_time_period
- employee_compensation
- employee_deductions
- employee_department
- employee_email
- employee_donations
- employee_federal_income_tax
- employee_first_name
- employee_last_name
- employee_middle_initial
- employee_medicare_additional_tax
- employee_medicare_tax
- employee_phone_number
- employee_social_security_tax
- employee_state_income_tax
- employee_taxes
- employee_uuid
- employee_work_email
- employer_additional_taxes
- employer_benefit_contributions
- employer_cost
- employer_futa_tax
- employer_medicare_tax
- employer_social_security_tax
- employer_suta_tax
- employer_taxes
- employment_type
- employment
- end_date
- garnishments
- gross_earnings
- holiday_earnings
- holiday_hours
- home_address_city
- home_address_state
- home_address_street
- home_address_zip
- home_address
- job_title
- net_pay
- one_time_reimbursements
- overtime_earnings
- overtime_hours
- overtime_rate
- paid_time_off_earnings
- paid_time_off_hours
- paid_time_off_rate
- pay_period_end
- pay_period_start
- paycheck_tips
- payment_method
- payroll_type
- payroll_uuid
- preferred_first_name
- recurring_reimbursements
- regular_earnings
- regular_hours
- regular_rate
- reimbursements
- risk_class_code
- sick_rate
- sick_time_off_earnings
- sick_time_off_hours
- start_date
- total_employer_benefit_contributions
- total_time_off_earnings
- total_time_off_hours
- work_address_city
- work_address_street
- work_address_zip
groupings:
type: array
description: Optional. How to group the report. If omitted, sensible defaults are derived from the `columns` requested.
items:
type: string
enum:
- payroll
- employee
- work_address
- work_address_state
custom_name:
type: string
description: The title of the report
file_type:
type: string
description: The type of file to generate
enum:
- csv
- json
- pdf
with_totals:
type: boolean
description: Whether to include subtotals and grand totals in the report
default: false
date_filter_type:
type: string
description: Which payroll date `start_date` and `end_date` filter against.
default: period_end_date
enum:
- period_end_date
- period_start_date
- check_date
start_date:
type: string
format: date
description: Start date of data to filter by
example: '2024-01-01'
end_date:
type: string
format: date
description: End date of data to filter by
example: '2024-04-01'
dismissed_start_date:
type: string
format: date
description: Dismissed start date of employees to filter by
example: '2024-01-01'
dismissed_end_date:
type: string
format: date
description: Dismissed end date of employees to filter by
example: '2024-04-01'
payment_method:
type: string
description: Payment method to filter by
enum:
- check
- direct_deposit
employment_type:
type: string
description: Employee employment type to filter by
enum:
- exempt
- salaried_nonexempt
- nonexempt
- commission_only_exempt
- commission_only_nonexempt
employment_status:
type: string
description: Employee employment status to filter by
enum:
- active_full_time
- active_part_time
- active_part_time_eligible
- active_variable
- active_seasonal
- active
- dismissed
employee_uuids:
type:
- array
- 'null'
description: Employees to filter by
items:
type: string
department_uuids:
type: array
description: Departments to filter by
items:
type: string
work_address_uuids:
type: array
description: Work addresses to filter by
items:
type: string
x-tags:
- Reports
General-Ledger-Report-Body:
description: Request body for generating a general ledger report. The report can be aggregated by different dimensions such as job or department.
type: object
required:
- aggregation
properties:
aggregation:
type: string
enum:
- default
- job
- department
- integration
description: The breakdown of the report. Use 'default' for no split.
integration_type:
description: The kind of integration set up for the company. Required when `aggregation` is 'integration'. Must be null if `aggregation` is not 'integration'.
anyOf:
- type: string
enum:
- xero
- qbo
- type: 'null'
x-tags:
- Reports
General-Ledger-Report:
type: object
description: A request for a general ledger report. The report is generated asynchronously and the URL is available via the report GET endpoint using the returned `request_uuid`.
properties:
payroll_uuid:
type: string
format: uuid
description: The UUID of the payroll record for which the report was generated.
aggregation:
type: string
enum:
- default
- job
- department
- integration
description: The breakdown level used for the report.
integration_type:
type:
- string
- 'null'
description: The `integration_type` used for the report when `aggregation` is 'integration' (e.g., `xero`, `qbo`). Otherwise, this will be null or an empty string.
request_uuid:
type: string
format: uuid
description: UUID to use for polling the report status.
x-examples:
example:
payroll_uuid: a83d0bd8-7d20-43b9-834c-6d514ef6cb20
aggregation: integration
integration_type: xero
request_uuid: 550e8400-e29b-41d4-a716-446655440000
Payroll-Reversal:
type: object
properties:
reversed_payroll_uuid:
type: string
description: The UUID for the payroll run being reversed.
reversal_payroll_uuid:
type:
- string
- 'null'
description: The UUID of the payroll where the reversal was applied.
reason:
type: string
description: A reason provided by the admin who created the reversal.
approved_at:
type:
- string
- 'null'
description: Timestamp of when the reversal was approved.
category:
type:
- string
- 'null'
description: Category chosen by the admin who requested the reversal.
reversed_employee_uuids:
type: array
description: Array of affected employee UUIDs.
items:
type: string
x-examples:
Example:
reversed_payroll_uuid: '09505984-8d8c-41a3-adbe-5740322ae8e9'
reversal_payroll_uuid: '0424688e-0a2e-4cd0-ac86-42283e788fb3'
reason: Customer Request
approved_at:
category: convert_check_ee_requested
reversed_employee_uuids:
- 5f036964-185e-4c85-bbf2-3873e1203b30
Payroll-Reversal-List:
type: array
items:
"$ref": "#/components/schemas/Payroll-Reversal"
x-examples:
Example:
- reversed_payroll_uuid: '09505984-8d8c-41a3-adbe-5740322ae8e9'
reversal_payroll_uuid: '0424688e-0a2e-4cd0-ac86-42283e788fb3'
reason: Customer Request
approved_at:
category: convert_check_ee_requested
reversed_employee_uuids:
- 5f036964-185e-4c85-bbf2-3873e1203b30
Gross-Up-Pay:
type: object
properties:
gross_up:
type: string
format: float
description: Gross up earnings.
Contractor-Payment-Receipt:
type: object
x-examples:
example:
contractor_payment_uuid: afccb970-357e-4013-81f5-85dafc74f9b6
company_uuid: c827aa0d-3928-4d5a-ab1f-400641a7d2b8
name_of_sender: Torp and Sons and Sons
name_of_recipient: Patricia Hamill
debit_date: '2022-06-02'
totals:
company_debit: '748.34'
contractor_payments:
- contractor_uuid: f83d0bd8-7e20-43b9-834c-6d514ef6cb47
contractor_first_name: Patricia
contractor_last_name: Hamill
contractor_business_name: ''
contractor_type: Individual
payment_method: Direct Deposit
wage: '448.34'
bonus: '248.00'
reimbursement: '100.00'
licensee:
name: Gusto, Zenpayroll Inc.
address: 525 20th St
city: San Francisco
state: CA
postal_code: '94107'
phone_number: '4157778888'
license: Your payroll provider partners with Gusto Inc. for payments processing. Gusto Inc. is a licensed money transmitter. Learn more on our license page.
license_uri: https://gusto.com/about/licenses
right_to_refund: https://gusto.com/about/licenses
liability_of_licensee: https://gusto.com/about/licenses
properties:
contractor_payment_uuid:
type: string
description: A unique identifier of the contractor payment receipt.
company_uuid:
type: string
description: A unique identifier of the company making the contractor payment.
name_of_sender:
type: string
description: The name of the company making the contractor payment.
name_of_recipient:
type: string
description: The individual or company name of the contractor receiving payment.
debit_date:
type: string
description: The debit date for the contractor payment.
format: date
example: '2022-05-30'
license:
type: string
description: Always the fixed string "Your payroll provider partners with Gusto Inc. for payments processing. Gusto Inc. is a licensed money transmitter. Learn more on our license page."
license_uri:
type: string
description: URL for the license information for the licensed payroll processor. Always the fixed string "https://gusto.com/about/licenses"
right_to_refund:
type: string
description: URL for information related to right to refund. Always the fixed string "https://gusto.com/about/licenses"
liability_of_licensee:
type: string
description: URL for information related to right to liability of licensee. Always the fixed string "https://gusto.com/about/licenses"
totals:
type: object
description: The subtotals for the contractor payment.
properties:
company_debit:
type: string
description: The total company debit for the contractor payment.
contractor_payments:
type: array
description: An array of contractor payments for this contractor payment.
items:
type: object
properties:
contractor_uuid:
type: string
description: The UUID of the contractor.
contractor_first_name:
type: string
description: The first name of the contractor. Applies when `contractor_type` is `Individual`.
contractor_last_name:
type: string
description: The last name of the contractor. Applies when `contractor_type` is `Individual`.
contractor_business_name:
type: string
description: The business name of the contractor. Applies when `contractor_type` is `Business`.
contractor_type:
type: string
description: |-
The type of contractor.
`Individual` `Business`
payment_method:
type: string
description: The payment method.
enum:
- Direct Deposit
- Check
- Historical Payment
- Correction Payment
wage:
type: string
description: The fixed wage of the payment, regardless of hours worked.
bonus:
type: string
description: The bonus amount in the payment.
reimbursement:
type: string
description: The reimbursement amount in the payment.
licensee:
type: object
description: The licensed payroll processor
properties:
name:
type: string
description: Always the fixed string "Gusto, Zenpayroll Inc."
address:
type: string
description: Always the fixed string "525 20th St"
city:
type: string
description: Always the fixed string "San Francisco"
state:
type: string
description: Always the fixed string "CA"
postal_code:
type: string
description: Always the fixed string "94107"
phone_number:
type: string
description: Always the fixed string "4157778888"
Company-Custom-Field:
type: object
description: A custom field on a company
x-tags:
- Custom Fields
properties:
uuid:
type: string
description: UUID of the company custom field
name:
type: string
description: Name of the company custom field
type:
"$ref": "#/components/schemas/Custom-Field-Type"
description:
type:
- string
- 'null'
description: Description of the company custom field
selection_options:
type:
- array
- 'null'
description: An array of options for fields of type radio. Otherwise, null.
items:
type: string
required:
- uuid
- name
- type
Company-Custom-Field-List:
type: object
x-examples:
success_status:
custom_fields:
- uuid: ea7e5d57-6abb-47d7-b654-347c142886c0
name: employee_level
description: Employee Level
type: text
selection_options:
- uuid: 024ec137-6c92-43a3-b061-14a9720531d6
name: favorite fruit
description: Which is your favorite fruit?
type: radio
selection_options:
- apple
- banana
- orange
properties:
custom_fields:
type: array
items:
"$ref": "#/components/schemas/Company-Custom-Field"
Rehire:
type: object
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field.
effective_date:
type: string
description: The day when the employee returns to work.
file_new_hire_report:
type: boolean
description: The boolean flag indicating whether Gusto will file a new hire report for the employee.
work_location_uuid:
type: string
description: The uuid of the employee's work location.
employment_status:
type: string
description: The employee's employment status. Supplying an invalid option will set the employment_status to *not_set*.
enum:
- part_time
- full_time
- part_time_eligible
- variable
- seasonal
- not_set
two_percent_shareholder:
type: boolean
description: Whether the employee is a two percent shareholder of the company. This field only applies to companies with an S-Corp entity type.
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
active:
type: boolean
description: Whether the employee's rehire has gone into effect.
readOnly: true
x-examples:
example:
version: 2e930d43acbdb241f8f14a2d531fa417
employee_uuid: 8c290660-b6c9-4ad7-9f6e-ea146aaf79e8
active: false
effective_date: '2024-06-30'
employment_status: seasonal
file_new_hire_report: false
work_location_uuid: 8cb87e2e-5b30-4c13-a4f4-bfffcbed1188
two_percent_shareholder: false
active_rehire:
version: 7c930f42bcadb241f8f14a2d531fb528
employee_uuid: 9d3b1770-c7d0-5be8-a07f-fb257bbg80f9
active: true
effective_date: '2024-01-15'
employment_status: full_time
file_new_hire_report: true
work_location_uuid: 9dc98f3f-6c41-5d24-a5b5-c363687ebf29
two_percent_shareholder: false
created:
version: 3a841e52dcbea351f9f25b3e642gb639
employee_uuid: 8c290660-b6c9-4ad7-9f6e-ea146aaf79e8
active: false
effective_date: '2023-06-30'
employment_status: full_time
file_new_hire_report: true
work_location_uuid: b6ae9d93-d4b8-4119-8c96-dba595dd8c30
two_percent_shareholder: false
Rehire-Update-Request-Body:
description: Request body for updating an employee rehire.
type: object
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Rehire-Body"
x-examples:
update_rehire:
version: 1928d0c378e519e9c03fb959bc959a6b
effective_date: '2023-06-30'
work_location_uuid: b6ae9d93-d4b8-4119-8c96-dba595dd8c30
file_new_hire_report: true
Salary-Estimate:
type: object
description: A salary estimate calculation for an S-Corp owner based on occupation, experience level, location, and business revenue.
properties:
uuid:
type: string
description: The UUID of the salary estimate.
readOnly: true
employee_uuid:
type:
- string
- 'null'
description: The UUID of the employee this salary estimate is for.
readOnly: true
employee_job_uuid:
type:
- string
- 'null'
description: The UUID of the employee job this salary estimate is associated with (once accepted).
readOnly: true
annual_net_revenue:
type:
- string
- 'null'
description: The annual net revenue of the business used for salary calculations.
zip_code:
type:
- string
- 'null'
description: The ZIP code used for location-based salary calculations.
pattern: "^\\d{5}$"
result:
type:
- integer
- 'null'
description: The calculated reasonable salary estimate in cents. Null if not yet calculated.
readOnly: true
accepted_at:
type:
- string
- 'null'
format: date-time
description: The timestamp when this salary estimate was accepted and finalized.
readOnly: true
created_at:
type: string
format: date-time
description: The timestamp when this salary estimate was created.
readOnly: true
updated_at:
type: string
format: date-time
description: The timestamp when this salary estimate was last updated.
readOnly: true
occupations:
type: array
description: Array of occupations with their experience levels and time allocations.
items:
type: object
properties:
code:
type: string
description: Bureau of Labor Statistics (BLS) occupation code.
name:
type: string
description: Occupation name.
description:
type: string
description: Occupation description.
experience_level:
type: string
description: Experience level for this occupation.
enum:
- novice
- intermediate
- average
- skilled
- expert
time_percentage:
type: string
description: Percentage of time spent in this occupation (as decimal string, 0-1).
primary:
type: boolean
description: Whether this is the primary occupation.
required:
- code
- experience_level
- time_percentage
required:
- uuid
- employee_uuid
- annual_net_revenue
- zip_code
- created_at
- updated_at
- occupations
x-examples:
success_status:
uuid: 7f5d3d93-6d6f-48c0-9f4e-cd12c2d3e4b2
employee_uuid: 8c290660-b6c9-4ad7-9f6e-ea146aaf79e8
employee_job_uuid:
annual_net_revenue: '500000'
zip_code: '94107'
result: 12000000
accepted_at:
created_at: '2025-01-15T10:30:00.000-08:00'
updated_at: '2025-01-15T10:30:00.000-08:00'
occupations:
- code: 15-1252
name: Software Developers, Systems Software
description: Research, design, develop, and test operating systems-level software.
experience_level: skilled
time_percentage: '1.0'
primary: true
BLS-Occupation:
type: object
description: A Bureau of Labor Statistics occupation code with its title and description, used for salary estimate calculations.
properties:
code:
type: string
description: Bureau of Labor Statistics (BLS) occupation code.
example: 15-1252
title:
type: string
description: Occupation title.
example: Software Developers
description:
type: string
description: Occupation description.
example: Research, design, and develop computer and network software or specialized utility programs.
required:
- code
- title
x-examples:
success_status:
code: 15-1252
title: Software Developers
description: Research, design, and develop computer and network software or specialized utility programs.
Signatory:
description: The representation of a company's signatory
type: object
title: Signatory
x-tags:
- Signatories
properties:
uuid:
type: string
first_name:
type:
- string
- 'null'
last_name:
type:
- string
- 'null'
title:
type:
- string
- 'null'
phone:
type:
- string
- 'null'
email:
type: string
birthday:
type:
- string
- 'null'
is_admin:
type: boolean
description: Whether or not the signatory is also the payroll admin of the company.
has_ssn:
type: boolean
description: Indicates whether the signatory has an SSN in Gusto.
version:
type: string
description: The current version of the signatory. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
identity_verification_status:
anyOf:
- type: string
enum:
- Pass
- Fail
- Skipped
- type: 'null'
description: |-
| | |
|---|---|
|__Status__| __Description__ |
| Pass | Signatory can sign all forms |
| Fail | Signatory cannot sign forms |
| Skipped | Signatory cannot sign Form 8655 until the form is manually uploaded as wet-signed |
| null | Identity verification process has not been completed |
home_address:
type:
- object
- 'null'
properties:
street_1:
type: string
street_2:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
default: USA
required:
- uuid
x-examples:
typical_signatory:
uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
first_name: Bob
last_name: Jones
title: CEO
phone: '4156051234'
email: bob@example.com
birthday: '1980-08-04'
is_admin: true
has_ssn: true
version: e1bdd845a493c74908f8e15d6114169b
identity_verification_status: Skipped
home_address:
signatory_with_address:
uuid: 8c2e1ef2-7514-5b17-9879-d2ee8e35e38b
first_name: Rachel
last_name: Greene
title: Onboarding specialist
phone: '4155551234'
email: rachel@example.com
birthday:
is_admin: false
has_ssn: false
version: def456
identity_verification_status:
home_address:
street_1: 525 20th Street
street_2: Apt. 1
city: San Francisco
state: CA
zip: '94107'
country: USA
Signatory-Invite-Request:
type: object
description: Request body for inviting a signatory.
properties:
first_name:
type: string
description: The signatory's first name.
middle_initial:
type: string
last_name:
type: string
description: The signatory's last name.
title:
type: string
description: The signatory's title (e.g. CEO, President).
phone:
type: string
description: The signatory's phone number.
birthday:
type: string
format: date
description: The signatory's date of birth.
email:
type: string
format: email
description: The signatory's email address.
ssn:
type: string
description: The signatory's SSN. Required for create with complete information; not used for invite.
home_address:
type: object
description: The signatory's home address.
properties:
street_1:
type: string
street_2:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
default: USA
required:
- first_name
- last_name
- email
x-tags:
- Signatories
Signatory-Create-Request:
type: object
description: Request body for creating a signatory with complete information. All listed required fields must be provided.
properties:
first_name:
type: string
description: The signatory's first name.
middle_initial:
type: string
last_name:
type: string
description: The signatory's last name.
title:
type: string
description: The signatory's title (e.g. CEO, President).
phone:
type: string
description: The signatory's phone number.
birthday:
type: string
format: date
description: The signatory's date of birth.
email:
type: string
format: email
description: The signatory's email address.
ssn:
type: string
description: The signatory's SSN.
home_address:
type: object
description: The signatory's home address.
properties:
street_1:
type: string
street_2:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
default: USA
required:
- street_1
- city
- state
- zip
required:
- first_name
- last_name
- email
- title
- phone
- birthday
- ssn
- home_address
x-tags:
- Signatories
Signatory-Update-Request:
type: object
description: Request body for updating a signatory. Email cannot be updated.
properties:
version:
type: string
description: Current version of the signatory (required for optimistic concurrency).
first_name:
type: string
middle_initial:
type: string
last_name:
type: string
title:
type: string
phone:
type: string
birthday:
type: string
format: date
ssn:
type: string
description: The signatory's SSN.
home_address:
type: object
properties:
street_1:
type: string
street_2:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
required:
- version
x-tags:
- Signatories
Flow:
description: The representation of a flow in Gusto white-label UI.
type: object
x-examples:
success_status:
url: https://flows.gusto-demo.com/flows/lO2BHHAMCScPVV9G5WEURW0Im_nP9mGYloQgjUWbenQ
title: Flow
x-tags:
- Flows
properties:
url:
type: string
Create-Flow-Request:
description: Request body for creating a flow.
type: object
required:
- flow_type
properties:
flow_type:
type: string
description: The type of flow to generate. Multiple flow types can be combined by separating them with commas (e.g., "add_addresses,add_employees,sign_all_forms").
example: company_onboarding
entity_uuid:
type: string
description: UUID of the target entity applicable to the flow. This field is optional for company flows.
entity_type:
type: string
description: The type of target entity applicable to the flow. This field is optional for company flows.
enum:
- Company
- Employee
- Contractor
- Payroll
options:
type: object
description: Optional configuration object that varies based on the flow_type. This can contain arbitrary key-value pairs specific to the flow being generated.
additionalProperties: true
x-examples:
example:
flow_type: company_onboarding
with_entity:
flow_type: employee_form_signing
entity_uuid: 1b71bb5b-4811-46e9-8a8a-cf5521cbeda6
entity_type: Employee
with_options:
flow_type: company_retirement_benefits
options:
provider: guideline
Unprocessed-Termination-Pay-Period:
description: The representation of an unprocessed termination pay period.
type: object
properties:
start_date:
type: string
description: The start date of the pay period.
readOnly: true
end_date:
type: string
description: The end date of the pay period.
check_date:
type: string
description: The check date of the pay period.
readOnly: true
debit_date:
type: string
description: The debit date of the pay period.
employee_name:
type: string
description: The full name of the employee.
employee_uuid:
type: string
description: A unique identifier of the employee.
pay_schedule_uuid:
type: string
description: A unique identifier of the pay schedule to which the pay period belongs.
x-examples:
typical_unprocessed_termination_pay_period:
start_date: '2023-01-11'
end_date: '2023-01-24'
check_date: '2023-01-28'
debit_date: '2023-01-26'
employee_name: Mary Warner
employee_uuid: '094f6ded-a790-4651-87e6-4a7f15dec7c6'
pay_schedule_uuid: 00ebc4a4-ec88-4435-8f45-c505bb63e501
x-tags:
- Employee Employments
Pay-Schedule-Assignment:
description: The representation of a pay schedule assignment.
type: object
x-examples:
example:
type: by_employee
employees:
- employee_uuid: f0238368-f2cf-43e2-9a07-b0265f2cec69
pay_schedule_uuid: c277ac52-9871-4a96-a1e6-0c449684602a
properties:
type:
anyOf:
- type: string
enum:
- single
- hourly_salaried
- by_employee
- by_department
- type: 'null'
description: The pay schedule assignment type.
readOnly: true
hourly_pay_schedule_uuid:
type:
- string
- 'null'
description: Pay schedule for hourly employees.
readOnly: true
salaried_pay_schedule_uuid:
type:
- string
- 'null'
description: Pay schedule for salaried employees.
readOnly: true
default_pay_schedule_uuid:
type:
- string
- 'null'
description: Default pay schedule for employees.
readOnly: true
employees:
type:
- array
- 'null'
description: List of employees and their pay schedules.
readOnly: true
items:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Employee"
departments:
type:
- array
- 'null'
description: List of departments and their pay schedules.
readOnly: true
items:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Department"
x-tags:
- Pay Schedules
Pay-Schedule-Assignment-Employee:
type: object
x-examples:
example-1:
employee_uuid: 43b39ada-dc49-4879-9594-fe95f67ae434
pay_schedule_uuid: 3f029a58-155d-4c30-8361-cc266b2c1f11
properties:
employee_uuid:
type: string
description: The UUID of the employee.
pay_schedule_uuid:
type:
- string
- 'null'
description: The employee's pay schedule UUID.
x-tags:
- Pay Schedules
Pay-Schedule-Assignment-Department:
type: object
x-examples:
example-1:
department_uuid: 43b39ada-dc49-4879-9594-fe95f67ae434
pay_schedule_uuid: 3f029a58-155d-4c30-8361-cc266b2c1f11
properties:
department_uuid:
type: string
description: The UUID of the department.
pay_schedule_uuid:
type: string
description: The department's pay schedule UUID.
x-tags:
- Pay Schedules
Pay-Schedule-Assignment-Preview:
description: The representation of a pay schedule assignment preview.
type: object
x-examples:
example:
type: hourly_salaried
employee_changes:
- employee_uuid: 43b39ada-dc49-4879-9594-fe95f67ae434
first_name: Penny
last_name: Parker
pay_frequency: Twice per month — Salaried pay schedule
first_pay_period:
pay_schedule_uuid: 3f029a58-155d-4c30-8361-cc266b2c1f11
start_date: '2023-07-01'
end_date: '2023-08-01'
check_date: '2023-08-02'
transition_pay_period:
start_date: '2023-06-20'
end_date: '2023-06-30'
properties:
type:
anyOf:
- type: string
enum:
- single
- hourly_salaried
- by_employee
- by_department
- type: 'null'
description: The pay schedule assignment type.
readOnly: true
employee_changes:
type: array
description: A list of pay schedule changes including pay period and transition pay period.
items:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Employee-Change"
x-tags:
- Pay Schedules
Pay-Schedule-Assignment-Employee-Change:
type: object
x-examples:
example-1:
employee_uuid: 43b39ada-dc49-4879-9594-fe95f67ae434
first_name: Penny
last_name: Parker
pay_frequency: Twice per month — Salaried pay schedule
first_pay_period:
pay_schedule_uuid: 3f029a58-155d-4c30-8361-cc266b2c1f11
start_date: '2023-07-01'
end_date: '2023-08-01'
check_date: '2023-08-02'
transition_pay_period:
start_date: '2023-06-20'
end_date: '2023-06-30'
properties:
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
first_name:
type: string
description: The employee's first name.
readOnly: true
last_name:
type: string
description: The employee's last name.
readOnly: true
pay_frequency:
type: string
description: New pay schedule frequency and name.
readOnly: true
first_pay_period:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Pay-Period"
transition_pay_period:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Transition-Pay-Period"
x-tags:
- Pay Schedules
Pay-Schedule-Assignment-Pay-Period:
description: Pay schedule assignment first pay period information.
type: object
x-examples:
example-1:
pay_schedule_uuid: 3f029a58-155d-4c30-8361-cc266b2c1f11
start_date: '2023-07-01'
end_date: '2023-08-01'
check_date: '2023-08-02'
properties:
pay_schedule_uuid:
type: string
description: The pay schedule UUID.
start_date:
type: string
description: Pay period start date.
end_date:
type: string
description: Pay period end date.
check_date:
type: string
description: Pay period check date.
x-tags:
- Pay Schedules
Pay-Schedule-Assignment-Transition-Pay-Period:
description: Pay schedule assignment transition pay period information.
type: object
x-examples:
example-1:
start_date: '2023-07-01'
end_date: '2023-08-01'
properties:
start_date:
type: string
description: Pay period start date.
end_date:
type: string
description: Pay period end date.
x-tags:
- Pay Schedules
Accruing-Time-Off-Hour:
description: The representation of an unprocessed termination pay period.
type: object
properties:
time_off_policy_uuid:
type: string
description: A unique identifier of the time off policy.
hours:
type: string
description: Hours accrued during this pay period.
Employee-Federal-Tax-Pre2020:
title: Employee-Federal-Tax-Pre2020
type: object
description: Federal tax information for employees using the pre-2020 W4 form.
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
employee_uuid:
type: string
description: The UUID of the employee.
employee_id:
type: integer
description: The internal ID of the employee.
company_id:
type: integer
description: The internal ID of the company.
w4_data_type:
type: string
description: The version of w4 form.
enum:
- pre_2020_w4
filing_status:
type:
- string
- 'null'
description: |-
It determines which tax return form an individual will use and is an important factor in computing taxable income. One of:
- Single
- Married
- Head of Household
- Exempt from withholding
- Married, but withhold as Single
federal_withholding_allowance:
type:
- number
- 'null'
description: An exemption from paying a certain amount of income tax. May be null when filing_status is "Exempt from withholding".
additional_withholding:
type: string
description: An additional withholding dollar amount.
required:
- version
- w4_data_type
- additional_withholding
x-tags:
- Employee Tax Setup
Employee-Federal-Tax-Rev2020:
title: Employee-Federal-Tax-Rev2020
type: object
description: Federal tax information for employees using the revised 2020 W4 form.
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
employee_uuid:
type: string
description: The UUID of the employee.
employee_id:
type: integer
description: The internal ID of the employee.
company_id:
type: integer
description: The internal ID of the company.
w4_data_type:
type: string
description: The version of w4 form.
enum:
- rev_2020_w4
filing_status:
type:
- string
- 'null'
description: |-
It determines which tax return form an individual will use and is an important factor in computing taxable income. One of:
- Single
- Married
- Head of Household
- Exempt from withholding
extra_withholding:
type:
- string
- 'null'
description: An employee can request an additional amount to be withheld from each paycheck.
two_jobs:
type:
- boolean
- 'null'
description: If there are only two jobs (i.e., you and your spouse each have a job, or you have two), you can set it to true.
dependents_amount:
type:
- string
- 'null'
description: A dependent is a person other than the taxpayer or spouse who entitles the taxpayer to claim a dependency exemption.
other_income:
type:
- string
- 'null'
description: Other income amount.
deductions:
type:
- string
- 'null'
description: Deductions other than the standard deduction to reduce withholding.
required:
- version
- w4_data_type
- filing_status
- extra_withholding
- two_jobs
- dependents_amount
- other_income
- deductions
x-tags:
- Employee Tax Setup
Employee-Federal-Tax:
title: Employee-Federal-Tax
type: object
description: Federal tax information for an employee. The response structure varies based on the w4_data_type field.
oneOf:
- "$ref": "#/components/schemas/Employee-Federal-Tax-Pre2020"
- "$ref": "#/components/schemas/Employee-Federal-Tax-Rev2020"
discriminator:
propertyName: w4_data_type
mapping:
pre_2020_w4: "#/components/schemas/Employee-Federal-Tax-Pre2020"
rev_2020_w4: "#/components/schemas/Employee-Federal-Tax-Rev2020"
x-examples:
rev_2020_w4:
version: 56a489ce86ed6c1b0f0cecc4050a0b01
filing_status: Single
two_jobs: false
dependents_amount: '1000.0'
other_income: '10.0'
deductions: '11.0'
extra_withholding: '9.0'
w4_data_type: rev_2020_w4
employee_uuid: 7d70e6b0-9889-4060-9eef-aafabc14e2f2
employee_id: 1
company_id: 1
rev_2020_w4_married_two_jobs:
version: 63859768485e218ccf8a449bb60f14ed
w4_data_type: rev_2020_w4
filing_status: Married
two_jobs: true
dependents_amount: '2000.0'
other_income: '20.0'
deductions: '11.0'
extra_withholding: '9.0'
employee_uuid: 8d70e6b0-9889-4060-9eef-aafabc14e2f2
employee_id: 2
company_id: 1
x-tags:
- Employee Tax Setup
Employee-State-Tax:
title: Employee-State-Tax
type: object
x-examples:
example-1:
uuid: 287d2c61-1d18-4126-8a4a-9cb29bbb6dac
employee_uuid: 2005e601-3c78-410a-9d40-b960ae130383
state: CA
questions:
- label: Filing Status
description: 'The Head of Household status applies to unmarried individuals who have a relative living with them in their home. If unsure, read the CA Filing Status explanation.
'
key: filing_status
input_question_format:
type: Select
options:
- value: S
label: Single
- value: M
label: Married one income
- value: MD
label: Married dual income
- value: H
label: Head of household
- value: E
label: Do Not Withhold
answers:
- value: S
valid_from: '2010-01-01'
valid_up_to:
- label: Withholding Allowance
description: 'This value is needed to calculate the employee''s CA income tax withholding. If unsure, use the CA DE-4 form to calculate the value manually.
'
key: withholding_allowance
input_question_format:
type: Number
answers:
- value: 1
valid_from: '2010-01-01'
valid_up_to:
- label: Additional Withholding
description: You can withhold an additional amount of California income taxes here.
key: additional_withholding
input_question_format:
type: Currency
answers:
- value: '0.0'
valid_from: '2010-01-01'
valid_up_to:
- label: File a New Hire Report?
description: State law requires you to file a new hire report within 20 days of hiring or re-hiring an employee.
key: file_new_hire_report
input_question_format:
type: Select
options:
- value: true
label: Yes, file the state new hire report for me.
- value: false
label: No, I have already filed.
answers:
- value: true
valid_from: '2010-01-01'
valid_up_to:
x-tags:
- Employee Tax Setup
properties:
uuid:
type: string
description: The uuid of the employee state field.
employee_uuid:
type: string
description: The employee's uuid
state:
type: string
description: Two letter US state abbreviation
file_new_hire_report:
type:
- boolean
- 'null'
is_work_state:
type: boolean
questions:
type: array
items:
"$ref": "#/components/schemas/Employee-State-Tax-Question"
required:
- uuid
- employee_uuid
- state
- questions
Federal-Tax-Details:
title: Federal-Tax-Details
type: object
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
tax_payer_type:
anyOf:
- type: string
enum:
- C-Corporation
- S-Corporation
- Sole proprietor
- LLC
- LLP
- Limited partnership
- Co-ownership
- Association
- Trusteeship
- General partnership
- Joint venture
- Non-Profit
- type: 'null'
description: |-
What type of tax entity the company is. One of:
- C-Corporation
- S-Corporation
- Sole proprietor
- LLC
- LLP
- Limited partnership
- Co-ownership
- Association
- Trusteeship
- General partnership
- Joint venture
- Non-Profit
taxable_as_scorp:
type: boolean
description: |-
Whether the company is taxed as an S-Corporation. Tax payer types that may be taxed as an S-Corporation include:
- S-Corporation
- C-Corporation
- LLC
filing_form:
type: string
enum:
- '941'
- '944'
description: |-
The form used by the company for federal tax filing. One of:
- 941 (Quarterly federal tax return form)
- 944 (Annual federal tax return form)
has_ein:
type: boolean
description: Whether company's Employer Identification Number (EIN) is present
ein_verified:
type: boolean
description: Whether the EIN has been successfully verified as a valid EIN with the IRS.
ein_verification:
type: object
nullable: false
description: Information about the status of verifying the company's Employer Identification Number (EIN)
properties:
status:
type: string
nullable: false
enum:
- pending
- verified
- failed
description: |-
The status of EIN verification:
- `pending`: The EIN verification process has not completed (or the company does not yet have an EIN).
- `verified`: The EIN has been successfully verified as a valid EIN with the IRS.
- `failed`: The company's EIN did not pass verification. Common issues are being entered incorrectly or not matching the company's legal name.
legal_name:
type: string
description: The legal name of the company
effective_date:
type: string
description: The date that these details took effect.
deposit_schedule:
type: string
description: |-
How often the company sends money to the IRS. One of:
- Semiweekly
- Monthly
x-examples:
Success:
version: 68934a3e9455fa72420237eb
tax_payer_type: S-Corporation
taxable_as_scorp: true
filing_form: '941'
has_ein: true
ein_verified: true
ein_verification:
status: verified
legal_name: Acme Corp
effective_date: '2024-01-01'
deposit_schedule: Semiweekly
x-tags:
- Federal Tax Details
Federal-Tax-Details-Update:
title: Federal-Tax-Details-Update
type: object
required:
- version
properties:
version:
type: string
example: 6cb95e00540706ca48d4577b3c839fbe
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
legal_name:
type: string
example: Acme Corp.
description: The legal name of the company
ein:
type: string
example: '123456789'
description: The company's Employer Identification Number (EIN). Must be 9 digits. Dashes are optional (e.g., '12-3456789' or '123456789').
tax_payer_type:
type: string
example: LLP
enum:
- C-Corporation
- S-Corporation
- Sole proprietor
- LLC
- LLP
- Limited partnership
- Co-ownership
- Association
- Trusteeship
- General partnership
- Joint venture
- Non-Profit
description: |-
What type of tax entity the company is. One of:
- C-Corporation
- S-Corporation
- Sole proprietor
- LLC
- LLP
- Limited partnership
- Co-ownership
- Association
- Trusteeship
- General partnership
- Joint venture
- Non-Profit
filing_form:
type: string
example: '944'
enum:
- '941'
- '944'
description: |-
The form used by the company for federal tax filing. One of:
- 941 (Quarterly federal tax return form)
- 944 (Annual federal tax return form)
taxable_as_scorp:
type: boolean
example: false
description: Whether the company is taxed as an S-Corporation
x-tags:
- Federal Tax Details
Employee-Bank-Account:
title: Employee-Bank-Account
type: object
x-examples:
Example:
uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
employee_uuid: 9fcf1b1d-8886-4691-9283-383d3bdd4fd9
name: BoA Checking Account
routing_number: '266905059'
hidden_account_number: XXXX1207
account_type: Checking
properties:
uuid:
type: string
description: UUID of the bank account
employee_uuid:
type: string
description: UUID of the employee
account_type:
type: string
enum:
- Checking
- Savings
description: Bank account type
name:
type: string
description: Name for the bank account
routing_number:
type: string
description: The bank account's routing number
hidden_account_number:
type: string
description: Masked bank account number
x-tags:
- Employee Payment Method
required:
- uuid
Contractor-Bank-Account:
title: Contractor-Bank-Account
type: object
x-examples:
example:
uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
contractor_uuid: 9fcf1b1d-8886-4691-9283-383d3bdd4fd9
name: BoA Checking Account
routing_number: '266905059'
hidden_account_number: XXXX1207
account_type: Checking
x-tags:
- Contractor Payment Method
properties:
uuid:
type: string
description: UUID of the bank account
contractor_uuid:
type: string
description: UUID of the contractor
account_type:
type: string
enum:
- Checking
- Savings
description: Bank account type
name:
type: string
description: Name for the bank account
routing_number:
type: string
description: The bank account's routing number
hidden_account_number:
type: string
description: Masked bank account number
required:
- uuid
- contractor_uuid
- name
- routing_number
- hidden_account_number
- account_type
Contractor-Bank-Account-List:
title: Contractor-Bank-Account-List
type: array
items:
"$ref": "#/components/schemas/Contractor-Bank-Account"
x-examples:
example:
- uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
contractor_uuid: 9fcf1b1d-8886-4691-9283-383d3bdd4fd9
name: BoA Checking Account
routing_number: '266905059'
hidden_account_number: XXXX1207
account_type: Checking
Contractor-Bank-Account-Create-Request-Body:
title: Contractor-Bank-Account-Create-Request-Body
type: object
required:
- name
- routing_number
- account_number
- account_type
properties:
name:
type: string
description: Name for the bank account
routing_number:
type: string
description: The bank account's routing number
account_number:
type: string
description: The bank account's account number
account_type:
type: string
enum:
- Checking
- Savings
description: Bank account type
x-examples:
example:
name: BoA Checking Account
routing_number: '266905059'
account_number: '5809431207'
account_type: Checking
DetailedPaymentAccountSplit:
title: DetailedPaymentAccountSplit
type: object
description: Details of a single payment split for a payment method.
properties:
bank_account_uuid:
type: string
description: The UUID of the bank account.
readOnly: true
hidden_account_number:
type: string
description: The masked account number.
readOnly: true
name:
type: string
description: The name of the bank account.
readOnly: true
priority:
type: integer
description: The priority of the payment split.
readOnly: true
split_amount:
type:
- integer
- 'null'
description: If `split_by` is 'Amount', this is in cents (e.g., 500 for $5.00) and exactly one account must have a `split_amount` of `null` to capture the remainder. If `split_by` is 'Percentage', this is the percentage value (e.g., 60 for 60%).
readOnly: true
encrypted_account_number:
type:
- string
- 'null'
description: Ciphertext containing the full bank account number, which must be decrypted using a key provided by Gusto. Only visible with the appropriate `read:account_number` scope (e.g., `employee_payment_methods:read:account_number`).
readOnly: true
x-examples:
AmountSplitExample:
value:
bank_account_uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
hidden_account_number: XXXX1207
encrypted_account_number: mbNLVOm7psP16ocqXso5ZtzOXBrA-5Q-.zarrdLBmyYDDK4kCkF2reKtzx8udK8iDabtW
name: Primary Checking
priority: 1
split_amount: 50000
PercentageSplitExample:
value:
bank_account_uuid: e88f9436-b74e-49a8-87e9-777b9bfe715e
hidden_account_number: XXXX5678
encrypted_account_number: mbNLVOm7psP16ocqXso5ZtzOXBrA-5Q-.zarrdLBmyYDDK4kCkF2reKtzx8udK8iDabtW
name: Savings Account
priority: 1
split_amount: 100
EmployeePaymentDetail:
title: EmployeePaymentDetail
type: object
description: Represents an employee's payment method details.
properties:
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
payment_method:
type: string
description: The type of payment method.
enum:
- Direct Deposit
- Check
readOnly: true
split_by:
anyOf:
- type: string
enum:
- Percentage
- Amount
- type: 'null'
description: How the payment is split. This field is applicable when `payment_method` is "Direct Deposit".
readOnly: true
splits:
type:
- array
- 'null'
description: An array of payment splits. This field is applicable when `payment_method` is "Direct Deposit".
items:
"$ref": "#/components/schemas/DetailedPaymentAccountSplit"
readOnly: true
x-examples:
DirectDepositExample:
value:
employee_uuid: e2c4c0ce-2986-48b9-86cf-ec27f6ed9a36
payment_method: Direct Deposit
split_by: Percentage
splits:
- bank_account_uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
hidden_account_number: XXXX1207
encrypted_account_number: mbNLVOm7psP16ocqXso5ZtzOXBrA-5Q-.zarrdLBmyYDDK4kCkF2reKtzx8udK8iDabtW
name: Primary Checking
priority: 1
split_amount: 100
Employee-Payment-Method:
title: Employee-Payment-Method
type: object
x-examples:
direct_deposit_percentage:
version: 63859768485e218ccf8a449bb60f14ed
type: Direct Deposit
split_by: Percentage
splits:
- uuid: 4b35bebe-3445-4014-a748-1e264647d601
name: Cayman Island Checking
hidden_account_number: XXXX1234
priority: 1
split_amount: 100
Example-1:
value:
version: 63859768485e218ccf8a449bb60f14ed
type: Direct Deposit
split_by: Amount
splits:
- uuid: e88f9436-b74e-49a8-87e9-777b9bfe715e
name: BoA Checking Account
priority: 1
split_amount: 50000
- uuid: 0d2b7f73-05d6-4184-911d-269edeecc30a
name: Chase Checking Account
priority: 2
split_amount: 100000
- uuid: 1531e824-8d9e-4bd8-9f90-0d04608125d7
name: US Bank Checking Account
priority: 3
split_amount:
Example-2:
value:
version: 63859768485e218ccf8a449bb60f14ed
type: Direct Deposit
split_by: Percentage
splits:
- uuid: e88f9436-b74e-49a8-87e9-777b9bfe715e
name: BoA Checking Account
priority: 1
split_amount: 60
- uuid: 0d2b7f73-05d6-4184-911d-269edeecc30a
name: Chase Checking Account
priority: 2
split_amount: 40
Example-3:
value:
version: 63859768485e218ccf8a449bb60f14ed
type: Check
description: ''
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
type:
type: string
enum:
- Direct Deposit
- Check
description: The payment method type. If type is Check, then `split_by` and `splits` do not need to be populated. If type is Direct Deposit, `split_by` and `splits` are required.
split_by:
anyOf:
- type: string
enum:
- Amount
- Percentage
- type: 'null'
description: Describes how the payment will be split. If `split_by` is Percentage, then the split amounts must add up to exactly 100. If `split_by` is Amount, then the last split `amount` must be `null` to capture the remainder.
splits:
type:
- array
- 'null'
items:
"$ref": "#/components/schemas/Payment-Method-Bank-Account"
x-tags:
- Employee Payment Method
Tax-Requirement:
type: object
x-examples:
ga-withholding-requirement-example:
key: 71653ec0-00b5-4c66-a58b-22ecf21704c5
applicable_if: []
label: Withholding Number
description: If you have run payroll in the past in GA, find your withholding number on notices received from the Georgia Department of Revenue, or call the agency at (877) 423-6711. If you don’t have a number yet, you should register the business online. The last two characters of your ID must be upper case letters.
value: 1233214-AB
editable: true
metadata:
type: account_number
mask: "#######-^^"
prefix:
properties:
key:
"$ref": "#/components/schemas/Tax-Requirement-Key"
applicable_if:
type: array
description: An array of references to other requirements within the requirement set. This requirement is only applicable if all referenced requirements have values matching the corresponding `value`. The primary use-case is dynamically hiding and showing requirements as values change. E.g. Show Requirement-B when Requirement-A has been answered with `false`. To be explicit, an empty array means the requirement is applicable.
items:
type: object
properties:
key:
"$ref": "#/components/schemas/Tax-Requirement-Key"
value:
description: The required value of the requirement identified by `key`
oneOf:
- type: boolean
- type: string
- type: number
- type: 'null'
label:
type: string
description: A customer facing description of the requirement
description:
type:
- string
- 'null'
description: A more detailed customer facing description of the requirement
value:
"$ref": "#/components/schemas/Tax-Requirements-Value"
metadata:
"$ref": "#/components/schemas/Tax-Requirement-Metadata"
editable:
type: boolean
description: Whether the value of this requirement can be updated
payroll_blocking:
type: boolean
description: |
Whether this requirement, when blank, would block payroll processing for the company in this state.
Stable across changes to the field's value: a `payroll_blocking: true` field reports `true` whether
currently empty or populated.
default_value_applied:
type: boolean
description: 'Whether the current `value` is a default rather than an explicitly set one.
'
Tax-Requirement-Metadata:
type: object
x-examples:
select-example:
type: select
options:
- label: Semiweekly
value: Semi-weekly
- label: Monthly
value: Monthly
- label: Quarterly
value: Quarterly
tax_rate-example:
metadata:
type: tax_rate
validation:
type: min_max
min: '0.0004'
max: '0.081'
radio-example:
metadata:
type: radio
options:
- label: No, we cannot reimburse the state—we have to pay SUI taxes quarterly
short_label: Not Reimbursable
value: false
- label: Yes, we can reimburse the state if an employee collects SUI benefits—we don’t have to pay SUI taxes quarterly
short_label: Reimbursable
value: true
account_number-example:
metadata:
type: account_number
mask: "######-##"
prefix:
properties:
type:
type: string
enum:
- text
- currency
- radio
- select
- percent
- account_number
- tax_rate
- workers_compensation_rate
description: |
Describes the type of requirement - each type may have additional metadata properties to describe possible values, formats, etc.
- `text`: free-text input, no additional requirements
- `currency`: a value representing a dollar amount, e.g. `374.55` representing `$374.55`
- `radio`: choose one of options provided, see `options`
- `select`: choose one of options provided, see `options`
- `percent`: A decimal value representing a percentage, e.g. `0.034` representing `3.4%`
- `account_number`: An account number for a tax agency, more information provided by `mask` and `prefix`
- `tax_rate`: A decimal value representing a tax rate, e.g. `0.034` representing a tax rate of `3.4%`, see `validation` for additional validation guidance
- `workers_compensation_rate`: A decimal value representing a percentage, see `risk_class_code`, `risk_class_description`, and `rate_type`
readOnly: true
options:
type: array
description: "[for `select` or `radio`] An array of objects describing the possible values."
items:
type: object
properties:
label:
type: string
description: A customer facing label for the answer
value:
oneOf:
- type: string
- type: boolean
description: The actual value to be submitted
short_label:
type:
- string
- 'null'
description: A less verbose label that may sometimes be available
required:
- label
- value
risk_class_code:
type: string
description: "[for `workers_compensation_rate`] The industry risk class code for the rate being requested"
risk_class_description:
type: string
description: "[for `workers_compensation_rate`] A description of the industry risk class for the rate being requested"
rate_type:
type: string
description: |
[for `workers_compensation_rate`] The type of rate being collected. Either:
- `percent`: A percentage formatted as a decimal, e.g. `0.01` for 1%
- `currency_per_hour`: A dollar amount per hour, e.g. `3.24` for $3.24/hr
enum:
- percent
- currency_per_hour
mask:
type:
- string
- 'null'
description: |
[for `account_number`] A pattern describing the format of the account number
The mask is a sequence of characters representing the requirements of the actual account number. Each character in the mask represents a single character in the account number as follows:
- `#`: a digit (`\d`)
- `@`: a upper or lower case letter (`[a-zA-Z]`)
- `^`: an uppercase letter (`[A-Z]`)
- `%`: a digit or uppercase letter (`[0-9A-Z]`)
- any other character represents the literal character
Examples:
- mask: `WHT-######` represents `WHT-` followed by 5 digits, e.g. `WHT-33421`
- mask: `%####-^^` supports values of `75544-AB` and `Z7654-HK`
prefix:
type:
- string
- 'null'
description: "[for `account_number`] A value that precedes the value to be collected - useful for display, but should not be submitted as part of the value. E.g. some tax agencies use an account number that is a company's federal ein plus two digits. In that case the mask would be `##` and the prefix `XXXXX1234`."
validation:
type: object
description: "[for `tax_rate`] Describes the validation required for the tax rate"
properties:
type:
type: string
description: Describes the type of tax_rate validation rule
enum:
- one_of
- min_max
min:
type: string
description: "[for `min_max`] The inclusive lower bound of the tax rate"
max:
type: string
description: "[for `min_max`] The inclusive upper bound of the tax rate"
rates:
type: array
description: |
[for `one_of`] The possible, unformatted tax rates for selection.
- e.g. ["0.0", "0.001"] representing 0% and 0.1%
items:
type: string
required:
- type
required:
- type
description: ''
Tax-Requirement-Set:
type: object
x-examples:
tax-requirements-set-ga-registrations-example:
state: GA
key: registrations
label: Registrations
effective_from:
requirements:
- key: 71653ec0-00b5-4c66-a58b-22ecf21704c5
applicable_if: []
label: Withholding Number
description: If you have run payroll in the past in GA, find your withholding number on notices received from the Georgia Department of Revenue, or call the agency at (877) 423-6711. If you don’t have a number yet, you should register the business online. The last two characters of your ID must be upper case letters.
value: 1233214-AB
metadata:
type: account_number
mask: "#######-^^"
prefix:
- key: 6c0911ab-5860-412e-bdef-6437cd881df5
applicable_if: []
label: DOL Account Number
description: If you have run payroll in the past in GA, find your DOL account number on notices received from the Georgia Department of Labor, or call the agency at (404) 232-3300. If you don’t have an account number yet, please follow the instructions here to register your business with the Georgia Dept. of Labor.
value: 474747-88
metadata:
type: account_number
mask: "######-##"
prefix:
description: ''
properties:
state:
"$ref": "#/components/schemas/State"
key:
"$ref": "#/components/schemas/Tax-Requirement-Set-Key"
label:
type: string
description: Customer facing label for the requirement set, e.g. "Registrations"
effective_from:
"$ref": "#/components/schemas/Tax-Requirement-Effective-From"
requirements:
type: array
items:
"$ref": "#/components/schemas/Tax-Requirement"
Tax-Requirements-State:
title: Tax-Requirements-State
type: object
x-examples:
tax-requirements-state-ga-example:
company_uuid: 6c14eac3-0da2-474d-bda1-786b3602d381
state: GA
requirement_sets:
- state: GA
key: registrations
label: Registrations
effective_from:
requirements:
- key: 71653ec0-00b5-4c66-a58b-22ecf21704c5
applicable_if: []
label: Withholding Number
description: If you have run payroll in the past in GA, find your withholding number on notices received from the Georgia Department of Revenue, or call the agency at (877) 423-6711. If you don’t have a number yet, you should register the business online. The last two characters of your ID must be upper case letters.
value: 1233214-AB
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: account_number
mask: "#######-^^"
prefix:
- key: 6c0911ab-5860-412e-bdef-6437cd881df5
applicable_if: []
label: DOL Account Number
description: If you have run payroll in the past in GA, find your DOL account number on notices received from the Georgia Department of Labor, or call the agency at (404) 232-3300. If you don’t have an account number yet, please follow the instructions here to register your business with the Georgia Dept. of Labor.
value: 474747-88
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: account_number
mask: "######-##"
prefix:
- state: GA
key: taxrates
label: Tax Rates
effective_from: '2022-01-01'
requirements:
- key: suireimbursable
applicable_if: []
label: SUI Reimburser
description: Instead of paying state unemployment insurance (SUI) taxes quarterly, some businesses (like non-profits or government organizations) may be allowed to reimburse the state if one of their employees collects unemployment benefits.
value: false
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: radio
options:
- label: No, we cannot reimburse the state—we have to pay SUI taxes quarterly
short_label: Not Reimbursable
value: false
- label: Yes, we can reimburse the state if an employee collects SUI benefits—we don’t have to pay SUI taxes quarterly
short_label: Reimbursable
value: true
- key: e0ac2284-8d30-4100-ae23-f85f9574868b
applicable_if:
- key: suireimbursable
value: false
label: Total Tax Rate
description: Haven't received your assigned rate yet? Find the new employer rate and enter it here.
value: '0.05'
editable: true
payroll_blocking: true
default_value_applied: false
metadata:
type: tax_rate
validation:
type: min_max
min: '0.0004'
max: '0.081'
- state: GA
key: depositschedules
label: Deposit Schedules
effective_from: '2022-01-01'
requirements:
- key: 6ddfcbeb-94d3-4003-bfc2-8c6e1ca9f70c
applicable_if: []
label: Deposit Schedule
description: Georgia rejects payments made on the wrong schedule. GA employers receive their schedule on a registration verification letter after registering with the Georgia Dept. of Revenue. If you are unsure, call the agency at (877) 423-6711. If you did not register your business yet, please register the business with the Georgia Dept. of Revenue.
value: Monthly
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: select
options:
- label: Semiweekly
value: Semi-weekly
- label: Monthly
value: Monthly
- label: Quarterly
value: Quarterly
- state: GA
key: depositschedules
label: Deposit Schedules
effective_from: '2022-07-01'
requirements:
- key: 6ddfcbeb-94d3-4003-bfc2-8c6e1ca9f70c
applicable_if: []
label: Deposit Schedule
description: Georgia rejects payments made on the wrong schedule. GA employers receive their schedule on a registration verification letter after registering with the Georgia Dept. of Revenue. If you are unsure, call the agency at (877) 423-6711. If you did not register your business yet, please register the business with the Georgia Dept. of Revenue.
value: Monthly
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: select
options:
- label: Semiweekly
value: Semi-weekly
- label: Monthly
value: Monthly
- label: Quarterly
value: Quarterly
tax-requirements-metadata-select:
company_uuid: 6c14eac3-0da2-474d-bda1-786b3602d381
state: GA
requirement_sets:
- state: GA
key: depositschedules
label: Deposit Schedules
effective_from: '2022-01-01'
requirements:
- key: 6ddfcbeb-94d3-4003-bfc2-8c6e1ca9f70c
applicable_if: []
label: Deposit Schedule
description: The deposit schedule assigned by the state agency.
value: Monthly
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: select
options:
- label: Semiweekly
value: Semi-weekly
- label: Monthly
value: Monthly
- label: Quarterly
value: Quarterly
tax-requirements-metadata-radio:
company_uuid: 6c14eac3-0da2-474d-bda1-786b3602d381
state: GA
requirement_sets:
- state: GA
key: taxrates
label: Tax Rates
effective_from: '2022-01-01'
requirements:
- key: suireimbursable
applicable_if: []
label: SUI Reimburser
description: Instead of paying state unemployment insurance (SUI) taxes quarterly, some businesses may be allowed to reimburse the state if one of their employees collects unemployment benefits.
value: false
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: radio
options:
- label: No, we cannot reimburse the state—we have to pay SUI taxes quarterly
short_label: Not Reimbursable
value: false
- label: Yes, we can reimburse the state if an employee collects SUI benefits—we don't have to pay SUI taxes quarterly
short_label: Reimbursable
value: true
tax-requirements-metadata-account-number:
company_uuid: 6c14eac3-0da2-474d-bda1-786b3602d381
state: GA
requirement_sets:
- state: GA
key: registrations
label: Registrations
effective_from:
requirements:
- key: 71653ec0-00b5-4c66-a58b-22ecf21704c5
applicable_if: []
label: Withholding Number
description: Your state withholding account number.
value: 1233214-AB
editable: true
payroll_blocking: false
default_value_applied: false
metadata:
type: account_number
mask: "#######-^^"
prefix:
tax-requirements-metadata-tax-rate:
company_uuid: 6c14eac3-0da2-474d-bda1-786b3602d381
state: GA
requirement_sets:
- state: GA
key: taxrates
label: Tax Rates
effective_from: '2022-01-01'
requirements:
- key: e0ac2284-8d30-4100-ae23-f85f9574868b
applicable_if:
- key: suireimbursable
value: false
label: Total Tax Rate
description: The assigned SUI tax rate for this state.
value: '0.05'
editable: true
payroll_blocking: true
default_value_applied: false
metadata:
type: tax_rate
validation:
type: min_max
min: '0.0004'
max: '0.081'
description: ''
properties:
company_uuid:
type: string
state:
"$ref": "#/components/schemas/State"
requirement_sets:
type: array
items:
"$ref": "#/components/schemas/Tax-Requirement-Set"
Tax-Requirement-States-List:
type: array
x-examples:
success_status:
- state: GA
setup_complete: false
setup_status: not_started
default_rates_applied: false
ready_to_run_payroll: false
- state: CA
setup_complete: true
setup_status: complete
default_rates_applied: false
ready_to_run_payroll: true
items:
type: object
properties:
state:
"$ref": "#/components/schemas/State"
setup_complete:
type: boolean
description: Whether all requirements for the state have been satisfied such that the company can complete onboarding. A company must be `setup_complete` in all relevant states to complete the `state_setup` company onboarding step.
setup_status:
type: string
enum:
- not_started
- in_progress
- complete
description: |
The current status of the state tax setup.
- `not_started`: No requirements have been filled
- `in_progress`: Some requirements have been filled, or default rates are applied
- `complete`: All requirements have been filled without default rates
default_rates_applied:
type: boolean
description: Whether the state is using system-assigned default SUI rates rather than employer-specific rates.
ready_to_run_payroll:
type: boolean
description: Whether the state tax setup is sufficiently complete for the company to run payroll. This will be `true` when `setup_complete` is `true`.
Tax-Requirement-Set-Update:
type: array
description: Array of requirement sets to update. Each set corresponds to a category of requirements for the state.
items:
type: object
required:
- key
- state
properties:
key:
"$ref": "#/components/schemas/Tax-Requirement-Set-Key"
state:
"$ref": "#/components/schemas/State"
effective_from:
"$ref": "#/components/schemas/Tax-Requirement-Effective-From"
requirements:
type: array
items:
type: object
required:
- key
properties:
key:
"$ref": "#/components/schemas/Tax-Requirement-Key"
value:
"$ref": "#/components/schemas/Tax-Requirements-Value"
Tax-Requirements-Value:
description: The value or "answer" for a tax requirement. Type depends on the requirement metadata type (e.g. string for text/account_number, boolean for radio/checkbox, number for percent/currency/tax_rate). Null when the requirement has not been answered.
example: 1233214-AB
oneOf:
- type: boolean
- type: string
- type: number
- type: 'null'
Tax-Requirement-Set-Key:
title: Tax-Requirement-Set-Key
type: string
example: registrations
description: An identifier for a set of requirements. A list of requirement sets can contain multiple sets with the same `key` and different `effective_from` values.
Tax-Requirement-Key:
title: Tax-Requirement-Key
type: string
example: 71653ec0-00b5-4c66-a58b-22ecf21704c5
description: An identifier for an individual requirement. Uniqueness is guaranteed within a requirement set.
Tax-Requirement-Effective-From:
title: Tax-Requirement-Effective-From
type:
- string
- 'null'
example: '2022-01-01'
description: An ISO 8601 formatted date representing the date values became effective. Some requirement sets are effective dated, while others are not. Multiple requirement sets for the same state/key can/will exist with unique effective dates. If a requirement set is has an `effective_from` value, all requirement sets with the same key will also have an `effective_from` value.
State:
title: State
type: string
example: GA
description: One of the two-letter state abbreviations for the fifty United States and the District of Columbia (DC)
Time-Off-Policy:
type: object
x-examples:
success_status:
uuid: 3f746cd0-dd08-408f-b712-8180c7c621e9
company_uuid: de83cff2-8e7a-448e-a28c-14258a9971c3
name: test policy
policy_type: vacation
accrual_method: per_hour_worked
accrual_rate: '40.0'
accrual_rate_unit: '40.0'
paid_out_on_termination: true
accrual_waiting_period_days: 10
carryover_limit_hours: '100.0'
max_accrual_hours_per_year: '100.0'
max_hours: '100.0'
complete: true
version: f5556bce3d75ec2b62bd11990aa7993a
is_active: true
policy_reset_date: 01-01
employees:
- uuid: c61d1895-5cf8-4217-88c8-20d7c3132a04
balance: '40.0'
- uuid: 3633ce57-abb7-422f-8c5a-455566618e6a
balance: '20.0'
success_status_no_employees:
uuid: 3f746cd0-dd08-408f-b712-8180c7c621e9
company_uuid: de83cff2-8e7a-448e-a28c-14258a9971c3
name: test policy
policy_type: vacation
accrual_method: per_hour_worked
accrual_rate: '40.0'
accrual_rate_unit: '40.0'
paid_out_on_termination: true
accrual_waiting_period_days: 10
carryover_limit_hours: '100.0'
max_accrual_hours_per_year: '100.0'
max_hours: '100.0'
complete: true
version: f5556bce3d75ec2b62bd11990aa7993a
is_active: true
policy_reset_date: 01-01
employees: []
deactivated_status:
uuid: 3f746cd0-dd08-408f-b712-8180c7c621e9
company_uuid: de83cff2-8e7a-448e-a28c-14258a9971c3
name: test policy
policy_type: vacation
accrual_method: per_hour_worked
accrual_rate: '40.0'
accrual_rate_unit: '40.0'
paid_out_on_termination: true
accrual_waiting_period_days: 10
carryover_limit_hours: '100.0'
max_accrual_hours_per_year: '100.0'
max_hours: '100.0'
complete: true
version:
is_active: false
policy_reset_date: 01-01
employees: []
description: Representation of a Time Off Policy
properties:
uuid:
type: string
description: Unique identifier of a time off policy
company_uuid:
type: string
description: Unique identifier for the company owning the time off policy
name:
type: string
description: Name of the time off policy
policy_type:
type: string
description: Type of the time off policy. Only "vacation" and "sick" can be created through the API, but other types may be present if the company was previously a Gusto.com customer.
enum:
- vacation
- sick
- bereavement
- custom
- floating_holiday
- jury_duty
- learning_and_development
- parental_leave
- personal_day
- volunteer
- weather
accrual_method:
type: string
description: Policy time off accrual method
accrual_rate:
type:
- string
- 'null'
format: float
description: The rate at which the time off hours will accrue for an employee on the policy. Represented as a float, e.g. "40.0".
accrual_rate_unit:
type:
- string
- 'null'
format: float
description: The number of hours an employee has to work or be paid for to accrue the number of hours set in the accrual rate. Only used for hourly policies (per_hour_paid, per_hour_paid_no_overtime, per_hour_work, per_hour_worked_no_overtime). Represented as a float, e.g. "40.0".
paid_out_on_termination:
type: boolean
description: Boolean representing if an employee's accrued time off hours will be paid out on termination
accrual_waiting_period_days:
type:
- integer
- 'null'
description: Number of days before an employee on the policy will begin accruing time off hours
carryover_limit_hours:
type:
- string
- 'null'
format: float
description: The max number of hours an employee can carryover from one year to the next
max_accrual_hours_per_year:
type:
- string
- 'null'
format: float
description: The max number of hours an employee can accrue in a year
max_hours:
type:
- string
- 'null'
format: float
description: The max number of hours an employee can accrue
policy_reset_date:
type:
- string
- 'null'
description: The date the policy resets. Format MM-DD
complete:
type: boolean
description: boolean representing if a policy has completed configuration
version:
type:
- string
- 'null'
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field. The version will be null if the policy is no longer active.
is_active:
type: boolean
description: boolean representing if a policy is active or not
employees:
type: array
description: List of employee UUIDs under a time off policy
items:
type: object
properties:
uuid:
type: string
balance:
type: string
description: The time off balance for the employee
required:
- uuid
- company_uuid
- name
- policy_type
- accrual_method
- is_active
- employees
Time-Off-Policy-Request-Base:
type: object
description: Base Request Objectfor creating or updating a time off policy
properties:
name:
type: string
description: Name of the time off policy
example: Vacation Policy
policy_type:
type: string
description: Type of the time off policy. Currently only "vacation" and "sick" are supported
enum:
- vacation
- sick
accrual_method:
type: string
description: Accrual method of the time off policy
enum:
- unlimited
- per_pay_period
- per_calendar_year
- per_anniversary_year
- per_hour_worked
- per_hour_worked_no_overtime
- per_hour_paid
- per_hour_paid_no_overtime
accrual_rate:
type:
- string
- 'null'
description: The rate at which the time off hours will accrue for an employee on the policy. Represented as a float, e.g. "40.0".
accrual_rate_unit:
type:
- string
- 'null'
description: The number of hours an employee has to work or be paid for to accrue the number of hours set in the accrual rate. Only used for hourly policies (per_hour_paid, per_hour_paid_no_overtime, per_hour_work, per_hour_worked_no_overtime). Represented as a float, e.g. "40.0".
paid_out_on_termination:
type: boolean
description: Boolean representing if an employee's accrued time off hours will be paid out on termination. If accrual_method is unlimited, then paid_out_on_termination must be `false`.
accrual_waiting_period_days:
type:
- integer
- 'null'
description: Number of days before an employee on the policy will begin accruing time off hours. If accrual_method is per_anniversary_year, per_calendar_year, or unlimited, then accrual_waiting_period_days should be 0.
carryover_limit_hours:
type:
- string
- 'null'
description: The max number of hours an employee can carryover from one year to the next. If accrual_method is unlimited, then carryover_limit_hours must be blank.
max_accrual_hours_per_year:
type:
- string
- 'null'
description: The max number of hours an employee can accrue in a year. If accrual_method is yearly (per_anniversary_year, per_calendar_year) or unlimited, then max_accrual_hours_per_year must be blank.
max_hours:
type:
- string
- 'null'
description: The max number of hours an employee can accrue. If accrual_method is unlimited, then max_hours must be blank.
policy_reset_date:
type:
- string
- 'null'
description: The date the policy resets. Format MM-DD
complete:
type: boolean
description: boolean representing if a policy has completed configuration
Time-Off-Policy-Request:
type: object
description: Request body for creating a time off policy
allOf:
- "$ref": "#/components/schemas/Time-Off-Policy-Request-Base"
- type: object
required:
- name
- policy_type
- accrual_method
Time-Off-Policy-Update-Request:
type: object
description: Request body for updating a time off policy
allOf:
- "$ref": "#/components/schemas/Time-Off-Policy-Request-Base"
Time-Off-Activity:
type: object
x-examples:
example:
policy_uuid: a7838f74-4c29-4b70-9bfb-02a4e3e60709
time_off_type: vacation
policy_name: Paid Time Off
event_type: TimeOffEvent::AddToPolicy
event_description: 'Added to policy: Vacation Per Hour Worked'
effective_time: '2022-09-27T13:43:03.000-07:00'
balance: '0.0'
balance_change: '0.0'
description: Representation of a Time Off Activity
properties:
policy_uuid:
type:
- string
- 'null'
description: unique identifier of a time off policy
time_off_type:
type: string
description: Type of the time off activity
enum:
- vacation
- sick
policy_name:
type:
- string
- 'null'
description: The name of the time off policy for this activity
event_type:
type: string
description: The type of the time off event/activity
event_description:
type:
- string
- 'null'
description: A description for the time off event/activity
effective_time:
type:
- string
- 'null'
description: The datetime of the time off activity
balance:
type:
- string
- 'null'
format: float
description: The time off balance at the time of the activity
balance_change:
type:
- string
- 'null'
format: float
description: The amount the time off balance changed as a result of the activity
Time-Off-Activity-List:
type: array
description: A list of time off activities for an employee
items:
"$ref": "#/components/schemas/Time-Off-Activity"
x-examples:
example:
- policy_uuid: a7838f74-4c29-4b70-9bfb-02a4e3e60709
time_off_type: vacation
policy_name: Paid Time Off
event_type: TimeOffEvent::AddToPolicy
event_description: 'Added to policy: Vacation Per Hour Worked'
effective_time: '2022-09-27T13:43:03.000-07:00'
balance: '0.0'
balance_change: '0.0'
- policy_uuid: a7838f74-4c29-4b70-9bfb-02a4e3e60709
time_off_type: vacation
policy_name: Paid Time Off
event_type: TimeOffEvent::Accrual
event_description: Accrual
effective_time: '2022-09-27T14:43:03.000-07:00'
balance: '2.0'
balance_change: '2.0'
Holiday-Pay-Policy:
type: object
x-examples:
success_status:
version: 1b37938b017c7fd7116bada007072290
company_uuid: b7845189-f12b-4378-918a-d2b9de3dc4ea
federal_holidays:
new_years_day:
selected: true
name: New Year's Day
date: January 1
mlk_day:
selected: true
name: Martin Luther King, Jr. Day
date: Third Monday in January
presidents_day:
selected: false
name: Presidents' Day
date: Third Monday in February
memorial_day:
selected: true
name: Memorial Day
date: Last Monday in May
juneteenth:
selected: false
name: Juneteenth
date: June 19
independence_day:
selected: true
name: Independence Day
date: July 4
labor_day:
selected: false
name: Labor Day
date: First Monday in September
columbus_day:
selected: false
name: Columbus Day (Indigenous Peoples' Day)
date: Second Monday in October
veterans_day:
selected: true
name: Veterans Day
date: November 11
thanksgiving:
selected: true
name: Thanksgiving
date: Fourth Thursday in November
christmas_day:
selected: true
name: Christmas Day
date: December 25
employees:
- uuid: 1ca3cd25-3eda-48c6-ac88-f0e7fb91a15a
description: Representation of a Holiday Pay Policy
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field.
company_uuid:
type: string
description: A unique identifier for the company owning the holiday pay policy
federal_holidays:
type: object
description: List of the eleven supported federal holidays and their details
properties:
new_years_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
mlk_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
presidents_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
memorial_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
juneteenth:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
independence_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
labor_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
columbus_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
veterans_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
thanksgiving:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
christmas_day:
type: object
properties:
selected:
type: boolean
name:
type: string
date:
type: string
employees:
type: array
description: List of employee uuids under a holiday pay policy
items:
type: object
properties:
uuid:
type: string
required:
- version
- company_uuid
- federal_holidays
- employees
Holiday-Pay-Policy-Request:
type: object
description: Request body for creating or updating a holiday pay policy
properties:
federal_holidays:
type: object
description: An object containing federal holiday objects, each containing a boolean selected property.
properties:
new_years_day:
type: object
properties:
selected:
type: boolean
mlk_day:
type: object
properties:
selected:
type: boolean
presidents_day:
type: object
properties:
selected:
type: boolean
memorial_day:
type: object
properties:
selected:
type: boolean
juneteenth:
type: object
properties:
selected:
type: boolean
independence_day:
type: object
properties:
selected:
type: boolean
labor_day:
type: object
properties:
selected:
type: boolean
columbus_day:
type: object
properties:
selected:
type: boolean
veterans_day:
type: object
properties:
selected:
type: boolean
thanksgiving:
type: object
properties:
selected:
type: boolean
christmas_day:
type: object
properties:
selected:
type: boolean
Paid-Holiday:
type: object
description: A paid holiday derived from the company's holiday pay policy
x-examples:
success_status:
holiday_name: New Year's Day
holiday_key: new_years_day
start_date: '2023-01-02'
end_date: '2023-01-02'
properties:
holiday_key:
type:
- string
- 'null'
description: The holiday's identifier (null for custom holidays)
holiday_name:
type: string
description: The holiday's official name
start_date:
type: string
description: The holiday's start date (YYYY-MM-DD)
end_date:
type: string
description: The holiday's end date (YYYY-MM-DD)
Paid-Holidays:
type: array
description: Representation of a company's paid holidays as described by their holiday pay policy
items:
"$ref": "#/components/schemas/Paid-Holiday"
Event:
type: object
x-examples:
example:
uuid: f7397a24-57ad-4fae-b011-d258e8232900
event_type: employee.bank_account.created
resource_type: Company
resource_uuid: 92a20431-9489-4bde-ad27-6feb20b969d5
entity_type: BankAccount
entity_uuid: 92a20431-9489-4bde-ad27-6feb20b969d5
timestamp: 1686784995
description: Representation of an Event
properties:
uuid:
type: string
description: Unique identifier for the event.
event_type:
type: string
description: Description of the event (e.g., payroll.submitted, or company.form.signed).
resource_type:
type: string
enum:
- Company
description: Name of the parent resource of the described entity.
resource_uuid:
type: string
description: Unique identifier for the parent resource.
entity_type:
type: string
description: Name of the entity that the event corresponds to.
entity_uuid:
type: string
description: Unique identifier for the entity.
timestamp:
type: integer
description: Time at which this event was created. Measured in seconds since the Unix epoch.
required:
- uuid
Event-List:
type: array
description: A list of events
x-examples:
success_status:
- uuid: f7397a24-57ad-4fae-b011-d258e8232900
event_type: employee.created
resource_type: Company
resource_uuid: 92a20431-9489-4bde-ad27-6feb20b969d5
entity_type: Employee
entity_uuid: 92a20431-9489-4bde-ad27-6feb20b969d5
timestamp: 1686784995
- uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
event_type: company.provisioned
resource_type: Company
resource_uuid: 92a20431-9489-4bde-ad27-6feb20b969d5
entity_type: Company
entity_uuid: 92a20431-9489-4bde-ad27-6feb20b969d5
timestamp: 1686784994
items:
"$ref": "#/components/schemas/Event"
Invoice-Data:
type: object
x-examples:
example:
active_companies:
- company_uuid: 05ed3150-591e-4f8b-bfd5-55d478edd2d8
active_employees: 5
active_contractors: 3
initial_invoice_period: 2022-01
- company_uuid: 9b37429c-e540-40fb-86b3-738ca9af65c7
active_employees: 0
active_contractors: 1
initial_invoice_period: 2023-05
description: Representation of a partners invoice data
properties:
active_companies:
type: array
description: The list of companies that are active within the invoice period
items:
type: object
properties:
company_uuid:
type: string
description: unique identifier for the company associated with the invoice data
active_employees:
type: integer
description: The number of active employees the company was or will be invoiced for that invoice period. Active employees are calculated as the count of onboarded employees hired before the end of the invoice period and not terminated before the start of the invoice period.
active_contractors:
type: integer
description: The number of active contractors the company was or will be invoiced for that invoice period. Active contractors are calculated as any contractor with an active contractor payment during the invoice period.
initial_invoice_period:
type: string
description: The first invoice period for the company. This will either be the invoice period of the first invoice-able event (first payroll or contractor payment) or the date they migrated to embedded, whichever is later.
Information-Request:
type: object
x-examples:
example:
uuid: 704c1291-274d-4552-aa5d-e7031023c2e5
company_uuid: 3ac84ba3-87b3-40be-8523-d185dc243a6c
type: account_protection
status: pending_response
blocking_payroll: false
required_questions: []
information_request_index_item:
uuid: 704c1291-274d-4552-aa5d-e7031023c2e5
company_uuid: 3ac84ba3-87b3-40be-8523-d185dc243a6c
type: company_onboarding
status: pending_response
blocking_payroll: true
required_questions:
- question_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
question_text: How much wood can a wood chuck chuck?
response_type: text
- question_uuid: b2c3d4e5-f6a7-8901-bcde-f12345678901
question_text: Please upload supporting documentation
response_type: document
description: Representation of an information request
properties:
uuid:
type: string
description: Unique identifier of an information request
company_uuid:
type: string
description: Unique identifier of the company to which the information requests belongs
type:
description: The type of information request
anyOf:
- type: string
enum:
- company_onboarding
- account_protection
- payment_request
- payment_error
- type: 'null'
status:
type: string
description: The status of the information request
enum:
- pending_response
- pending_review
- approved
blocking_payroll:
type: boolean
description: If true, this information request is blocking payroll, and may require response or requires review from our Risk Ops team.
required_questions:
type: array
description: The list of required questions for the information request
items:
type: object
properties:
question_uuid:
type: string
description: The UUID of the question
question_text:
type: string
description: The text of the question
response_type:
type: string
description: The type of response to the question
enum:
- text
- document
- persona
- radio_button
required:
- question_uuid
- question_text
- response_type
Recurring-Reimbursement-List:
type: array
x-examples:
success_status:
- uuid: 04ca1051-dcec-4cb7-829c-dfbffdf4af23
employee_uuid: 73c96cc6-f8c9-4513-b3f1-4301351178d6
version: 3b8eda8460f7acabd86ceec924e0ae74
description: Travel expenses
created_at: '2025-11-03T09:03:20.000-08:00'
updated_at: '2025-11-03T09:03:20.000-08:00'
amount: '100.00'
- uuid: e3fc7aae-5053-44bf-99e1-3636df0d1f5b
employee_uuid: 73c96cc6-f8c9-4513-b3f1-4301351178d6
version: 30c1aeb356a70e0a71275414e5f29b7e
description: Meal allowance
created_at: '2025-11-03T09:03:20.000-08:00'
updated_at: '2025-11-03T09:03:20.000-08:00'
amount: '50.00'
items:
"$ref": "#/components/schemas/Recurring-Reimbursement"
Recurring-Reimbursement:
type: object
x-examples:
success_status:
uuid: b739f253-b028-443b-b6cf-97a555c3d493
employee_uuid: 346e1409-1c97-4524-9ebb-0c0c169e35cb
version: cf9b64404e63d325c762aaad20ca7a39
description: Office supplies
created_at: '2025-11-03T09:03:24.000-08:00'
updated_at: '2025-11-03T09:03:24.000-08:00'
amount: '75.50'
properties:
uuid:
type: string
description: The unique identifier of this recurring reimbursement.
readOnly: true
employee_uuid:
type: string
description: The UUID of the employee.
readOnly: true
description:
type: string
description: The description of the reimbursement.
amount:
type: string
description: The dollar amount of the reimbursement.
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
created_at:
type: string
description: The timestamp when this reimbursement was created.
readOnly: true
updated_at:
type: string
description: The timestamp when this reimbursement was last updated.
readOnly: true
required:
- uuid
- employee_uuid
- description
- amount
- version
Recovery-Case:
type: object
x-examples:
example:
uuid: e83d273e-4ae9-4b61-9c71-4030c2f73093
company_uuid: c5e3e3e9-732f-4762-849e-20b5cec9036f
status: open
latest_error_code: R01
original_debit_date: '2023-10-11'
check_date: '2023-10-13'
payroll_uuid: 210f2034-fb4a-4059-b109-6c3b5efe499d
contractor_payment_uuids:
amount_outstanding: 10499.43
event_total_amount: 5912.07
recovery_case_index_item:
uuid: e83d273e-4ae9-4b61-9c71-4030c2f73093
company_uuid: c5e3e3e9-732f-4762-849e-20b5cec9036f
status: open
latest_error_code: R01
original_debit_date: '2023-10-11'
check_date: '2023-10-13'
payroll_uuid: 210f2034-fb4a-4059-b109-6c3b5efe499d
contractor_payment_uuids:
amount_outstanding: '10499.43'
event_total_amount: '5912.07'
description: Representation of a recovery case
properties:
uuid:
type: string
description: Unique identifier of an recovery case
company_uuid:
type: string
description: Unique identifier of the company to which the recovery case belongs
status:
type: string
description: Status of the recovery case
enum:
- open
- redebit_initiated
- wire_initiated
- recovered
- lost
latest_error_code:
type:
- string
- 'null'
description: The latest bank error code for the recovery case. See [this doc](https://docs.gusto.com/embedded-payroll/docs/ach-codes-and-transaction-types) for a list of common ACH return codes.
original_debit_date:
type:
- string
- 'null'
description: Date when funds were originally debited from the company's bank account
check_date:
type: string
description: Check date for the associated payroll or contractor payments
payroll_uuid:
type:
- string
- 'null'
description: The uuid of the associated payroll for which the recovery case was created. If the recovery case was created for a contractor payment, this field will be null.
contractor_payment_uuids:
type:
- array
- 'null'
description: The uuids of the associated contractor payments for which the recovery case was created. If the recovery case was created for a payroll, this field will be null.
items:
type: string
amount_outstanding:
type: string
description: Amount outstanding for the recovery case
event_total_amount:
type: string
description: Total amount to be debited from the payroll or contractor payments
required:
- uuid
Ach-Transaction:
type: object
x-examples:
example:
uuid: 123e4567-e89b-12d3-a456-426655440000
company_uuid: 456e7890-e12b-34c5-d678-901234567890
payment_event_type: Payroll
payment_event_uuid: 789e0123-e45f-67ab-c890-123456789012
recipient_type: Employee
recipient_uuid: 012e3456-f78d-90ab-12cd-345678901234
error_code:
transaction_type: Credit employee pay
payment_status: submitted
payment_direction: credit
payment_event_check_date: '2023-10-02'
payment_date: '2023-10-17'
amount: '123.00'
description: PAY 380654
description: Representation of an ACH transaction
properties:
uuid:
type: string
description: Unique identifier of an ACH transaction
company_uuid:
type: string
description: Unique identifier of the company to which the ACH transaction belongs
payment_event_type:
type: string
description: The type of payment event associated with the ACH transaction
enum:
- Payroll
- ContractorPayment
payment_event_uuid:
type: string
description: Unique identifier for the payment event associated with the ACH transaction
recipient_type:
description: The type of recipient associated with the ACH transaction
anyOf:
- type: string
enum:
- Employee
- Contractor
- type: 'null'
recipient_uuid:
type: string
description: Unique identifier for the recipient associated with the ACH transaction
error_code:
type:
- string
- 'null'
description: The error code associated with the ACH transaction, if any. If there is no error on the ACH transaction, this field will be nil. See [this article](https://engineering.gusto.com/how-ach-works-a-developer-perspective-part-2/) for a complete list of ACH return codes.
transaction_type:
type: string
description: The type of transaction associated with the ACH transaction
payment_status:
type: string
description: The status of the ACH transaction
enum:
- unsubmitted
- submitted
- successful
- failed
payment_direction:
type: string
description: The direction of the payment
enum:
- credit
- debit
payment_event_check_date:
type: string
description: The date of the payment event check associated with the ACH transaction
payment_date:
type: string
description: The date of the payment associated with the ACH transaction
amount:
type: string
description: The amount of money moved by the ACH transaction. This amount is always non-negative.
description:
type: string
description: The description of the ACH transaction. Can be used to identify the ACH transaction on the recipient's bank statement.
required:
- uuid
Ach-Transaction-List:
type: array
items:
"$ref": "#/components/schemas/Ach-Transaction"
x-examples:
example:
- uuid: 123e4567-e89b-12d3-a456-426655440000
company_uuid: 456e7890-e12b-34c5-d678-901234567890
payment_event_type: Payroll
payment_event_uuid: 789e0123-e45f-67ab-c890-123456789012
recipient_type: Employee
recipient_uuid: 012e3456-f78d-90ab-12cd-345678901234
error_code:
transaction_type: Credit employee pay
payment_status: submitted
payment_direction: credit
payment_event_check_date: '2023-10-02'
payment_date: '2023-10-17'
amount: '123.00'
description: PAY 380654
Wire-In-Request:
type: object
x-examples:
example:
uuid: 05ed3150-591e-4f8b-bfd5-55d478edd2d8
status: awaiting_funds
origination_bank: JP Morgan Chase
origination_bank_address: 1 Chase Plaza, New York, NY 10081
recipient_name: Gusto, Inc
recipient_address: 525 20th Street, San Francisco, CA 94107
recipient_account_number: '21911761'
recipient_routing_number: '123454321'
additional_notes: Additional Notes
bank_name: JP Morgan Chase
date_sent: '2024-06-10'
unique_tracking_code: 1trvxwxp57zf
payment_type: Payroll
payment_uuid: 5faae454-e629-490b-a72a-c022c2c9e6bc
amount_sent: '1014500.00'
requested_amount: '1014500.00'
wire_in_deadline: '2024-06-21T18:00:00Z'
description: Representation of a wire in request
properties:
uuid:
type: string
description: Unique identifier of a wire in request
status:
type: string
description: Status of the wire in
enum:
- awaiting_funds
- pending_review
- approved
- canceled
origination_bank:
type: string
description: Name of bank receiving the wire in
origination_bank_address:
type: string
description: Address of bank receiving the wire in
recipient_name:
type: string
description: Name of the recipient of the wire In
recipient_address:
type: string
description: Address of the recipient of the wire in
recipient_account_number:
type: string
description: Recipient bank account number
recipient_routing_number:
type: string
description: Recipient bank routing number
additional_notes:
type:
- string
- 'null'
description: Notes for the wire in request
bank_name:
type:
- string
- 'null'
description: Name of the bank initiating the wire in
date_sent:
type:
- string
- 'null'
description: Date the wire in was sent
unique_tracking_code:
type: string
description: Include in note with bank to track payment
payment_type:
type: string
description: Type of payment for the wire in
enum:
- Payroll
- ContractorPaymentGroup
payment_uuid:
type: string
description: Unique identifier of the payment
amount_sent:
type:
- string
- 'null'
description: Amount sent through wire in
requested_amount:
type: string
description: Requested amount for the payment
wire_in_deadline:
type: string
description: Deadline to submit the wire in
Wire-In-Request-List:
type: array
items:
"$ref": "#/components/schemas/Wire-In-Request"
x-examples:
example:
- uuid: c5fdae57-5483-4529-9aae-f0edceed92d4
status: awaiting_funds
origination_bank: JP Morgan Chase
origination_bank_address: 1 Chase Plaza, New York, NY 10081
recipient_name: Gusto, Inc
recipient_address: 525 20th Street, San Francisco, CA 94107
recipient_account_number: '21911761'
recipient_routing_number: '123454321'
additional_notes:
bank_name:
date_sent:
unique_tracking_code: 1trvxwxp57zf
payment_type: Payroll
payment_uuid: 5faae454-e629-490b-a72a-c022c2c9e6bc
amount_sent:
requested_amount: '1014500.00'
wire_in_deadline: '2024-06-21T18:00:00Z'
- uuid: a47fc11d-8d92-4b3e-9f2a-3a23b9d8e7d1
status: awaiting_funds
origination_bank: JP Morgan Chase
origination_bank_address: 1 Chase Plaza, New York, NY 10081
recipient_name: Gusto, Inc
recipient_address: 525 20th Street, San Francisco, CA 94107
recipient_account_number: '21911761'
recipient_routing_number: '123454321'
additional_notes:
bank_name:
date_sent:
unique_tracking_code: 6kfhwxq2crsm
payment_type: ContractorPaymentGroup
payment_uuid: 8b6c3d70-9b8e-4d4d-b6a1-a1f3a6d9b2c4
amount_sent:
requested_amount: '15000.00'
wire_in_deadline: '2024-06-21T18:00:00Z'
Wire-In-Request-Update-Request-Body:
type: object
properties:
date_sent:
type: string
description: The date the wire was sent
example: '2024-06-10'
bank_name:
type: string
description: Name of the bank sending the wire
example: Chase
amount_sent:
type: string
description: Amount of money sent
example: '314500.00'
additional_notes:
type: string
description: Additional notes
example: Wire for 2024-06-15 payroll.
required:
- date_sent
- bank_name
- amount_sent
Payroll-Sync:
type: object
description: Record representing the sync of time sheet data to payroll.
properties:
uuid:
type: string
format: uuid
description: Unique identifier of the payroll sync.
example: 123e4567-e89b-12d3-a456-426655440000
company_uuid:
type: string
format: uuid
description: Unique identifier of the company to which the payroll sync belongs.
example: 123e4567-e89b-12d3-a456-426655440001
status:
type: string
readOnly: true
enum:
- pending
- in_progress
- success
- failure
- partial_success
description: |
The current status of the payroll sync. READ-ONLY.
## State Transitions
```
pending ──────► in_progress ──────► success
├─────► failure
└─────► partial_success
```
### Valid Transitions
- `pending` → `in_progress`: Automatic when processing begins
- `in_progress` → `success`: All time sheet data synced successfully
- `in_progress` → `failure`: Sync failed entirely
- `in_progress` → `partial_success`: Some members failed to sync
example: pending
kind:
type: string
enum:
- regular
description: |
The kind of payroll sync.
- `regular`: A regular payroll sync
example: regular
pay_schedule_uuid:
type: string
format: uuid
description: Unique identifier of the pay schedule associated with this sync.
example: 123e4567-e89b-12d3-a456-426655440002
pay_period_start_date:
type: string
format: date
description: The start date of the pay period per ISO 8601 format.
example: '2025-01-01'
pay_period_end_date:
type: string
format: date
description: The end date of the pay period per ISO 8601 format.
example: '2025-01-15'
submitted_at:
type: string
format: date-time
description: Datetime for when the payroll sync was submitted.
example: '2025-01-16T12:00:00Z'
completed_at:
type:
- string
- 'null'
format: date-time
description: Datetime for when the payroll sync completed. Null if the sync is still in progress.
example: '2025-01-16T13:00:00Z'
errors:
type: array
description: Errors encountered during the sync, if any. Each error follows the standard entity error format.
items:
"$ref": "#/components/schemas/Entity-Error-Object"
warnings:
type: array
description: Warnings encountered during the sync, if any.
items:
type: string
x-examples:
pending_sync:
uuid: 123e4567-e89b-12d3-a456-426655440000
company_uuid: 123e4567-e89b-12d3-a456-426655440001
status: pending
kind: regular
pay_schedule_uuid: 123e4567-e89b-12d3-a456-426655440002
pay_period_start_date: '2025-01-01'
pay_period_end_date: '2025-01-15'
submitted_at: '2025-01-16T12:00:00Z'
completed_at:
completed_sync:
uuid: 123e4567-e89b-12d3-a456-426655440000
company_uuid: 123e4567-e89b-12d3-a456-426655440001
status: success
kind: regular
pay_schedule_uuid: 123e4567-e89b-12d3-a456-426655440002
pay_period_start_date: '2025-01-01'
pay_period_end_date: '2025-01-15'
submitted_at: '2025-01-16T12:00:00Z'
completed_at: '2025-01-16T13:00:00Z'
Payroll-Sync-Create-Request-Body:
type: object
required:
- kind
- pay_schedule_uuid
- pay_period_start_date
- pay_period_end_date
properties:
kind:
type: string
enum:
- regular
description: |
The kind of payroll sync.
- `regular`: A regular payroll sync
example: regular
pay_schedule_uuid:
type: string
format: uuid
description: Unique identifier of the pay schedule to sync time sheets for.
example: 123e4567-e89b-12d3-a456-426614174000
pay_period_start_date:
type: string
format: date
description: The start date of the pay period per ISO 8601 format.
example: '2025-01-01'
pay_period_end_date:
type: string
format: date
description: The end date of the pay period per ISO 8601 format.
example: '2025-01-15'
Time-Sheet:
type: object
x-examples:
example:
uuid: 123e4567-e89b-12d3-a456-426655440000
company_uuid: 123e4567-e89b-12d3-a456-426655440000
status: approved
time_zone: America/Los_Angeles
entity_type: Employee
version: 72deb67e16f7b92713c00d3582fa6c68
job_uuid: 123e4567-e89b-12d3-a456-426655440000
entity_uuid: 123e4567-e89b-12d3-a456-426655440000
shift_started_at: '2025-03-04T13:07:10Z'
shift_ended_at: '2025-03-04T16:07:10Z'
created_at: '2025-04-29T16:08:53Z'
updated_at: '2025-04-29T16:08:53Z'
metadata: {}
entries:
- uuid: 123e4567-e89b-12d3-a456-426655440000
hours_worked: '1.000'
pay_classification: Regular
- uuid: 123e4567-e89b-12d3-a456-426655440000
hours_worked: '1.000'
pay_classification: Overtime
- uuid: 123e4567-e89b-12d3-a456-426655440000
hours_worked: '1.000'
pay_classification: Double overtime
description: Record representing an employee/contractor's time sheet
properties:
uuid:
type: string
description: Unique identifier of the time sheet.
status:
type: string
description: Status of the time sheet.
enum:
- pending
- rejected
- approved
company_uuid:
type: string
description: Unique identifier of the company to which the time sheet belongs.
time_zone:
type: string
description: Time zone of where the time was tracked.
entity_type:
type: string
description: Type of entity associated with the time sheet.
enum:
- Employee
- Contractor
entity_uuid:
type: string
description: Unique identifier of the entity associated with the time sheet.
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/app-integrations/docs/idempotency) for information on how to use this field.
job_uuid:
type: string
description: Unique identifier of the job for which time was reported.
shift_started_at:
type: string
format: date-time
description: The start time of the shift.
shift_ended_at:
type: string
format: date-time
description: The end time of the shift. If the shift is still ongoing this field will be null.
created_at:
type: string
format: date-time
description: Datetime for when time sheet was created.
updated_at:
type: string
format: date-time
description: Datetime for when time sheet was updated.
synced_to_payroll_at:
type:
- string
- 'null'
format: date-time
description: Datetime for when time sheet was synced to payroll. Null if the time sheet has not yet been synced to payroll.
metadata:
type: object
additionalProperties:
type: string
maxLength: 500
propertyNames:
type: string
maxLength: 40
maxProperties: 50
description: Metadata associated with the time sheet. Key-value pairs of arbitrary data. Both keys and values must be strings.
entries:
type: array
description: Entries associated with the time sheet.
items:
type: object
properties:
uuid:
type: string
description: Unique identifier of the entry.
hours_worked:
type: string
format: float
description: Hours worked for this pay classification. Represented as a string, e.g. "1.500".
pay_classification:
type: string
description: Pay classification for the entry.
enum:
- Regular
- Overtime
- Double overtime
Time-Sheet-Create-Body:
type: object
description: Request body for creating a time sheet.
required:
- entity_uuid
- entity_type
- time_zone
- shift_started_at
properties:
entity_uuid:
type: string
description: Unique identifier of the entity associated with the time sheet.
entity_type:
type: string
description: Type of entity associated with the time sheet.
job_uuid:
type: string
description: Unique identifier of the job for which time is tracked.
time_zone:
type: string
description: Time zone of where the time is tracked.
shift_started_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the shift was started.
shift_ended_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the shift was ended. If the shift is still ongoing you can omit this field.
metadata:
type: object
additionalProperties:
type: string
maxLength: 500
propertyNames:
type: string
maxLength: 40
maxProperties: 50
description: Metadata associated with the time sheet. Key-value pairs of arbitrary data. Both keys and values must be strings.
entries:
type: array
description: Entries associated with the time sheet.
items:
type: object
properties:
hours_worked:
type: number
format: float
maxDecimalPlaces: 3
minimum: 0.001
description: Hours worked for this pay classification. Should be passed as number with up to 3 decimal places.
pay_classification:
type: string
description: Pay classification for the entry.
enum:
- Regular
- Overtime
- Double overtime
x-examples:
Example:
entity_uuid: 123e4567-e89b-12d3-a456-426614174000
entity_type: Employee
job_uuid: 123e4567-e89b-12d3-a456-426614174000
time_zone: America/New_York
shift_started_at: '2024-06-10T09:00:00Z'
shift_ended_at: '2024-06-10T17:00:00Z'
metadata:
custom_field: custom value
entries:
- pay_classification: Regular
hours_worked: 1.5
x-tags:
- Time Tracking
Time-Sheet-Update-Body:
type: object
description: Request body for updating a time sheet.
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
entity_uuid:
type: string
description: Unique identifier of the entity associated with the time sheet.
example: 123e4567-e89b-12d3-a456-426614174000
entity_type:
type: string
description: Type of entity associated with the time sheet.
example: Employee
job_uuid:
type: string
description: Unique identifier of the job for which time was tracked. Currently is only supported for employees.
example: 123e4567-e89b-12d3-a456-426614174000
time_zone:
type: string
description: Time zone of where the time was tracked.
example: America/New_York
shift_started_at:
type: string
format: date-time
description: The start time of the shift. Timestamp should be in ISO8601
example: '2024-06-10T09:00:00Z'
shift_ended_at:
type: string
format: date-time
description: The end time of the shift. If the shift is still ongoing this will be null.
example: '2024-06-10T17:00:00Z'
metadata:
type: object
additionalProperties:
type: string
maxLength: 500
propertyNames:
type: string
maxLength: 40
maxProperties: 50
description: Metadata associated with the time sheet. Key-value pairs of arbitrary data. Both keys and values must be strings.
entries:
type: array
description: Entries associated with the time sheet.
items:
type: object
properties:
uuid:
type: string
description: Unique identifier of the entry.
hours_worked:
type: number
format: float
maxDecimalPlaces: 3
minimum: 0.001
description: Hours worked for this pay classification. Should be passed as number with up to 3 decimal places.
pay_classification:
type: string
description: Pay classification for the entry.
enum:
- Regular
- Overtime
- Double overtime
x-examples:
Example:
version: 72deb67e16f7b92713c00d3582fa6c68
entity_uuid: 123e4567-e89b-12d3-a456-426614174000
entity_type: Employee
job_uuid: 123e4567-e89b-12d3-a456-426614174000
time_zone: America/New_York
shift_started_at: '2024-06-10T09:00:00Z'
shift_ended_at: '2024-06-10T17:00:00Z'
metadata:
custom_field: custom value
entries:
- uuid: 123e4567-e89b-12d3-a456-426614174000
hours_worked: 1.5
x-tags:
- Time Tracking
Company-Suspension:
type: object
description: Record representing the suspension of a company's Gusto account.
x-examples:
switching_provider:
uuid: ade4528c-6cc4-4bd5-917a-9d636317e7d6
company_uuid: 3a0e3fb7-3d4b-4c7c-8ba0-9ce3c9f1f3be
effective_date: '2025-07-23'
reason: switching_provider
leaving_for: adp
reconcile_tax_method: refund_taxes
file_yearly_forms: false
file_quarterly_forms: false
comments:
tax_refunds: []
shutting_down:
uuid: 5f04b8d0-1a41-40c6-9f5e-10b26ed89729
company_uuid: 3a0e3fb7-3d4b-4c7c-8ba0-9ce3c9f1f3be
effective_date: '2025-07-23'
reason: shutting_down
leaving_for:
reconcile_tax_method: pay_taxes
file_yearly_forms: true
file_quarterly_forms: true
comments:
tax_refunds: []
properties:
uuid:
type: string
description: Unique identifier for this suspension.
company_uuid:
type: string
description: Unique identifier for the company which is suspended.
effective_date:
type: string
description: Date that the suspension took effect.
leaving_for:
type:
- string
- 'null'
description: Which competitor the company is joining instead. Only required if `reason` is `'switching_provider'`.
reason:
type: string
description: Explanation for why the company's account was suspended.
reconcile_tax_method:
type: string
description: How Gusto will handle taxes already collected.
enum:
- pay_taxes
- refund_taxes
file_quarterly_forms:
type: boolean
description: 'Should Gusto file quarterly tax forms on behalf of the company? The correct answer can depend on why the company is suspending their account, and how taxes are being reconciled.
'
file_yearly_forms:
type: boolean
description: 'Should Gusto file yearly tax forms on behalf of the company? The correct answer can depend on why the company is suspending their account, and how taxes are being reconciled.
'
comments:
type:
- string
- 'null'
description: User-supplied comments describing why they are suspending their account.
tax_refunds:
type: array
description: 'Describes the taxes which are refundable to the company for this suspension. These may be refunded or paid by Gusto depending on the value in `reconcile_tax_method`.
'
items:
type: object
properties:
amount:
type: string
description: Dollar amount.
description:
type: string
description: What kind of tax this is.
Company-Suspension-List:
type: array
description: List of suspension records for a company.
items:
"$ref": "#/components/schemas/Company-Suspension"
x-examples:
success_status:
- uuid: 3bd0fa7c-071e-4e85-a6bf-f73a69797694
company_uuid: 3a0e3fb7-3d4b-4c7c-8ba0-9ce3c9f1f3be
effective_date: '2025-07-23'
reason: shutting_down
leaving_for:
reconcile_tax_method: refund_taxes
file_yearly_forms: false
file_quarterly_forms: false
comments:
tax_refunds: []
- uuid: 2ad79a4e-2fbd-43ca-a77b-e9049e6cab15
company_uuid: 3a0e3fb7-3d4b-4c7c-8ba0-9ce3c9f1f3be
effective_date: '2025-07-23'
reason: switching_provider
leaving_for: adp
reconcile_tax_method: refund_taxes
file_yearly_forms: false
file_quarterly_forms: false
comments: Company is transitioning to ADP for their payroll and HR needs
tax_refunds: []
Company-Suspension-Creation-Errors:
type: object
allOf:
- "$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-examples:
missing_required_fields:
errors:
- error_key: reconcile_tax_method
category: invalid_attribute_value
message: Reconcile tax method is required
- error_key: reason
category: invalid_attribute_value
message: Reason is required
- error_key: file_yearly_forms
category: invalid_attribute_value
message: File yearly forms is required
gusto_com_requires_support:
errors:
- error_key: leaving_for
category: invalid_attribute_value
message: Switching to Gusto.com must be processed by our Customer Support team
leaving_for_required:
errors:
- error_key: leaving_for
category: invalid_attribute_value
message: Leaving for is required when switching providers
switching_provider_cannot_pay_taxes:
errors:
- error_key: reconcile_tax_method
category: invalid_attribute_value
message: Reconcile tax method must be refund_taxes when switching to a new payroll provider
pay_taxes_requires_quarterly_filing:
errors:
- error_key: file_quarterly_forms
category: invalid_attribute_value
message: File quarterly forms must be true when paying withheld taxes
Time-Off-Request:
type: object
description: The representation of a time off request.
x-examples:
success_status:
uuid: 9145390f-0431-45ee-b8a0-6e7a8850d4cf
status: approved
employee_note: Vacation at Disney World!
employer_note: But Universal has Harry Potter World...
days:
'2019-06-01': '4.000'
'2019-06-02': '8.000'
'2019-06-03': '2.000'
request_type: vacation
policy_type: vacation
policy_uuid: ae382963-06b2-4b57-9780-8feda862bb70
employee:
uuid: 05f8663b-5944-4cfb-910e-1ee0a6df7b42
full_name: Jessica Gusto
approver:
uuid: 21d8dff4-ce09-4120-a274-3a5628bf6769
full_name: Karen Gusto
initiator:
uuid: 05f8663b-5944-4cfb-910e-1ee0a6df7b42
full_name: Jessica Gusto
properties:
uuid:
type: string
description: The UUID of the time off request.
readOnly: true
status:
type: string
description: The status of the time off request.
enum:
- pending
- approved
- declined
- consumed
readOnly: true
employee_note:
type: string
description: A note about the time off request, from the employee to the employer.
readOnly: true
employer_note:
type: string
description: A note about the time off request, from the employer to the employee.
readOnly: true
request_type:
type: string
description: The type of time off request.
deprecated: true
enum:
- vacation
- sick
readOnly: true
policy_type:
type: string
description: The type of the time off policy (e.g. vacation, sick).
readOnly: true
policy_uuid:
type:
- string
- 'null'
description: The UUID of the time off policy associated with this request.
readOnly: true
days:
description: An object that represents the days in the time off request. The keys of the object are the dates, formatted as a YYYY-MM-DD string. The values of the object are the number of hours requested off for each day, formatted as a string representation of a numeric decimal to the thousands place.
type: object
readOnly: true
employee:
type: object
description: ''
properties:
uuid:
type: string
description: The UUID of the employee the time off request is for.
readOnly: true
full_name:
type: string
description: The full name of the employee the time off request is for.
readOnly: true
readOnly: true
initiator:
type:
- object
- 'null'
description: ''
properties:
uuid:
type: string
description: The UUID of the employee who initiated the time off request.
readOnly: true
full_name:
type: string
description: The full name of the employee who initiated the time off request.
readOnly: true
readOnly: true
approver:
type:
- object
- 'null'
description: This value will be null if the request has not been approved.
properties:
uuid:
type: string
description: The UUID of the employee who approved the time off request.
readOnly: true
full_name:
type: string
description: The full name of the employee who approved the time off request.
readOnly: true
readOnly: true
Time-Off-Request-List:
type: array
items:
"$ref": "#/components/schemas/Time-Off-Request"
x-examples:
success_status:
- uuid: 9145390f-0431-45ee-b8a0-6e7a8850d4cf
status: approved
employee_note: Vacation at Disney World!
employer_note: But Universal has Harry Potter World...
days:
'2019-06-01': '4.000'
'2019-06-02': '8.000'
'2019-06-03': '2.000'
request_type: vacation
policy_type: vacation
policy_uuid: ae382963-06b2-4b57-9780-8feda862bb70
employee:
uuid: 05f8663b-5944-4cfb-910e-1ee0a6df7b42
full_name: Jessica Gusto
approver:
uuid: 21d8dff4-ce09-4120-a274-3a5628bf6769
full_name: Karen Gusto
initiator:
uuid: 05f8663b-5944-4cfb-910e-1ee0a6df7b42
full_name: Jessica Gusto
- uuid: 944cbbf4-8b13-4c45-babd-11ff13e17581
status: pending
employee_note: Coming down with the flu
employer_note: ''
days:
'2019-02-01': '8.000'
request_type: sick
policy_type: sick
policy_uuid: bf493c7e-1a2d-4e5f-8c9a-3d7b6e4f2a1c
employee:
uuid: c2236d10-959a-4bb9-a21d-e14c6df447b6
full_name: James Gusto
approver:
initiator:
uuid: c2236d10-959a-4bb9-a21d-e14c6df447b6
full_name: James Gusto
Embedded-Time-Off-Request:
type: object
description: The representation of a time off request.
required:
- uuid
- status
- employee_note
- employer_note
- policy_type
- policy_uuid
- days
- employee
- initiator
- approver
x-examples:
success_status:
uuid: ad158cfb-99e4-4741-9db3-0bd3a267f222
status: pending
employee_note: Family vacation
employer_note:
days:
'2026-10-20': '8.000'
'2026-10-21': '8.000'
policy_type: vacation
policy_uuid: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
employee:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
approver:
initiator:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
approved_status:
uuid: ad158cfb-99e4-4741-9db3-0bd3a267f222
status: approved
employee_note: Family vacation
employer_note:
days:
'2026-10-20': '8.000'
'2026-10-21': '8.000'
policy_type: vacation
policy_uuid: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
employee:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
approver:
uuid: 21d8dff4-ce09-4120-a274-3a5628bf6769
full_name: Morgan Chen
initiator:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
declined_status:
uuid: ad158cfb-99e4-4741-9db3-0bd3a267f222
status: declined
employee_note: Family vacation
employer_note: Not enough coverage
days:
'2026-10-20': '8.000'
'2026-10-21': '8.000'
policy_type: vacation
policy_uuid: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
employee:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
approver:
initiator:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
properties:
uuid:
type: string
description: The UUID of the time off request.
example: ad158cfb-99e4-4741-9db3-0bd3a267f222
readOnly: true
status:
type: string
description: The status of the time off request.
example: pending
enum:
- pending
- approved
- declined
- consumed
readOnly: true
employee_note:
type:
- string
- 'null'
description: A note about the time off request, from the employee to the employer.
example: Family vacation
readOnly: true
employer_note:
type:
- string
- 'null'
description: A note about the time off request, from the employer to the employee.
example:
readOnly: true
policy_type:
type:
- string
- 'null'
description: The type of the time off policy (e.g. vacation, sick).
example: vacation
readOnly: true
policy_uuid:
type:
- string
- 'null'
description: The UUID of the time off policy associated with this request.
example: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
readOnly: true
days:
description: 'An object where keys are dates in YYYY-MM-DD format and values are hours as string decimals (e.g. {"2025-01-20": "8.000"}).'
type: object
additionalProperties:
type: string
example:
'2026-10-20': '8.000'
'2026-10-21': '8.000'
readOnly: true
employee:
type: object
description: ''
properties:
uuid:
type: string
description: The UUID of the employee the time off request is for.
example: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
readOnly: true
full_name:
type: string
description: The full name of the employee the time off request is for.
example: Alex Johnson
readOnly: true
readOnly: true
initiator:
type:
- object
- 'null'
description: ''
properties:
uuid:
type: string
description: The UUID of the employee who initiated the time off request.
example: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
readOnly: true
full_name:
type: string
description: The full name of the employee who initiated the time off request.
example: Alex Johnson
readOnly: true
readOnly: true
approver:
type:
- object
- 'null'
description: This value will be null if the request has not been approved.
properties:
uuid:
type: string
description: The UUID of the employee who approved the time off request.
example: 21d8dff4-ce09-4120-a274-3a5628bf6769
readOnly: true
full_name:
type: string
description: The full name of the employee who approved the time off request.
example: Morgan Chen
readOnly: true
readOnly: true
Embedded-Time-Off-Request-List:
type: array
items:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
x-examples:
success_status:
- uuid: ad158cfb-99e4-4741-9db3-0bd3a267f222
status: pending
employee_note: Family vacation
employer_note:
days:
'2026-10-20': '8.000'
'2026-10-21': '8.000'
policy_type: vacation
policy_uuid: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
employee:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
approver:
initiator:
uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
full_name: Alex Johnson
- uuid: 944cbbf4-8b13-4c45-babd-11ff13e17581
status: approved
employee_note: Feeling under the weather
employer_note: Feel better soon!
days:
'2026-11-05': '8.000'
policy_type: sick
policy_uuid: bf493c7e-1a2d-4e5f-8c9a-3d7b6e4f2a1c
employee:
uuid: c2236d10-959a-4bb9-a21d-e14c6df447b6
full_name: James Rivera
approver:
uuid: 21d8dff4-ce09-4120-a274-3a5628bf6769
full_name: Morgan Chen
initiator:
uuid: c2236d10-959a-4bb9-a21d-e14c6df447b6
full_name: James Rivera
Embedded-Time-Off-Request-Preview:
type: object
description: Preview of the balance impact for a time off request before it is created or updated.
required:
- balance_hours
- this_request_hours
- other_requested_hours
- remaining_balance_hours
- allow_negative_balance
- unlimited
x-examples:
success_status:
balance_hours: '64.0'
this_request_hours: '16.0'
other_requested_hours: '0.0'
remaining_balance_hours: '48.0'
allow_negative_balance: false
unlimited: false
properties:
balance_hours:
type: string
nullable: true
description: The employee's current available balance hours for this policy. Null for unlimited policies.
example: '64.0'
readOnly: true
this_request_hours:
type: string
description: The total hours for this time off request.
example: '16.0'
readOnly: true
other_requested_hours:
type: string
description: Hours from other pending or approved requests for this policy.
example: '0.0'
readOnly: true
remaining_balance_hours:
type: string
nullable: true
description: The projected balance after this request is applied. Null for unlimited policies.
example: '48.0'
readOnly: true
allow_negative_balance:
type: boolean
description: Whether the time off policy allows a negative balance.
example: false
readOnly: true
unlimited:
type: boolean
description: Whether the time off policy provides unlimited time off.
example: false
readOnly: true
Embedded-Time-Off-Balance:
type: object
description: Time off balance for an employee, grouped by policy.
x-examples:
success_status:
employee_uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
balances:
- policy_uuid: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
balance_hours: '32.0'
accrued_hours: '40.0'
used_hours: '8.0'
pending_hours: '0.0'
properties:
employee_uuid:
type: string
description: The UUID of the employee.
example: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
readOnly: true
balances:
type: array
description: The employee's time off balances, one entry per policy.
readOnly: true
items:
type: object
properties:
policy_uuid:
type: string
description: The UUID of the time off policy.
example: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
readOnly: true
balance_hours:
type: string
description: The employee's current available balance hours for this policy.
example: '32.0'
readOnly: true
accrued_hours:
type: string
description: The total hours accrued year-to-date for this policy.
example: '40.0'
readOnly: true
used_hours:
type: string
description: The total hours used year-to-date for this policy.
example: '8.0'
readOnly: true
pending_hours:
type:
- string
- 'null'
description: The total hours from pending time off requests for this policy.
example: '0.0'
readOnly: true
Embedded-Time-Off-Balance-List:
type: array
items:
"$ref": "#/components/schemas/Embedded-Time-Off-Balance"
x-examples:
success_status:
- employee_uuid: 51924fa0-26c6-4d4c-8832-3ef0b422c67e
balances:
- policy_uuid: c2d9b1bd-3f36-4c2d-a727-b2af057d6a7f
balance_hours: '32.0'
accrued_hours: '40.0'
used_hours: '8.0'
pending_hours: '0.0'
Contractor-Payment-Group-Preview:
description: Preview of a contractor payment group
type: object
properties:
uuid:
type:
- string
- 'null'
description: The unique identifier of the contractor payment group.
readOnly: true
company_uuid:
type: string
description: The UUID of the company.
readOnly: true
check_date:
type: string
description: The check date of the contractor payment group.
readOnly: true
debit_date:
type: string
description: The debit date of the contractor payment group.
readOnly: true
status:
type: string
description: The status of the contractor payment group. Will be `Funded` if all payments that should be funded (i.e. have `Direct Deposit` for payment method) are funded. A group can have status `Funded` while having associated payments that have status `Unfunded`, i.e. payment with `Check` payment method.
enum:
- Unfunded
- Funded
readOnly: true
creation_token:
type:
- string
- 'null'
description: Token used to make contractor payment group creation idempotent. Will error if attempting to create a group with a duplicate token.
readOnly: true
partner_owned_disbursement:
type:
- boolean
- 'null'
description: Whether the disbursement is partner owned.
readOnly: true
submission_blockers:
type: array
description: List of submission blockers for the contractor payment group.
readOnly: true
items:
"$ref": "#/components/schemas/Payroll-Submission-Blocker-Type"
credit_blockers:
type: array
description: List of credit blockers for the contractor payment group.
readOnly: true
items:
"$ref": "#/components/schemas/Payroll-Credit-Blocker-Type"
totals:
type: object
properties:
amount:
type: string
description: The total amount for the group of contractor payments.
readOnly: true
debit_amount:
type: string
description: The total debit amount for the group of contractor payments. Sum of wage & reimbursement amount.
readOnly: true
wage_amount:
type: string
description: The total wage amount for the group of contractor payments.
readOnly: true
reimbursement_amount:
type: string
description: The total reimbursement amount for the group of contractor payments.
readOnly: true
check_amount:
type: string
description: The total check amount for the group of contractor payments.
readOnly: true
readOnly: true
contractor_payments:
type: array
items:
"$ref": "#/components/schemas/Contractor-Payment-For-Group-Preview"
x-examples:
success:
uuid:
company_uuid: 450ddadf-69da-4f37-92e5-8d78b94bffec
check_date: '2025-08-21'
debit_date: '2025-08-19'
status: Unfunded
creation_token: 025e79ac-824d-4d3e-b819-8f265c3edb72
partner_owned_disbursement:
submission_blockers: []
credit_blockers: []
contractor_payments:
- uuid:
contractor_uuid: e894e72b-0aef-4856-9082-9c7826db998d
bonus: '0.0'
hours: '0.0'
hourly_rate: '0.0'
may_cancel: true
payment_method: Direct Deposit
reimbursement: '750.0'
status: Unfunded
wage: '10000.0'
wage_type: Fixed
wage_total: '10000.0'
totals:
amount: '10750.00'
debit_amount: '10750.00'
wage_amount: '10000.00'
reimbursement_amount: '750.00'
check_amount: '0.00'
With submission blockers:
uuid:
company_uuid: 450ddadf-69da-4f37-92e5-8d78b94bffec
check_date: '2025-08-21'
debit_date: '2025-08-19'
status: Unfunded
creation_token: 8f3ced95-ccba-4ace-ac5d-03c1080bb768
partner_owned_disbursement:
submission_blockers:
- blocker_type: fast_ach_threshold_exceeded
blocker_name: Fast ACH Threshold Exceeded
selected_option:
status: unresolved
unblock_options:
- unblock_type: wire_in
check_date: '2025-08-21'
metadata:
wire_in_deadline: '2025-08-21T18:00:00Z'
wire_in_amount: '1000750.0'
- unblock_type: move_to_four_day
check_date: '2025-08-21'
metadata:
debit_date: '2025-08-15'
credit_blockers: []
contractor_payments:
- uuid:
contractor_uuid: e894e72b-0aef-4856-9082-9c7826db998d
bonus: '0.0'
hours: '0.0'
hourly_rate: '0.0'
may_cancel: true
payment_method: Direct Deposit
reimbursement: '750.0'
status: Unfunded
wage: '1000000.0'
wage_type: Fixed
wage_total: '1000000.0'
totals:
amount: '1000750.00'
debit_amount: '1000750.00'
wage_amount: '1000000.00'
reimbursement_amount: '750.00'
check_amount: '0.00'
Contractor-Payment-Group-Partner-Disbursements:
type: object
description: Partner disbursements for a contractor payment group
x-examples:
success_status:
contractor_payment_group_uuid: 123e4567-e89b-12d3-a456-426655440000
disbursements:
- contractor_payment_uuid: 123e4567-e89b-12d3-a456-426655440001
contractor_uuid: 123e4567-e89b-12d3-a456-426655440002
payment_method: Check
payment_status: Not partner managed
- contractor_payment_uuid: 123e4567-e89b-12d3-a456-426655440003
contractor_uuid: 123e4567-e89b-12d3-a456-426655440004
payment_method: Direct Deposit
payment_status: Pending
properties:
contractor_payment_group_uuid:
type: string
description: The UUID of the contractor payment group
disbursements:
type: array
description: List of disbursements for the contractor payment group
items:
type: object
properties:
contractor_payment_uuid:
type: string
description: The UUID of the contractor payment
contractor_uuid:
type: string
description: The UUID of the contractor
payment_method:
type: string
description: The payment method for the disbursement
enum:
- Direct Deposit
- Check
payment_status:
type: string
description: The status of the payment
enum:
- Pending
- Paid
- Not partner managed
- Converted to check
Payroll-Partner-Disbursements:
type: object
description: Partner disbursements for a payroll
x-examples:
success_status:
payroll_uuid: 123e4567-e89b-12d3-a456-426655440000
disbursements:
- employee_uuid: 123e4567-e89b-12d3-a456-426655440001
payment_method: Check
payment_status: Not partner managed
- employee_uuid: 123e4567-e89b-12d3-a456-426655440002
payment_method: Direct Deposit
payment_status: Pending
properties:
payroll_uuid:
type: string
description: The UUID of the payroll
disbursements:
type: array
description: List of disbursements for the payroll
items:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee
payment_method:
type: string
description: The payment method for the disbursement
enum:
- Direct Deposit
- Check
payment_status:
type: string
description: The status of the payment
enum:
- Pending
- Paid
- Not partner managed
- Converted to check
Show-Employees:
type: array
items:
allOf:
- "$ref": "#/components/schemas/Employee-Show"
- type: object
additionalProperties: true
properties:
member_portal_invitation_status:
type:
- object
- 'null'
description: Member portal invitation status information. Only included when the include param has the portal_invitations value set.
properties:
status:
type: string
description: The current status of the member portal invitation.
enum:
- pending
- sent
- verified
- complete
- cancelled
token_expired:
type:
- boolean
- 'null'
description: Whether the invitation token has expired.
welcome_email_sent_at:
type:
- string
- 'null'
format: date-time
description: The date and time when the welcome email was sent.
last_password_resent_at:
type:
- string
- 'null'
format: date-time
description: The date and time when the password reset was last resent.
partner_portal_invitation_sent:
type:
- boolean
- 'null'
description: Whether an external partner portal invitation webhook has been sent for this employee. Only included when the include param has the portal_invitations value set.
x-examples:
success_status:
- uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
first_name: Boaty
middle_initial:
last_name: Koss
email: keena.feest@kiehn.co.uk
company_uuid: e904cc79-818a-4da8-9d37-0be0a86fdda8
manager_uuid:
version: a5cec1f1c0135feb3e76ca6ea3c46176
current_employment_status: full_time
onboarding_status: onboarding_completed
preferred_first_name:
department_uuid:
employee_code: 46f036
payment_method: Direct Deposit
department:
terminated: false
two_percent_shareholder: false
onboarded: true
historical: false
has_ssn: true
onboarding_documents_config:
uuid:
i9_document: false
jobs:
- uuid: bc875f9d-adc5-40f6-99db-ed8470bda25f
version: 863bcd01c51fcfa2468d604cffec7413
employee_uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
current_compensation_uuid: 2ec164d0-808b-446c-8120-8cfb500945d0
payment_unit: Year
primary: true
two_percent_shareholder: false
state_wc_covered:
state_wc_class_code:
title: ''
compensations:
- uuid: 2ec164d0-808b-446c-8120-8cfb500945d0
employee_uuid: d7282d99-ab6b-42f5-ba45-f4a670e886a8
version: db7bfb49a4f0893432cb562311bfcad9
payment_unit: Year
flsa_status: Exempt
adjust_for_minimum_wage: false
minimum_wages: []
job_uuid: bc875f9d-adc5-40f6-99db-ed8470bda25f
effective_date: '2025-06-09'
rate: '80000.00'
rate: '80000.00'
hire_date: '2024-06-09'
eligible_paid_time_off: []
terminations: []
garnishments: []
date_of_birth: '2005-06-09'
ssn: ''
phone:
work_email:
current_home_address:
street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
uiud: sample-uuid-123231
all_home_addresses:
- street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
uiud: sample-uuid-123231
- street_1: 123 Example Rd
street_2:
city: Example City
state: EX
zip: '12345'
country: USA
active: false
uiud: another-sample-uuid-456789
member_portal_invitation_status:
status: sent
token_expired: false
welcome_email_sent_at: '2024-01-15T14:30:00Z'
last_password_resent_at:
partner_portal_invitation_sent: true
Employee-Home-Address:
type: object
properties:
street_1:
type:
- string
- 'null'
readOnly: false
street_2:
type:
- string
- 'null'
readOnly: false
city:
type:
- string
- 'null'
readOnly: false
state:
type:
- string
- 'null'
readOnly: false
zip:
type:
- string
- 'null'
readOnly: false
country:
type:
- string
- 'null'
readOnly: false
default: USA
active:
type: boolean
description: The status of the location. Inactive locations have been deleted, but may still have historical data associated with them.
readOnly: true
uuid:
type: string
description: Unique identifier for this address.
id:
type: integer
description: The internal ID of the address.
readOnly: true
effective_from:
type: string
format: date
description: The date the address became effective.
effective_to:
type: string
format: date
description: The date the address became inactive.
effective_date:
type: string
format: date
description: The date the address became effective.
example:
street_1: 412 Kiera Stravenue
street_2: Suite 391
city: San Francisco
state: CA
zip: '94107'
country: USA
active: true
uud: sample-uuid-123231
id: 3
effective_from: '2024-01-01'
effective_to: '2025-01-01'
effective_date: '2024-01-01'
Webhooks-Health-Check-Status:
description: The representation of a webhooks health check response
type: object
x-examples:
success_status:
status: healthy
last_checked_at: '2025-09-08T21:21:38.000Z'
properties:
status:
type: string
description: Latest health status of the webhooks system
readOnly: true
enum:
- healthy
- unhealthy
- unknown
last_checked_at:
type: string
format: date-time
readOnly: true
description: ISO8601 timestamp of the last successful health check with millisecond precision
Partner-Managed-Company-Migrate-Request:
type: object
required:
- email
properties:
email:
type: string
description: Email of the company signatory who is authorized to accept our [Terms of Service](https://flows.gusto.com/terms) and migration decision. You can retrieve the signatory email from the `GET /v/1/companies/{company_id}/signatories` endpoint.
ip_address:
type: string
description: The IP address of the signatory who viewed and accepted the Terms of Service.
external_user_id:
type: string
description: The signatory's user ID on your platform.
x-examples:
typical:
email: payroll.admin@example.com
ip_address: 203.0.113.42
external_user_id: 9f8e7d6c-5b4a-3210-fedc-ba9876543210
Partner-Managed-Company-Migrate-Response:
type: object
properties:
company_uuid:
type: string
description: The company UUID
migration_status:
type: string
description: The migration status. Always returns `success` for a successful migration.
enum:
- success
x-examples:
Example:
company_uuid: 39abf9b9-650b-4e67-89a0-389dc6ee8a71
migration_status: success
Partner-Managed-Company-Create-Request:
type: object
required:
- user
- company
properties:
user:
type: object
description: Information for the user who will be the primary payroll administrator for the new company.
required:
- first_name
- last_name
- email
properties:
first_name:
type: string
description: The first name of the user who will be the primary payroll admin.
last_name:
type: string
description: The last name of the user who will be the primary payroll admin.
email:
type: string
description: The email of the user who will be the primary payroll admin.
phone:
type: string
description: The phone number of the user who will be the primary payroll admin.
company:
type: object
required:
- name
properties:
name:
type: string
description: The legal name of the company.
trade_name:
type: string
description: The name of the company.
ein:
type: string
description: The employer identification number (EIN) of the company.
contractor_only:
type: boolean
description: Whether the company only supports contractors. Should be set to true if the company has no W-2 employees. If not passed, will default to false (i.e. the company will support both contractors and employees).
x-examples:
Example:
user:
first_name: Frank
last_name: Ocean
email: frank@example.com
phone: '2345558899'
company:
name: Frank's Ocean, LLC
trade_name: Frank's Ocean
ein: '123456789'
contractor_only: false
Partner-Managed-Company:
description: Object returned when creating a partner managed company
type: object
properties:
access_token:
type: string
description: Access token that can be used for OAuth access to the account. Access tokens expire 2 hours after they are issued.
readOnly: true
refresh_token:
type: string
description: Refresh token that can be exchanged for a new access token.
readOnly: true
company_uuid:
type: string
description: Gusto's UUID for the company
readOnly: true
expires_in:
type: integer
description: Time of access_token expiration in seconds
readOnly: true
x-examples:
Example:
access_token: de6780bc506a0446309bd9362820ba8aed28aa506c71eedbe1c5c4f9dd350e54
refresh_token: 8257e65c97202ed1726cf9571600918f3bffb2544b26e00a61df9897668c33a1
company_uuid: d525dd21-ba6e-482c-be15-c2c7237f1364
expires_in: 7200
Migration-Blocker:
description: Migration blocker that blocks company migration
type: object
properties:
errors:
type: array
items:
type: object
properties:
error_key:
type: string
description: Error key
category:
type: string
description: Error category
message:
type: string
description: Blocker message
metadata:
type: object
properties:
key:
type: string
description: A categorization of the migration blocker, e.g. "migrated_company"
Migration-Warning:
description: Migration warning that does not block company migration
type: object
properties:
warnings:
type: array
items:
type: object
properties:
error_key:
type: string
description: Error key
category:
type: string
description: Error category
message:
type: string
description: Warning message
metadata:
type: object
properties:
key:
type: string
description: A categorization of the migration warning, e.g. "marijuana_related_business"
Partner-Managed-Company-Migration-Readiness-Response:
description: ''
allOf:
- type: object
properties:
ready_to_migrate:
type: boolean
description: Indicates if the company is ready to be migrated.
company_uuid:
type: string
description: The company UUID
- "$ref": "#/components/schemas/Migration-Blocker"
- "$ref": "#/components/schemas/Migration-Warning"
x-examples:
Example:
ready_to_migrate: false
company_uuid: 39abf9b9-650b-4e67-89a0-389dc6ee8a71
errors:
- error_key: base
category: invalid_operation
message: The operation is already performed for this company.
metadata:
key: migrated_company
warnings: []
Partner-Managed-Company-Disassociate-Response:
type: object
description: The company that was disassociated from the partner's embedded payroll product.
required:
- company_uuid
- company_name
properties:
company_uuid:
type: string
format: uuid
description: The UUID of the disassociated company.
company_name:
type: string
description: The name of the disassociated company.
x-examples:
Example:
company_uuid: 39abf9b9-650b-4e67-89a0-389dc6ee8a71
company_name: Acme LLC
Partner-Managed-Company-Accept-Terms-Of-Service-Request:
type: object
description: ''
required:
- email
- ip_address
- external_user_id
properties:
email:
type: string
description: The user's email address on Gusto. You can retrieve the user's email via company's `/admins`, `/employees`, `/signatories`, and `/contractors` endpoints.
ip_address:
type: string
description: The IP address of the user who viewed and accepted the Terms of Service.
external_user_id:
type: string
description: The user ID on your platform.
x-examples:
Example:
ip_address: 192.168.1.2
external_user_id: '2005648946132'
email: jsmith99@gmail.com
Partner-Managed-Company-Retrieve-Terms-Of-Service-Request:
type: object
required:
- email
properties:
email:
type: string
description: The user's email address on Gusto. You can retrieve the user's email via company's `/admins`, `/employees`, `/signatories`, and `/contractors` endpoints.
x-examples:
Example:
email: jsmith99@gmail.com
Partner-Managed-Company-Terms-Of-Service-Response:
description: ''
type: object
properties:
latest_terms_accepted:
type: boolean
description: Whether the latest terms have been accepted by the user.
x-examples:
Example:
latest_terms_accepted: true
Provision-Create-Request-Body:
type: object
required:
- user
- company
properties:
user:
type: object
description: Information for the user who will be the primary payroll administrator for the new company.
required:
- first_name
- last_name
- email
properties:
first_name:
type: string
description: The first name of the user who will be the primary payroll admin.
last_name:
type: string
description: The last name of the user who will be the primary payroll admin.
email:
type: string
description: The email of the user who will be the primary payroll admin.
phone:
type: string
description: The phone number of the user who will be the primary payroll admin.
company:
type: object
required:
- name
properties:
name:
type: string
description: The legal name of the company.
trade_name:
type: string
description: The name of the company.
ein:
type: string
description: The employer identification number (EIN) of the company.
states:
type: array
description: 'The states in which the company operates. States should be included by their two letter code, i.e. NY for New York. '
items:
type: string
number_employees:
type: number
description: The number of employees in the company.
addresses:
type: array
uniqueItems: false
description: The locations for the company. This includes mailing, work, and filing addresses.
items:
type: object
properties:
street_1:
type: string
street_2:
type:
- string
- 'null'
city:
type: string
zip:
type: string
state:
type: string
phone:
type: string
is_primary:
type: string
description: Whether or not this is a primary address for the company. If set to true, the address will be used as the mailing and filing address for the company and will be added as a work location. If set to false or not included, the address will only be added as a work location for the company. If multiple addresses are included, only one should be marked as primary.
x-examples:
Example:
user:
first_name: Frank
last_name: Ocean
email: frank@example.com
phone: '2345558899'
company:
name: Frank's Ocean, LLC
trade_name: Frank's Ocean
tier: complete
ein: '123456789'
states:
- CO
- CA
number_employees: 8
addresses:
- street_1: 1201 16th Street Mall
street_2: Suite 350
city: Denver
zip: '80202'
state: CO
phone: '2345678900'
is_primary: 'true'
- street_1: 525 20th Street
city: San Francisco
zip: '94107'
state: CA
phone: '2345678901'
Provision-Created:
type: object
properties:
account_claim_url:
type: string
description: A URL where the user should be redirected to complete their account setup inside of Gusto.
readOnly: true
x-examples:
Example:
account_claim_url: https://app.gusto.com/claim_account/3456789
Employees-Annual-Fica-Wage-Report-Acceptance:
type: object
description: Acceptance acknowledgement for an asynchronous employees annual FICA wage report. Returned with HTTP 202; poll the report status endpoint using `request_uuid`.
required:
- request_uuid
- company_uuid
- start_year
- end_year
properties:
request_uuid:
type: string
format: uuid
description: The UUID of the report request. Use this to poll for report completion.
company_uuid:
type: string
format: uuid
description: The UUID of the company.
start_year:
type: integer
description: The start year for the report.
end_year:
type: integer
description: The end year for the report.
x-examples:
accepted:
request_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
company_uuid: 12345678-abcd-ef12-3456-7890abcdef12
start_year: 2023
end_year: 2024
Bulk-Report-Body:
description: Each `batch` item is a `custom_report` or a `general_ledger` report.
type: object
required:
- batch
properties:
batch:
type: array
minItems: 1
maxItems: 25
description: One report per item. Up to 25 items per batch, across any combination of companies the partner is mapped to.
items:
"$ref": "#/components/schemas/Bulk-Report-Item"
example:
batch:
- company_uuid: 12345678-abcd-ef12-3456-7890abcdef12
report_type: custom_report
columns:
- employee_first_name
groupings:
- employee
file_type: csv
custom_name: Q1 Payroll Export
with_totals: false
start_date: '2026-01-01'
end_date: '2026-03-31'
date_filter_type: check_date
payment_method: check
employment_type: exempt
employment_status: active_full_time
- company_uuid: 12345678-abcd-ef12-3456-7890abcdef12
report_type: general_ledger
payroll_uuid: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
aggregation: default
x-tags:
- Reports
Bulk-Report-Item:
description: 'A single report inside a bulk batch. Required fields depend on `report_type`: `custom_report` requires `columns` and `file_type`; `general_ledger` requires `payroll_uuid` and `aggregation`.'
oneOf:
- "$ref": "#/components/schemas/Bulk-Report-Custom-Report-Item"
- "$ref": "#/components/schemas/Bulk-Report-General-Ledger-Item"
discriminator:
propertyName: report_type
mapping:
custom_report: "#/components/schemas/Bulk-Report-Custom-Report-Item"
general_ledger: "#/components/schemas/Bulk-Report-General-Ledger-Item"
x-tags:
- Reports
Bulk-Report-Custom-Report-Item:
description: A custom report entry in a bulk batch.
type: object
required:
- company_uuid
- report_type
- columns
- file_type
properties:
company_uuid:
type: string
format: uuid
description: UUID of the company to generate the report for. The partner must be mapped to this company.
example: 12345678-abcd-ef12-3456-7890abcdef12
report_type:
type: string
enum:
- custom_report
description: Identifies this batch item as a custom report.
example: custom_report
columns:
type: array
description: Columns to include in the report.
items:
type: string
enum:
- additional_earnings
- bank_account_account_number
- bank_account_routing_number
- bank_account_type
- bank_account
- bonus
- cash_tips
- check_amount
- check_date
- commission
- date_of_birth
- double_overtime_earnings
- double_overtime_hours
- double_overtime_rate
- employee_additional_taxes
- employee_benefit_contributions
- employee_compensation_time_period
- employee_compensation
- employee_deductions
- employee_department
- employee_email
- employee_donations
- employee_federal_income_tax
- employee_first_name
- employee_last_name
- employee_middle_initial
- employee_medicare_additional_tax
- employee_medicare_tax
- employee_phone_number
- employee_social_security_tax
- employee_state_income_tax
- employee_taxes
- employee_uuid
- employee_work_email
- employer_additional_taxes
- employer_benefit_contributions
- employer_cost
- employer_futa_tax
- employer_medicare_tax
- employer_social_security_tax
- employer_suta_tax
- employer_taxes
- employment_type
- employment
- end_date
- garnishments
- gross_earnings
- holiday_earnings
- holiday_hours
- home_address_city
- home_address_state
- home_address_street
- home_address_zip
- home_address
- job_title
- net_pay
- one_time_reimbursements
- overtime_earnings
- overtime_hours
- overtime_rate
- paid_time_off_earnings
- paid_time_off_hours
- paid_time_off_rate
- pay_period_end
- pay_period_start
- paycheck_tips
- payment_method
- payroll_type
- payroll_uuid
- preferred_first_name
- recurring_reimbursements
- regular_earnings
- regular_hours
- regular_rate
- reimbursements
- risk_class_code
- sick_rate
- sick_time_off_earnings
- sick_time_off_hours
- start_date
- total_employer_benefit_contributions
- total_time_off_earnings
- total_time_off_hours
- work_address_city
- work_address_street
- work_address_zip
groupings:
type: array
description: How to group the report. If omitted, defaults are derived from the requested `columns`.
items:
type: string
enum:
- payroll
- employee
- work_address
- work_address_state
file_type:
type: string
description: The type of file to generate.
enum:
- csv
- json
- pdf
custom_name:
type: string
description: Display name for the report.
with_totals:
type: boolean
description: Whether to include subtotals and grand totals.
default: false
date_filter_type:
type: string
description: Which payroll date `start_date` and `end_date` filter against.
default: period_end_date
enum:
- period_end_date
- period_start_date
- check_date
start_date:
type: string
format: date
description: Start date of data to filter by.
example: '2026-01-01'
end_date:
type: string
format: date
description: End date of data to filter by.
example: '2026-03-31'
payment_method:
type: string
description: Payment method to filter by.
enum:
- check
- direct_deposit
employment_type:
type: string
description: Employee employment type to filter by.
enum:
- exempt
- salaried_nonexempt
- nonexempt
- commission_only_exempt
- commission_only_nonexempt
employment_status:
type: string
description: Employee employment status to filter by.
enum:
- active_full_time
- active_part_time
- active_part_time_eligible
- active_variable
- active_seasonal
- active
- dismissed
employee_uuids:
type:
- array
- 'null'
description: Employees to filter by.
items:
type: string
department_uuids:
type: array
description: Departments to filter by.
items:
type: string
work_address_uuids:
type: array
description: Work addresses to filter by.
items:
type: string
x-tags:
- Reports
Bulk-Report-General-Ledger-Item:
description: A general ledger report entry in a bulk batch.
type: object
required:
- company_uuid
- report_type
- payroll_uuid
- aggregation
properties:
company_uuid:
type: string
format: uuid
description: UUID of the company to generate the report for. The partner must be mapped to this company.
example: 12345678-abcd-ef12-3456-7890abcdef12
report_type:
type: string
enum:
- general_ledger
description: Identifies this batch item as a general ledger report.
example: general_ledger
payroll_uuid:
type: string
format: uuid
description: The UUID of the payroll to generate the general ledger for.
aggregation:
type: string
enum:
- default
- job
- department
- integration
description: The breakdown of the report. Use `default` for no split.
integration_type:
type:
- string
- 'null'
description: The kind of integration set up for the company. Required when `aggregation` is `integration`; must be null otherwise.
x-tags:
- Reports
Create-Bulk-Report:
type: object
required:
- uuid
- status
properties:
uuid:
type: string
format: uuid
description: Unique identifier of the bulk report batch.
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: |
The batch's processing state.
- `pending`: accepted, not yet started
- `processing`: reports are being generated
- `completed`: all reports finished
- `failed`: the batch failed before completing
x-examples:
pending:
uuid: 4c3a536c-4c88-4fec-a4db-eb4112ab9c92
status: pending
x-tags:
- Reports
Bulk-Report:
type: object
required:
- uuid
- status
- submitted_at
- completed_at
- submitted_items
properties:
uuid:
type: string
format: uuid
description: Unique identifier of the bulk report batch.
status:
type: string
enum:
- pending
- processing
- success
- partial_success
- failed
description: Overall batch status. `pending`/`processing` while in progress; once finished, `success` (all reports succeeded), `partial_success` (some succeeded, some failed), or `failed` (none succeeded).
submitted_at:
type: string
format: date-time
description: When the batch was accepted.
completed_at:
type:
- string
- 'null'
format: date-time
description: When the batch reached a terminal state. Null while non-terminal.
submitted_items:
type: integer
description: How many reports the partner asked for in this batch.
partner_uuid:
type: string
format: uuid
description: UUID of the partner that owns this batch. Returned only once the batch has finished; omitted while in progress.
processed_items:
type: integer
description: How many reports succeeded. Returned only once the batch has finished; omitted while in progress.
report_url:
type:
- string
- 'null'
description: Signed S3 URL to a zip containing every successfully-generated report, valid for 10 minutes. Returned only once the batch has finished; omitted while in progress.
companies:
type: array
description: Per-company breakdown. Returned only once the batch has finished; omitted while in progress.
items:
"$ref": "#/components/schemas/Bulk-Report-Company"
x-examples:
pending:
uuid: 4c3a536c-4c88-4fec-a4db-eb4112ab9c92
status: processing
submitted_at: '2026-06-10T10:24:54Z'
completed_at:
submitted_items: 2
success:
uuid: 4c3a536c-4c88-4fec-a4db-eb4112ab9c92
status: success
submitted_at: '2026-06-10T10:24:54Z'
completed_at: '2026-06-10T10:25:08Z'
submitted_items: 2
partner_uuid: 0b9deb0b-5572-4b62-bce7-9b5624b6381d
processed_items: 2
report_url: https://reports.gusto-api.com/bulk_reports/4c3a536c-4c88-4fec-a4db-eb4112ab9c92.zip
companies:
- company_uuid: 12345678-abcd-ef12-3456-7890abcdef12
status: success
reports:
- report_type: custom_report
file_type: csv
status: success
error:
- report_type: general_ledger
file_type: json
status: success
error:
x-tags:
- Reports
Bulk-Report-Company:
description: Results for a single company in a bulk report batch.
type: object
required:
- company_uuid
- status
- reports
properties:
company_uuid:
type: string
format: uuid
description: UUID of the company.
status:
type: string
enum:
- pending
- success
- partial_success
- failed
description: |
This company's overall status across its `reports`:
- `success`: every report succeeded
- `partial_success`: some succeeded, some failed
- `failed`: every report failed
- `pending`: at least one report is still being generated
reports:
type: array
items:
"$ref": "#/components/schemas/Bulk-Report-Item-Result"
x-tags:
- Reports
Bulk-Report-Item-Result:
description: A single report's outcome.
type: object
required:
- report_type
- file_type
- status
- error
properties:
report_type:
type: string
enum:
- custom_report
- general_ledger
description: Which report this entry refers to.
file_type:
type: string
description: The report's output file type.
status:
type: string
enum:
- pending
- success
- failed
description: The terminal state for this individual report.
error:
type:
- string
- 'null'
description: A user-facing error message when status is `failed`. Null on success.
x-tags:
- Reports
Member-Portal-Invitation:
type: object
description: 'The status of a member portal invitation for an employee or contractor. Returned by `GET /v1/employees/{employee_id}/member_portal_invitations` and `GET /v1/contractors/{contractor_uuid}/member_portal_invitations`.
'
required:
- status
- expired
properties:
status:
type: string
enum:
- pending
- sent
- verified
- complete
- cancelled
description: |
Current status of the member portal invitation.
- `pending`: The invitation record has been created but the invitation email has not yet been delivered.
- `sent`: The invitation email has been delivered to the member.
- `verified`: The member has been verified by the member portal partner.
- `complete`: The member has fully completed their member portal registration.
- `cancelled`: The invitation has been cancelled, either via `DELETE` on this endpoint or because it was superseded.
example: sent
expired:
type: boolean
description: 'Whether the invitation can no longer be acted on by the member. Returns `true` when the invitation token has expired or when the invitation has been `cancelled`. To reissue an expired invitation, call `POST` on this endpoint again — a new token will be generated and will override the prior one.
'
example: false
x-examples:
sent_invitation:
status: sent
expired: false
complete_invitation:
status: complete
expired: false
cancelled_invitation:
status: cancelled
expired: true
Reverse-Wire-Transaction:
type: object
description: Representation of a reverse wire (drawdown) transaction. Reverse wires are debit transactions initiated by Gusto to pull funds from a partner's bank account to cover payroll or contractor payment obligations.
x-examples:
example:
company_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
amount: '107250.85'
status: processed
payment_direction: debit
bank_name: Chase Payroll Incoming Wires
payment_event_type: Payroll
payment_event_uuid: f9e8d7c6-b5a4-3210-fedc-ba9876543210
payment_event_check_date: '2024-01-15'
created_at: '2024-01-12'
properties:
company_uuid:
type: string
description: Unique identifier of the company the reverse wire transaction belongs to
amount:
type: string
format: float
description: The amount of money moved by the reverse wire, as a decimal string. Always non-negative.
status:
type: string
description: |
Current status of the reverse wire transaction.
- `pending_processing`: The reverse wire has been initiated and is awaiting processing by the banking network.
- `processed`: The reverse wire was successfully settled and funds have been received.
- `rejected`: The reverse wire was rejected by the receiving bank (e.g. invalid account, insufficient funds).
- `failed`: The reverse wire failed during processing due to a system or network error.
enum:
- pending_processing
- processed
- rejected
- failed
payment_direction:
type: string
description: The direction of the payment. Reverse wires are always debits from the company's account.
enum:
- debit
bank_name:
type:
- string
- 'null'
description: Name of the receiving bank. Null when the bank is not known.
payment_event_type:
description: The type of payment event this reverse wire is associated with. Null when the wire is not linked to a payroll or contractor payment.
anyOf:
- type: string
enum:
- Payroll
- ContractorPayment
- type: 'null'
payment_event_uuid:
type:
- string
- 'null'
description: Unique identifier of the associated payroll or contractor payment. Null when the wire is not linked to a payment event.
payment_event_check_date:
type:
- string
- 'null'
description: The check date of the associated payment event. Null when the wire is not linked to a payment event.
created_at:
type: string
description: The date the reverse wire record was created.
required:
- company_uuid
- amount
- status
- payment_direction
- created_at
Reverse-Wire-Transaction-List:
type: array
items:
"$ref": "#/components/schemas/Reverse-Wire-Transaction"
x-examples:
example:
- company_uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
amount: '107250.85'
status: processed
payment_direction: debit
bank_name: Chase Payroll Incoming Wires
payment_event_type: Payroll
payment_event_uuid: f9e8d7c6-b5a4-3210-fedc-ba9876543210
payment_event_check_date: '2024-01-15'
created_at: '2024-01-12'
Tax-Filing:
type: object
description: Representation of a tax filing obligation
x-examples:
example:
uuid: 11111111-1111-1111-1111-111111111111
company_uuid: f0e1d2c3-b4a5-6789-0fed-cba987654321
form_title: Quarterly Contribution Return and Report of Wages
jurisdiction: CA
agency_name: California Employment Development Department (EDD)
period: Q1 2026
period_start: '2026-01-01'
period_end: '2026-03-31'
due_date: '2026-04-30'
filed_at:
is_amendment: false
amends_filing_uuid:
status: failed
status_updated_at: '2026-04-20T14:12:33.000Z'
form_uuid:
properties:
uuid:
type: string
description: Unique identifier of the tax filing
company_uuid:
type: string
description: Unique identifier of the company to which the tax filing belongs
form_title:
type: string
description: The human-readable title of the tax form associated with this filing
jurisdiction:
type:
- string
- 'null'
description: The tax jurisdiction this filing is for. A two-letter state code, or US for federal.
agency_name:
type:
- string
- 'null'
description: The name of the tax agency this filing is submitted to
period:
type:
- string
- 'null'
description: Humanized representation of the filing period (e.g. "Q1 2026", "2026", "December 2026")
period_start:
type:
- string
- 'null'
description: The start date of the period this filing covers
period_end:
type:
- string
- 'null'
description: The end date of the period this filing covers
due_date:
type:
- string
- 'null'
description: The date this filing is due
filed_at:
type:
- string
- 'null'
description: The timestamp this filing was filed, if it has been filed
is_amendment:
type: boolean
description: Whether this filing is an amendment to a previously filed filing
amends_filing_uuid:
type:
- string
- 'null'
description: The unique identifier of the filing this filing amends, if is_amendment is true
status:
type: string
description: The current status of the tax filing
enum:
- not_started
- in_progress
- blocked
- accepted
- not_required
- failed
status_updated_at:
type:
- string
- 'null'
description: The timestamp the status was last updated, if known
form_uuid:
type:
- string
- 'null'
description: Unique identifier of the rendered PDF form for this filing, if one has been generated. Fetch the PDF via GET /v1/forms/{form_uuid}/pdf
required:
- uuid
- company_uuid
- form_title
- is_amendment
- status
Tax-Filing-List:
type: array
items:
"$ref": "#/components/schemas/Tax-Filing"
x-examples:
example:
- uuid: 11111111-1111-1111-1111-111111111111
company_uuid: f0e1d2c3-b4a5-6789-0fed-cba987654321
form_title: Quarterly Contribution Return and Report of Wages
jurisdiction: CA
agency_name: California Employment Development Department (EDD)
period: Q1 2026
period_start: '2026-01-01'
period_end: '2026-03-31'
due_date: '2026-04-30'
filed_at:
is_amendment: false
amends_filing_uuid:
status: failed
status_updated_at: '2026-04-20T14:12:33.000Z'
form_uuid:
- uuid: 33333333-3333-3333-3333-333333333333
company_uuid: f0e1d2c3-b4a5-6789-0fed-cba987654321
form_title: Employer's Quarterly Federal Tax Return
jurisdiction: US
agency_name: Internal Revenue Service
period: Q1 2026
period_start: '2026-01-01'
period_end: '2026-03-31'
due_date: '2026-04-30'
filed_at: '2026-04-12T16:30:25.000Z'
is_amendment: false
amends_filing_uuid:
status: accepted
status_updated_at: '2026-04-12T16:30:25.000Z'
form_uuid: 22222222-2222-2222-2222-222222222222
Tax-Payment:
type: object
description: Representation of a tax payment made by Gusto to a tax agency on behalf of a company
x-examples:
example:
uuid: 44444444-4444-4444-4444-444444444444
company_uuid: f0e1d2c3-b4a5-6789-0fed-cba987654321
agency_name: Internal Revenue Service
jurisdiction: US
period_start: '2026-01-01'
period_end: '2026-03-31'
due_date: '2026-04-30'
payment_sent_on: '2026-04-12'
amount: '1325.00'
amount_paid: '1325.00'
line_items:
- payroll_uuid: 55555555-5555-5555-5555-555555555555
unique_tax_id: 00-000-0000-FIT-000
amount: '1325.00'
properties:
uuid:
type: string
description: Unique identifier of the tax payment
company_uuid:
type: string
description: Unique identifier of the company to which the tax payment belongs
agency_name:
type:
- string
- 'null'
description: The name of the tax agency this payment is submitted to. Null for legacy tax payments whose agent has no reference-data agency.
jurisdiction:
type:
- string
- 'null'
description: The tax jurisdiction this payment is for. A two-letter state code, or US for federal. Null for legacy tax payments whose agent has no reference-data agency.
period_start:
type:
- string
- 'null'
format: date
description: The start date of the period this payment covers. Null for legacy tax payments where the period start was never recorded.
period_end:
type: string
format: date
description: The end date of the period this payment covers
due_date:
type:
- string
- 'null'
format: date
description: The date this payment is due. Null for legacy tax payments where the due date was never recorded.
payment_sent_on:
type:
- string
- 'null'
format: date
description: The date Gusto submitted this payment to the tax agency. It is null until submitted, and also if the payment is returned or cancelled after being sent. It is not guaranteed to stay set once populated.
amount:
type: string
format: float
description: Total amount owed for this tax payment. Can be negative for corrections, refunds, or credits.
amount_paid:
type: string
format: float
description: Amount paid toward this tax payment so far, sourced from the payment's running balance. "0.00" until paid; equal to `amount` once fully paid.
line_items:
type: array
description: The payroll tax liabilities that make up this payment. Empty array when the payment has no associated payroll taxes. Only included in the response of GET /v1/companies/{company_uuid}/tax_payments/{uuid}. It is omitted from the list endpoint response.
items:
"$ref": "#/components/schemas/Tax-Payment-Line-Item"
required:
- uuid
- company_uuid
- agency_name
- jurisdiction
- period_start
- period_end
- due_date
- amount
- amount_paid
Tax-Payment-Line-Item:
type: object
description: A single payroll tax liability rolled up into a tax payment
properties:
payroll_uuid:
type: string
description: Unique identifier of the payroll this liability came from
unique_tax_id:
type: string
description: Unique identifier of the tax type this liability is for
amount:
type: string
format: float
description: The amount of this liability included in the tax payment
required:
- payroll_uuid
- unique_tax_id
- amount
Tax-Payment-List:
type: array
items:
"$ref": "#/components/schemas/Tax-Payment"
x-examples:
example:
- uuid: 44444444-4444-4444-4444-444444444444
company_uuid: f0e1d2c3-b4a5-6789-0fed-cba987654321
agency_name: Internal Revenue Service
jurisdiction: US
period_start: '2026-01-01'
period_end: '2026-03-31'
due_date: '2026-04-30'
payment_sent_on: '2026-04-12'
amount: '1325.00'
amount_paid: '1325.00'
- uuid: 66666666-6666-6666-6666-666666666666
company_uuid: f0e1d2c3-b4a5-6789-0fed-cba987654321
agency_name: Illinois Department of Revenue
jurisdiction: IL
period_start: '2026-01-01'
period_end: '2026-03-31'
due_date: '2026-04-30'
payment_sent_on:
amount: '200.00'
amount_paid: '0.00'
securitySchemes:
CompanyAccessAuth:
type: http
scheme: bearer
description: Company-level authentication
SystemAccessAuth:
type: http
scheme: bearer
description: System-level authentication
paths:
"/v1/companies/{company_uuid}/ach_transactions":
get:
summary: Get all ACH transactions for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: contractor_payment_uuid
in: query
required: false
description: The UUID of the contractor payment
schema:
type: string
- name: payroll_uuid
in: query
required: false
description: The UUID of the payroll
schema:
type: string
- name: transaction_type
in: query
required: false
description: Used to filter the ACH transactions to only include those with a specific transaction type, such as "Credit employee pay".
schema:
type: string
- name: payment_direction
in: query
required: false
description: Used to filter the ACH transactions to only include those with a specific payment direction, either "credit" or "debit".
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-ach-transactions
security:
- CompanyAccessAuth: []
description: |-
Fetches all ACH transactions for a company.
scope: `ach_transactions:read`
tags:
- ACH Transactions
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Ach-Transaction-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: achTransactions
x-speakeasy-name-override: getAll
"/v1/companies/{company_id}/admins":
get:
summary: Get all the admins at a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-admins
security:
- CompanyAccessAuth: []
description: |-
Returns a list of all the admins at a company
scope: `company_admin:read`
tags:
- Companies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Admin"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: listAdmins
post:
summary: Create an admin for the company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-admins
security:
- CompanyAccessAuth: []
description: |-
Creates a new admin for a company.
If the email matches an existing user, this will create an admin account for the current user. Otherwise, this will create a new user.
scope: `company_admin:write`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Admin"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Admin-Create-Request"
required: true
x-speakeasy-name-override: createAdmin
"/v1/benefits":
get:
summary: Get all supported benefits
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: get-v1-benefits
security:
- CompanyAccessAuth: []
description: |-
Returns all benefits supported by Gusto. The benefit object in Gusto contains high level information about a particular benefit type and its tax considerations. When companies choose to offer a benefit, they are creating a Company Benefit object associated with a particular benefit.
scope: `benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Supported-Benefit-List"
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: getAll
"/v1/benefits/{benefit_id}":
get:
summary: Get a supported benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: benefit_id
in: path
description: The benefit type in Gusto.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-benefits-benefit_id
security:
- CompanyAccessAuth: []
description: |-
Returns a benefit supported by Gusto. The benefit object in Gusto contains high level information about a particular benefit type and its tax considerations. When companies choose to offer a benefit, they are creating a Company Benefit object associated with a particular benefit.
scope: `benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Supported-Benefit"
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: getSupported
"/v1/benefits/{benefit_id}/requirements":
get:
summary: Get benefit fields requirements by benefit type
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: benefit_id
in: path
description: The benefit type in Gusto.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-benefits-benefits_id-requirements
security:
- CompanyAccessAuth: []
description: |-
Returns the field requirements for a given benefit type.
scope: `benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Benefit-Type-Requirements"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: getRequirements
"/v1/bulk_reports":
post:
summary: Create a bulk report batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-bulk_reports
security:
- SystemAccessAuth: []
description: "Triggers asynchronous generation of up to 25 reports across companies the partner is mapped to. Each `batch` item is a `custom_report` (same parameters as [create a custom report](https://docs.gusto.com/embedded-payroll/reference/post-companies-company_uuid-reports)) or a `general_ledger` report (same parameters as [create a general ledger report](https://docs.gusto.com/embedded-payroll/reference/post-payrolls-payroll_uuid-reports-general_ledger)), keyed by `company_uuid` and `report_type`. Items are validated synchronously; if any is invalid, the entire batch is rejected.\n\nPoll the [bulk report GET endpoint](https://docs.gusto.com/embedded-payroll/reference/get-v1-bulk_reports-request_uuid) with the returned `uuid` for status and the report URL, which is valid for 10 minutes.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `company_reports:write`"
tags:
- Reports
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Create-Bulk-Report"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Bulk-Report-Body"
required: true
"/v1/bulk_reports/{request_uuid}":
get:
summary: Get a bulk report batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: request_uuid
in: path
description: The UUID of the bulk report batch.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-bulk_reports-request_uuid
security:
- SystemAccessAuth: []
description: "Get a bulk report batch's status and results given the `request_uuid`. While in progress, only batch metadata is returned; once complete, it also includes a signed `report_url` (a zip of all generated reports, valid for 10 minutes) and a per-company breakdown.\n\nReports containing PHI are inaccessible with `company_reports:read:tier_2_only` data scope.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `company_reports:read`"
tags:
- Reports
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Bulk-Report"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_id}":
get:
summary: Get a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies
security:
- CompanyAccessAuth: []
description: |-
Get a company.
The employees:read scope is required to return home_address and non-work locations.
The company_admin:read scope is required to return primary_payroll_admin.
The signatories:read scope is required to return primary_signatory.
scope: `companies:read`
tags:
- Companies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Company"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
put:
summary: Update a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies
security:
- CompanyAccessAuth: []
description: |-
Update a company.
scope: `companies:write`
tags:
- Companies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Company"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- contractor_only
properties:
contractor_only:
type: boolean
description: Whether the company only supports contractors. Must be updated in order for the company to start supporting W-2 employees. Can only be updated from true to false. Note that updating this value will require additional onboarding steps to be completed in order for the company to support W-2 employees.
required: true
x-speakeasy-name-override: update
"/v1/companies/{company_id}/attachments":
get:
summary: Get List of Company Attachments
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-attachments
security:
- CompanyAccessAuth: []
description: |-
Retrieve a list of all the attachments uploaded by the company.
### Related guides
- [Manage company attachments](doc:manage-company-attachments)
scope: `company_attachments:read`
tags:
- Company Attachment
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Company-Attachment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyAttachments
x-speakeasy-name-override: getList
post:
summary: Create Company Attachment and Upload File
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-attachment
security:
- CompanyAccessAuth: []
description: |-
Upload a file and create a company attachment. We recommend uploading PDF files for optimal compatibility. However, the following file types are allowed: .qbb, .qbm, .gif, .jpg, .png, .pdf, .xls, .xlsx, .doc and .docx.
### Related guides
- [Manage company attachments](doc:manage-company-attachments)
scope: `company_attachments:write`
tags:
- Company Attachment
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Attachment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
multipart/form-data:
schema:
"$ref": "#/components/schemas/Company-Attachment-Create-Request-Body"
required: true
x-speakeasy-group: companyAttachments
x-speakeasy-name-override: create
"/v1/companies/{company_id}/attachments/{company_attachment_uuid}":
get:
summary: Get Company Attachment Details
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: company_attachment_uuid
in: path
description: The UUID of the company attachment
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-attachment
security:
- CompanyAccessAuth: []
description: |-
Retrieve the detail of an attachment uploaded by the company.
### Related guides
- [Manage company attachments](doc:manage-company-attachments)
scope: `company_attachments:read`
tags:
- Company Attachment
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Attachment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyAttachments
x-speakeasy-name-override: getDetails
"/v1/companies/{company_id}/attachments/{company_attachment_uuid}/download_url":
get:
summary: Get a temporary url to download the Company Attachment file
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: company_attachment_uuid
in: path
description: The UUID of the company attachment
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-attachment-url
security:
- CompanyAccessAuth: []
description: |-
Retrieve a temporary url to download an attachment file uploaded by the company.
### Related guides
- [Manage company attachments](doc:manage-company-attachments)
scope: `company_attachments:read`
tags:
- Company Attachment
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Attachment-Download-Url"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyAttachment
x-speakeasy-name-override: getDownloadUrl
"/v1/companies/{company_id}/bank_accounts":
get:
summary: Get all company bank accounts
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-bank-accounts
security:
- CompanyAccessAuth: []
description: |-
Returns company bank accounts. Currently, we only support a single default bank account per company.
scope: `company_bank_accounts:read`
tags:
- Bank Accounts
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Company-Bank-Account"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: bankAccounts
x-speakeasy-name-override: get
post:
summary: Create a company bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-bank-accounts
security:
- CompanyAccessAuth: []
description: "This endpoint creates a new company bank account.\n\nUpon being created, two verification deposits are automatically sent to the bank account, and the bank account's verification_status is 'awaiting_deposits'.\n\nWhen the deposits are successfully transferred, the verification_status changes to 'ready_for_verification', at which point the verify endpoint can be used to verify the bank account.\nAfter successful verification, the bank account's verification_status is 'verified'.\n\n\n>\U0001F6A7 Warning\n>\n> If a default bank account exists, it will be disabled and the new bank account will replace it as the company's default funding method.\n>\n> A new bank account cannot replace the default if the current default has unprocessed payments. In that case, a 422 `invalid_operation` error is returned. To resolve, fund or cancel the pending payments first.\n\nscope: `company_bank_accounts:write`"
tags:
- Bank Accounts
x-gusto-integration-type:
- embedded
responses:
'200':
description: Bank account unchanged
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Bank-Account"
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Bank-Account"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: Cannot replace default bank account with unfunded payments
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Bank-Account-Request"
required: true
x-speakeasy-group: bankAccounts
x-speakeasy-name-override: create
"/v1/companies/{company_id}/bank_accounts/{bank_account_id}":
delete:
summary: Delete a company bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: bank_account_id
in: path
description: The UUID of the company bank account
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-companies-company_id-bank-accounts-bank_account_id
security:
- CompanyAccessAuth: []
description: |-
This endpoint disables a company bank account.
A bank account cannot be disabled if it is used for any unprocessed payments.
scope: `company_bank_accounts:write`
tags:
- Bank Accounts
x-gusto-integration-type:
- embedded
responses:
'204':
description: successful
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: Cannot delete bank account with unfunded payments
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/companies/{company_id}/bank_accounts/{bank_account_uuid}/verify":
put:
summary: Verify a company bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: bank_account_uuid
in: path
description: The UUID of the company bank account
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-bank-accounts-verify
security:
- CompanyAccessAuth: []
description: |-
Verify a company bank account by confirming the two micro-deposits sent to the bank account.
Note that the order of the two deposits specified in request parameters does not matter.
There's a maximum of 5 verification attempts, after which we will automatically initiate a new set of micro-deposits and require the bank account to be verified with the new micro-deposits.
### Bank account verification in demo
In the demo environment, use the `POST /v1/companies/{company_id}/bank_accounts/{bank_account_uuid}/send_test_deposits` endpoint to simulate the micro-deposits transfer and return the two amounts in the response. You can call this endpoint as many times as you wish to retrieve the values of the two micro-deposits.
### Webhooks
- `company.bank_account.verified`: Fires when the company bank account is successfully verified.
### Related guides
- [Manage company bank accounts](doc:manage-company-bank-accounts)
- [Bank Account Events](doc:bank-account-events)
scope: `company_bank_accounts:write`
tags:
- Bank Accounts
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Bank-Account"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Bank-Account-Verify-Request"
required: true
x-speakeasy-group: bankAccounts
x-speakeasy-name-override: verify
"/v1/companies/{company_id}/company_benefits":
get:
summary: Get benefits for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: active
in: query
required: false
description: Whether the benefit is currently active
schema:
type: boolean
- name: enrollment_count
in: query
required: false
description: Whether to return employee enrollment count
schema:
type: boolean
- name: benefit_type
in: query
required: false
description: Filter by benefit type. Comma-separated list of benefit type IDs, i.e. `?benefit_type=5,105`
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-company_benefits
security:
- CompanyAccessAuth: []
description: |-
Company benefits represent the benefits that a company is offering to employees. This ties together a particular supported benefit with the company-specific information for the offering of that benefit.
Note that company benefits can be deactivated only when no employees are enrolled.
Benefits containing PHI are only visible to applications with the `company_benefits:read:phi` scope.
scope: `company_benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Company-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: list
post:
summary: Create a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-company_benefits
security:
- CompanyAccessAuth: []
description: |-
Company benefits represent the benefits that a company is offering to employees. This ties together a particular supported benefit with the company-specific information for the offering of that benefit.
Note that company benefits can be deactivated only when no employees are enrolled.
When the application has the `company_benefits:write:benefit_type_limited` data scope, the application can only create company benefits for benefit types that are permitted for the application.
scope: `company_benefits:write`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Benefit-Create-Request"
required: true
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: create
"/v1/company_benefits/{company_benefit_id}":
get:
summary: Get a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
- name: with_employee_benefits
in: query
required: false
description: Whether to return employee benefits associated with the benefit
schema:
type: boolean
- name: include
in: query
required: false
schema:
type: string
enum:
- all_benefits
description: |-
Available options:
- all_benefits: If with_employee_benefits=true, include all effective dated benefits for each employee instead of only the current benefits.
x-gusto-rswag: true
operationId: get-v1-company_benefits-company_benefit_id
security:
- CompanyAccessAuth: []
description: |-
Company benefits represent the benefits that a company is offering to employees. This ties together a particular supported benefit with the company-specific information for the offering of that benefit.
Note that company benefits can be deactivated only when no employees are enrolled.
When with_employee_benefits parameter with true value is passed, employee_benefits:read scope is required to return employee_benefits.
scope: `company_benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Benefit-With-Employee-Benefits"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: get
put:
summary: Update a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-company_benefits-company_benefit_id
security:
- CompanyAccessAuth: []
description: |-
Company benefits represent the benefits that a company is offering to employees. This ties together a particular supported benefit with the company-specific information for the offering of that benefit.
Note that company benefits can be deactivated only when no employees are enrolled.
When the application has the `company_benefits:write:benefit_type_limited` data scope, the application can only update company benefits for benefit types that are permitted for the application.
scope: `company_benefits:write`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Benefit-Update-Request"
required: true
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: update
delete:
summary: Delete a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-company_benefits-company_benefit_id
security:
- CompanyAccessAuth: []
description: |-
The following must be true in order to delete a company benefit
- There are no employee benefits associated with the company benefit
- There are no payroll items associated with the company benefit
- The benefit is not managed by a Partner or by Gusto (type must be 'External')
When the application has the `company_benefits:write:benefit_type_limited` data scope, the application can only delete company benefits for benefit types that are permitted for the application.
scope: `company_benefits:write`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: delete
x-speakeasy-group: companyBenefits
"/v1/company_benefits/{company_benefit_id}/contribution_exclusions":
get:
summary: Get contribution exclusions for a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company_benefits-company_benefit_id-contribution_exclusions
security:
- CompanyAccessAuth: []
description: |-
Returns all contributions for a given company benefit and whether they are excluded or not.
Currently this endpoint only works for 401-k and Roth 401-k benefit types.
scope: `company_benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Contribution-Exclusion"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
put:
summary: Update contribution exclusions for a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-company_benefits-company_benefit_id-contribution_exclusions
security:
- CompanyAccessAuth: []
description: |-
Updates contribution exclusions for a given company benefit.
Currently this endpoint only works for 401-k and Roth 401-k benefit types.
scope: `company_benefits:write`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Contribution-Exclusion"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contribution-Exclusion-Update-Request"
required: true
"/v1/company_benefits/{company_benefit_id}/employee_benefits":
get:
summary: Get all employee benefits for a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: include
in: query
required: false
schema:
type: string
enum:
- all_benefits
description: |-
Available options:
- all_benefits: Include all effective dated benefits for each employee instead of only the current benefits.
x-gusto-rswag: true
operationId: get-v1-company_benefits-company_benefit_id-employee_benefits
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee's enrollment.
Returns an array of all employee benefits enrolled for this company benefit.
Benefits containing PHI are only visible to applications with the `employee_benefits:read:phi` scope.
scope: `employee_benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Employee-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getEmployeeBenefits
x-speakeasy-group: companyBenefits
put:
summary: Bulk update employee benefits for a company benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-company_benefits-company_benefit_id-employee_benefits
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee's enrollment.
Create or update(if the employee is already enrolled in the company benefit previously) an employee benefit for the company benefit.
Benefits containing PHI are only visible to applications with the `employee_benefits:read:phi` scope.
When the application has the `employee_benefits:write:benefit_type_limited` data scope, the application can only create or update employee benefits for benefit types that are permitted for the application.
scope: `employee_benefits:write`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Employee-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Benefit-Bulk-Update-Request"
required: true
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: updateEmployeeBenefits
"/v1/company_benefits/{company_benefit_id}/summary":
get:
summary: Get company benefit summary by company benefit id.
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_benefit_id
in: path
description: The UUID of the company benefit
required: true
schema:
type: string
- name: start_date
in: query
required: false
description: The start date for which to retrieve company benefit summary
example: '2022-01-01'
schema:
type: string
- name: end_date
in: query
required: false
description: The end date for which to retrieve company benefit summary. If left empty, defaults to today's date.
example: '2022-12-31'
schema:
type: string
- name: detailed
in: query
required: false
description: Display employee payroll item summary
schema:
type: boolean
x-gusto-rswag: true
operationId: get-v1-benefits-company_benefit_id-summary
security:
- CompanyAccessAuth: []
description: |-
Returns summary benefit data for the requested company benefit id.
Benefits containing PHI are only visible to applications with the `company_benefits:read:phi` scope.
scope: `company_benefits:read`
tags:
- Company Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Benefit summary response
content:
application/json:
schema:
"$ref": "#/components/schemas/Benefit-Summary"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyBenefits
x-speakeasy-name-override: getSummary
"/v1/companies/{company_id}/custom_fields":
get:
summary: Get the custom fields of a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-custom_fields
security:
- CompanyAccessAuth: []
description: |-
Returns a list of the custom fields of the company. Useful when you need to know the schema of custom fields for an entire company.
scope: `companies:read`
tags:
- Companies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Custom-Field-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getCustomFields
"/v1/companies/{company_id}/forms":
get:
summary: Get all company forms
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(created_at|name|year|quarter|draft|document_content_type)(:(asc|desc))?(,(created_at|name|year|quarter|draft|document_content_type)(:(asc|desc))?)*$"
example: created_at:asc
description: 'Sort by one or more fields. Options: created_at, name, year, quarter, draft, document_content_type. Append `:asc` or `:desc` to specify direction (e.g., `created_at:asc`). Defaults to ascending.'
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-company-forms
security:
- CompanyAccessAuth: []
description: |-
Get a list of all company's forms
### Related guides
- [Company Forms](doc:company-form)
scope: `company_forms:read`
tags:
- Company Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getAll
x-speakeasy-group: companyForms
"/v1/forms/{form_id}":
get:
summary: Get a company form
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company-form
security:
- CompanyAccessAuth: []
description: |-
Get a company form
scope: `company_forms:read`
tags:
- Company Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companyForms
x-speakeasy-name-override: get
"/v1/forms/{form_id}/pdf":
get:
summary: Get a company form pdf
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company-form-pdf
security:
- CompanyAccessAuth: []
description: |-
Get the link to the form PDF
scope: `company_forms:read`
tags:
- Company Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Form-Pdf"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getPdf
x-speakeasy-group: companyForms
"/v1/forms/{form_id}/sign":
put:
summary: Sign a company form
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
- name: x-gusto-client-ip
in: header
required: false
description: Optional header to supply the IP address. This can be used to supply the IP address for signature endpoints instead of the signed_by_ip_address parameter.
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-company-form-sign
security:
- CompanyAccessAuth: []
description: |-
Sign a company form. Company forms must be signed by the company signatory.
scope: `company_forms:sign`
tags:
- Company Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
signature_text:
type: string
description: The signature
agree:
type: boolean
description: Whether you agree to sign electronically
signed_by_ip_address:
type: string
description: The IP address of the signatory who signed the form. Both IPv4 AND IPv6 are supported. You must provide the IP address with either this parameter OR you can leave out this parameter and set the IP address in the request header using the `x-gusto-client-ip` header instead.
required:
- signature_text
- agree
required: true
x-speakeasy-group: companyForms
x-speakeasy-name-override: sign
"/v1/companies/{company_id}/industry_selection":
get:
summary: Get a company industry selection
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company-industry
security:
- CompanyAccessAuth: []
description: |-
Returns the industry classification for a company, including NAICS code, SIC codes, and industry title.
scope: `companies:read`
tags:
- Industry Selection
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Industry"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: industrySelection
x-speakeasy-name-override: get
put:
summary: Update a company industry selection
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-company-industry
security:
- CompanyAccessAuth: []
description: |-
Update the industry classification for a company by passing in a [NAICS code](https://www.naics.com).
Optionally provide an industry title and [SIC codes](https://siccode.com/). If you do not provide SIC codes,
we will use the NAICS code to perform an internal lookup.
Our UI leverages [Middesk API](https://docs.middesk.com/reference/introduction) to determine industry
classification codes.
scope: `companies:write`
tags:
- Industry Selection
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Industry"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Industry-Selection-Required-Body"
required: true
x-speakeasy-group: industrySelection
x-speakeasy-name-override: update
"/v1/companies/{company_uuid}/notifications":
get:
summary: Get notifications for company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company for which you would like to return notifications
required: true
schema:
type: string
- name: status
in: query
schema:
type: string
enum:
- open
- expired
- resolved
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-company-notifications
security:
- CompanyAccessAuth: []
description: |-
Returns all notifications relevant for the given company.
scope: `notifications:read`
tags:
- Notifications
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Notifications-List"
"/v1/companies/{company_uuid}/onboarding_status":
get:
summary: Get company onboarding status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
required: true
schema:
type: string
- name: additional_steps
in: query
required: false
example: external_payroll
description: Comma-delimited string of additional onboarding steps to include. Currently only supports the value "external_payroll".
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company-onboarding-status
security:
- CompanyAccessAuth: []
description: |-
Retrieves a company's onboarding status, including whether onboarding is complete and the list of
required onboarding steps with their respective completion state.
scope: `company_onboarding_status:read`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Onboarding-Status"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getOnboardingStatus
"/v1/companies/{company_uuid}/finish_onboarding":
put:
summary: Finish company onboarding
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company-finish-onboarding
security:
- CompanyAccessAuth: []
description: |-
Finalize a company's onboarding process.
### Approve a company in demo
After a company is finished onboarding, Gusto requires an additional step to review and approve that company.
The company onboarding status is "onboarding_completed": false, until the API call is made to finish company
onboarding. In production environments, this step is required for risk-analysis purposes.
We provide the endpoint `PUT '/v1/companies/{company_uuid}/approve'` to facilitate company approvals in the demo environment.
```shell
PUT '/v1/companies/89771af8-b964-472e-8064-554dfbcb56d9/approve'
# Response: Company object, with company_status: 'Approved'
```
scope: `companies:write`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Onboarding-Status"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: finishOnboarding
"/v1/companies/{company_uuid}/payment_configs":
get:
summary: Get a company's payment configs
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-company-payment-configs
security:
- CompanyAccessAuth: []
description: |-
Get payment speed configurations for the company: payment speed (1-day, 2-day, or 4-day ACH), fast payment limit, partner-owned disbursement setting, and earned fast ACH blockers when applicable. 1-day is only available to partners that opt in.
### Related guides
- [Payroll Processing Speeds](doc:2-day-vs-4-day)
scope: `company_payment_configs:read`
tags:
- Payment Configs
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payment-Configs"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
x-speakeasy-group: paymentConfigs
put:
summary: Update a company's payment configs
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-company-payment-configs
security:
- CompanyAccessAuth: []
description: |-
Update payment speed, fast payment limit, and/or partner-owned disbursement for a company.
At least one of `payment_speed`, `fast_payment_limit`, or `partner_owned_disbursement` is required.
1-day payment speed is only applicable to partners that opt in. 1-day is not allowed when AutoPilot is enabled.
### Related guides
- [Payroll Processing Speeds](doc:2-day-vs-4-day)
scope: `company_payment_configs:write`
tags:
- Payment Configs
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payment-Configs"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Payment-Configs-Update-Request"
required: true
x-speakeasy-group: paymentConfigs
x-speakeasy-name-override: update
"/v1/companies/{company_uuid}/suspensions":
get:
summary: Get suspensions for this company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: get-companies-company_uuid-suspensions
security:
- CompanyAccessAuth: []
description: "Get existing suspension records for this company. A company may have multiple suspension records if they have suspended their Gusto account more than once.\n\n>\U0001F4D8 To check if company is already suspended\n>\n> To determine if a company is _currently_ suspended, use the `is_suspended` and `company_status` fields in the [Get a company](https://docs.gusto.com/embedded-payroll/reference/get-v1-companies) endpoint.\n\nscope: `company_suspensions:read`"
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful response
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Suspension-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: companies.suspensions
x-speakeasy-name-override: get
post:
summary: Suspend a company's account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-companies-company_uuid-suspensions
security:
- CompanyAccessAuth: []
description: |-
Use this endpoint to suspend a company. After suspension, company will no longer be able to run payroll but will retain access to their information, such as retrieving employee info or retrieving past payrolls.
scope: `company_suspensions:write`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful response
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Suspension"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Suspension-Creation-Errors"
requestBody:
content:
application/json:
schema:
type: object
required:
- file_quarterly_forms
- file_yearly_forms
- reconcile_tax_method
- reason
properties:
file_quarterly_forms:
type: boolean
description: Should Gusto file quarterly tax forms on behalf of the company? The correct answer can depend on why the company is suspending their account, and how taxes are being reconciled.
file_yearly_forms:
type: boolean
description: Should Gusto file yearly tax forms on behalf of the company? The correct answer can depend on why the company is suspending their account, and how taxes are being reconciled.
reconcile_tax_method:
type: string
enum:
- pay_taxes
- refund_taxes
description: How Gusto will handle taxes already collected.
comments:
type: string
description: User-supplied comments describing why they are suspending their account. Required if the user is leaving for another provider and selects "other" instead of a defined provider.
reason:
type: string
enum:
- switching_provider
- shutting_down
- acquired
- no_more_employees
- changing_ein_or_entity_type
description: "Explanation for why the company is suspending their account.\n\n> \U0001F6A7 FEIN or entity type changes require Customer Support\n> If a company is switching FEIN or changing their entity type, this change must be performed by Gusto Customer Support and cannot be performed via the API at this time.\n"
leaving_for:
type: string
enum:
- accountant
- adp
- adp_total_source
- bamboo_hr
- bank_or_financial_institution
- check
- deel
- gusto_com
- homebase
- insperity
- intuit_or_quickbooks
- justworks
- manual
- namely
- onpay
- other
- other_peo
- oyster
- patriot
- paychex
- paycom
- paylocity
- remote
- rippling
- square
- surepayroll
- toast
- trinet
- velocity_global
- zenefits
description: "The competitor the company is switching to. Required if `reason` is `'switching_provider'`.\n\n> \U0001F6A7 Switching to Gusto requires Customer Support\n> If `'gusto_com'` is selected, this change must be completed by Gusto Customer Support and cannot be performed via the API. This endpoint will return a 422 error in that case.\n"
required: true
x-speakeasy-group: companies.suspensions
x-speakeasy-name-override: suspend
"/v1/companies/{company_uuid}/tax_requirements":
get:
summary: Get all tax requirements for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-tax_requirements
security:
- CompanyAccessAuth: []
description: |-
Retrieves all states for which a company has tax requirements, along with a boolean indicating whether tax setup
is complete for each state. Use this to determine which states still need tax setup during company onboarding.
scope: `company_tax_requirements:read`
tags:
- Tax Requirements
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Tax-Requirement-States-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: taxRequirements
x-speakeasy-name-override: getAll
"/v1/companies/{company_uuid}/tax_requirements/{state}":
get:
summary: Get tax requirements for a state
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: state
in: path
required: true
description: The two-letter state abbreviation
example: CA
schema:
type: string
- name: scheduling
in: query
required: false
description: When true, return "new" requirement sets with valid `effective_from` dates that are available to save new effective-dated values.
schema:
type: boolean
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-tax_requirements-state
security:
- CompanyAccessAuth: []
description: |-
Retrieves the detailed tax requirements for a specific state. The response includes requirement sets grouped by
category (e.g., registrations, tax rates, deposit schedules), each containing individual requirements with their
current values, labels, and metadata describing the expected input format.
Use this to build dynamic UIs for tax setup or to read the current tax configuration for a state.
scope: `company_tax_requirements:read`
tags:
- Tax Requirements
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Tax-Requirements-State"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: taxRequirements
x-speakeasy-name-override: get
put:
summary: Update tax requirements for a state
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: state
in: path
required: true
description: The two-letter state abbreviation
example: CA
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_uuid-tax_requirements-state
security:
- CompanyAccessAuth: []
description: |-
Updates the tax requirement answers for a specific state. Submit answers to the requirement questions returned
by [GET /v1/companies/{company_uuid}/tax_requirements/{state}](ref:get-v1-companies-company_uuid-tax_requirements-state).
### Prerequisites
1. Retrieve current requirements via [GET /v1/companies/{company_uuid}/tax_requirements/{state}](ref:get-v1-companies-company_uuid-tax_requirements-state)
2. Ensure that each requirement set that you're updating includes the correct `key`, `state`, and `effective_from` values from the GET response
scope: `company_tax_requirements:write`
tags:
- Tax Requirements
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
requirement_sets:
"$ref": "#/components/schemas/Tax-Requirement-Set-Update"
required: true
x-speakeasy-group: taxRequirements
x-speakeasy-name-override: updateState
"/v1/companies/{company_id}/federal_tax_details":
get:
summary: Get a company's federal tax details
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-federal_tax_details
security:
- CompanyAccessAuth: []
description: |-
Retrieves a company's federal tax details including EIN verification status, tax payer type, filing form, and other federal tax configuration.
scope: `company_federal_taxes:read`
tags:
- Federal Tax Details
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Federal-Tax-Details"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: federalTaxDetails
x-speakeasy-name-override: get
put:
summary: Update a company's federal tax details
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-federal_tax_details
security:
- CompanyAccessAuth: []
description: |-
Updates a company's federal tax details including EIN, legal name, tax payer type, filing form, and S-Corp
taxation status. This information is required to onboard a company for use with Gusto Embedded Payroll.
### Prerequisites
Before calling this endpoint, retrieve the current federal tax details and `version` via [GET /v1/companies/{company_id}/federal_tax_details](ref:get-v1-companies-company_id-federal_tax_details)
### Webhooks
- `company.updated`: Fires when federal tax details for a company are successfully updated
**Setup:** [POST /v1/webhook_subscriptions](ref:post-v1-webhook-subscription) with `subscription_types`: `["Company"]`
scope: `company_federal_taxes:write`
tags:
- Federal Tax Details
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Federal-Tax-Details"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'403':
description: Forbidden
content:
application/json:
schema:
"$ref": "#/components/schemas/Forbidden-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Federal-Tax-Details-Update"
required: true
x-speakeasy-group: federalTaxDetails
x-speakeasy-name-override: update
"/v1/jobs/{job_id}/compensations":
get:
summary: Get compensations for a job
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: job_id
in: path
description: The UUID of the job
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: include
in: query
required: false
schema:
type: string
enum:
- all_compensations
description: |
Available options:
- all_compensations: Include all effective dated compensations for each job instead of only the current compensation
x-gusto-rswag: true
operationId: get-v1-jobs-job_id-compensations
security:
- CompanyAccessAuth: []
description: |-
Compensations contain information on how much is paid out for a job. Jobs may have many compensations, but only one that is active. The current compensation is the one with the most recent `effective_date`.
*Note: Currently the API does not support creating multiple compensations per job - creating a compensation with the same job_uuid as another will fail with a relevant error.*
Use `flsa_status` to determine if an employee is eligible for overtime
By default the API returns only the current compensation - use the `include` parameter to return all compensations.
scope: `compensations:read`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Compensation"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getCompensations
x-speakeasy-group: jobsAndCompensations
post:
summary: Create a compensation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: job_id
in: path
description: The UUID of the job
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-compensations-compensation_id
security:
- CompanyAccessAuth: []
description: |-
Compensations contain information on how much is paid out for a job. Jobs may have many compensations, but only one that is active. The current compensation is the one with the most recent `effective_date`.
### Prerequisites
Before calling this endpoint:
1. A [job](ref:post-v1-jobs-job_id) must exist for the employee
### Webhooks
- `employee_job_compensation.created`: Fires when a compensation is successfully created
scope: `compensations:write`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Compensation"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Compensations-Request-Body"
required: true
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: createCompensation
"/v1/compensations/{compensation_id}":
get:
summary: Get a compensation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: compensation_id
in: path
description: The UUID of the compensation
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-compensations-compensation_id
security:
- CompanyAccessAuth: []
description: |-
Compensations contain information on how much is paid out for a job. Jobs may have many compensations, but only one that is active. The current compensation is the one with the most recent `effective_date`.
scope: `compensations:read`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Compensation"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: getCompensation
put:
summary: Update a compensation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: compensation_id
in: path
description: The UUID of the compensation
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-compensations-compensation_id
security:
- CompanyAccessAuth: []
description: |-
Compensations contain information on how much is paid out for a job. Jobs may have many compensations, but only one that is active. The current compensation is the one with the most recent `effective_date`.
### Webhooks
- `employee_job_compensation.updated`: Fires when a compensation is successfully updated
scope: `compensations:write`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Compensation"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Compensations-Update-Request-Body"
required: true
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: updateCompensation
delete:
summary: Delete a compensation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: compensation_id
in: path
description: The UUID of the compensation
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-compensations-compensation_id
security:
- CompanyAccessAuth: []
description: |-
Compensations contain information on how much is paid out for a job. Jobs may have many compensations, but only one that is active. The current compensation is the one with the most recent `effective_date`. This endpoint deletes a compensation for a job that hasn't been processed on payroll.
### Webhooks
- `employee_job_compensation.destroyed`: Fires when a compensation is successfully deleted
scope: `compensations:write`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: deleteCompensation
"/v1/contractors/{contractor_uuid}/bank_accounts":
get:
summary: Get all contractor bank accounts
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid-bank_accounts
security:
- CompanyAccessAuth: []
description: |-
Returns all contractor bank accounts.
scope: `contractor_payment_methods:read`
tags:
- Contractor Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Bank-Account-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getBankAccounts
x-speakeasy-group: contractorPaymentMethod
post:
summary: Create a contractor bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-contractors-contractor_uuid-bank_accounts
security:
- CompanyAccessAuth: []
description: |-
Creates a contractor bank account.
Note: We currently only support one bank account per contractor. Using this endpoint on a contractor who already has a bank account will just replace it.
scope: `contractor_payment_methods:write`
tags:
- Contractor Payment Method
x-gusto-integration-type:
- embedded
responses:
'201':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Bank-Account"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Bank-Account-Create-Request-Body"
required: true
x-speakeasy-group: contractorPaymentMethods
x-speakeasy-name-override: createBankAccount
"/v1/contractors/{contractor_uuid}/forms":
get:
summary: Get all contractor forms
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor-forms
security:
- CompanyAccessAuth: []
description: |-
Get a list of all contractor's forms
scope: `contractor_forms:read`
tags:
- Contractor Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Form_1099"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorForms
x-speakeasy-name-override: list
"/v1/contractors/{contractor_uuid}/forms/{form_id}":
get:
summary: Get a contractor form
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor-form
security:
- CompanyAccessAuth: []
description: |-
Get a contractor form
scope: `contractor_forms:read`
tags:
- Contractor Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Form_1099"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorForms
x-speakeasy-name-override: get
"/v1/contractors/{contractor_uuid}/forms/{form_id}/pdf":
get:
summary: Get the contractor form pdf
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor-form-pdf
security:
- CompanyAccessAuth: []
description: |-
Get the link to the form PDF
scope: `contractor_forms:read`
tags:
- Contractor Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Form-Pdf"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorForms
x-speakeasy-name-override: getPdf
"/v1/contractors/{contractor_uuid}/address":
get:
summary: Get a contractor address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid-address
security:
- CompanyAccessAuth: []
tags:
- Contractors
x-gusto-integration-type:
- embedded
description: |-
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`
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Address"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getAddress
put:
summary: Create or update a contractor's address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-contractors-contractor_uuid-address
security:
- CompanyAccessAuth: []
tags:
- Contractors
x-gusto-integration-type:
- embedded
description: "The address of a contractor is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity.\n\n> \U0001F6A7 Contractors can only have one address.\n>\n> When a contractor is created, an address is created for them by default. Updating the address will replace the existing address.\n\nscope: `contractors:write`"
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Address"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Address-Update-Body"
required: true
x-speakeasy-name-override: updateAddress
"/v1/companies/{company_id}/contractors/payment_details":
get:
summary: List contractor payment details
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company. This identifies the company whose contractor payment details you want to retrieve.
required: true
schema:
type: string
- name: contractor_uuid
in: query
required: false
description: Optional filter to get payment details for a specific contractor. When provided, the response will only include payment details for this contractor.
schema:
type: string
- name: contractor_payment_group_uuid
in: query
required: false
description: Optional filter to get payment details for contractors in a specific payment group. When provided, the response will only include payment details for contractors in this group.
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-contractors-payment_details
security:
- CompanyAccessAuth: []
description: |-
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`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Details-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_id}/contractor_payment_groups/preview":
post:
summary: Preview a contractor payment group
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-contractor_payment_groups-preview
security:
- CompanyAccessAuth: []
description: |-
Preview a group of contractor payments. Request will validate inputs and return preview of the contractor payment group including the expected `debit_date`. The `uuid` field will be null in the response.
The returned `creation_token` is a required parameter in order to create the contractor payment group.
scope: `payrolls:read`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'200':
description: Full contractor payment group object with null uuid
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Group-Preview"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided ID/UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- contractor_payments
properties:
contractor_payments:
type: array
items:
type: object
properties:
contractor_uuid:
type: string
description: The contractor receiving the payment
payment_method:
type: string
enum:
- Direct Deposit
- Check
- Historical Payment
default: Direct Deposit
wage:
type: string
format: float
description: If the contractor is on a fixed wage, this is the fixed wage payment for the contractor, regardless of hours worked
example: '5000.0'
hours:
type: string
format: float
example: '40.0'
description: If the contractor is on an hourly wage, this is the number of hours that the contractor worked for the payment
bonus:
type: string
format: float
example: '500.0'
description: If the contractor is on an hourly wage, this is the bonus the contractor earned
reimbursement:
type: string
format: float
example: '20.0'
description: Reimbursed wages for the contractor
check_date:
type: string
format: date
description: Date when payments should be processed
required: true
x-speakeasy-group: contractorPaymentGroups
x-speakeasy-name-override: preview
"/v1/contractor_payment_groups/{contractor_payment_group_uuid}/fund":
put:
summary: Fund a contractor payment group [DEMO]
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_payment_group_uuid
in: path
required: true
description: The UUID of the contractor payment group
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-contractor_payment_groups-contractor_payment_group_id-fund
security:
- CompanyAccessAuth: []
description: "> \U0001F6A7 Demo action\n> This action is only available in the Demo environment\n\nSimulate funding a contractor payment group. Funding only occurs automatically in the production environment when bank transactions are generated. Use this action in the demo environment to transition a contractor payment group's `status` from `Unfunded` to `Funded`. A `Funded` status is required for generating a contractor payment receipt.\n\nscope: `payrolls:run`"
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'200':
description: Full contractor payment group object
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Group"
'404':
description: |
Not Found
The requested contractor payment group does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: fund
x-speakeasy-group: contractorPaymentGroups
"/v1/companies/{company_id}/contractor_payment_groups":
get:
summary: Get contractor payment groups for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: start_date
in: query
required: false
description: The time period for which to retrieve contractor payment groups. Defaults to 6 months ago.
example: '2020-01-01'
schema:
type: string
- name: end_date
in: query
required: false
description: The time period for which to retrieve contractor payment groups. Defaults to today's date.
example: '2020-12-31'
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-contractor_payment_groups
security:
- CompanyAccessAuth: []
description: |-
Returns a list of minimal contractor payment groups within a given time period, including totals but not associated contractor payments.
scope: `payrolls:read`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'200':
description: List of Contractor Payment Groups
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Contractor-Payment-Group-With-Blockers"
'404':
description: |
Not Found
The requested company does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getList
x-speakeasy-group: contractorPaymentGroups
post:
summary: Create a contractor payment group
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-contractor_payment_groups
security:
- CompanyAccessAuth: []
description: |-
Pay a group of contractors. Information needed depends on the contractor's wage type (hourly vs fixed)
scope: `payrolls:run`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'201':
description: Full contractor payment group object
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Group"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested company does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- check_date
- contractor_payments
- creation_token
properties:
check_date:
type: string
format: date
description: The payment check date
example: '2020-01-01'
creation_token:
type: string
description: A token used to make contractor payment group creation idempotent. The string must be unique for each group you intend to create.
example: 1d532d13-8f61-4a57-ad3c-b5fac1c6e05e
submission_blockers:
type: array
description: Optional array of submission blockers with selected unblock options. Returned from the preview endpoint and can be submitted with selected_option to resolve blockers.
items:
type: object
properties:
blocker_type:
type: string
description: The type of blocker that is blocking the payment submission
selected_option:
type:
- string
- 'null'
description: The unblock option selected to resolve the submission blocker
message:
type: string
description: Optional message related to the blocker
options:
type: array
description: Optional array of additional options for the blocker
items:
type: object
properties:
type:
type: string
description: The type of option
message:
type: string
description: Message for the option
contractor_payments:
type: array
items:
type: object
properties:
contractor_uuid:
type: string
description: The contractor receiving the payment
payment_method:
type: string
enum:
- Direct Deposit
- Check
- Historical Payment
default: Direct Deposit
wage:
type: string
format: float
description: If the contractor is on a fixed wage, this is the fixed wage payment for the contractor, regardless of hours worked
example: '5000.0'
hours:
type: string
format: float
example: '40.0'
description: If the contractor is on an hourly wage, this is the number of hours that the contractor worked for the payment
bonus:
type: string
format: float
example: '500.0'
description: If the contractor is on an hourly wage, this is the bonus the contractor earned
reimbursement:
type: string
format: float
example: '20.0'
description: Reimbursed wages for the contractor
required: true
x-speakeasy-group: contractorPaymentGroups
x-speakeasy-name-override: create
"/v1/contractor_payment_groups/{contractor_payment_group_uuid}":
get:
summary: Get a contractor payment group
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_payment_group_uuid
in: path
required: true
description: The UUID of the contractor payment group
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor_payment_groups-contractor_payment_group_id
security:
- CompanyAccessAuth: []
description: |-
Returns a contractor payment group with all associated contractor payments.
scope: `payrolls:read`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful response
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Group"
'404':
description: |
Not Found
The requested contractor payment group does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorPaymentGroups
x-speakeasy-name-override: get
delete:
summary: Cancel a contractor payment group
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_payment_group_uuid
in: path
required: true
description: The UUID of the contractor payment group
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-contractor_payment_groups-contractor_payment_group_id
security:
- CompanyAccessAuth: []
description: |-
Cancels a contractor payment group and all associated contractor payments. All contractor payments must be cancellable, unfunded.
scope: `payrolls:run`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'204':
description: Successfully cancelled
'404':
description: |
Not Found
The requested contractor payment group does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when trying to cancel a payment group that is not in a cancellable state, such as one that has already been funded or processed.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: delete
x-speakeasy-group: contractorPaymentGroups
"/v1/contractor_payment_groups/{id}/partner_disbursements":
get:
summary: Get partner disbursements for a contractor payment group
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: id
in: path
required: true
description: The UUID of the contractor payment group
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor_payment_groups-id-partner_disbursements
security:
- CompanyAccessAuth: []
description: |-
Get partner disbursements for a specific contractor payment group.
scope: `partner_disbursements:read`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Group-Partner-Disbursements"
'404':
description: |
Not Found
The requested contractor payment group does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
patch:
summary: Update partner disbursements for a contractor payment group
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: id
in: path
required: true
description: The UUID of the contractor payment group
schema:
type: string
x-gusto-rswag: true
operationId: patch-v1-contractor_payment_groups-id-partner_disbursements
security:
- CompanyAccessAuth: []
description: |-
Update partner disbursements for a specific contractor payment group.
scope: `partner_disbursements:write`
tags:
- Contractor Payment Groups
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Group-Partner-Disbursements"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
disbursements:
type: array
items:
type: object
properties:
contractor_payment_uuid:
type: string
description: UUID of the contractor payment
example: 9f8e7d6c-5b4a-3928-1c2d-3e4f5a6b7c8d
payment_method:
type: string
enum:
- Direct Deposit
- Check
- Historical Payment
- Correction Payment
description: Payment method for the contractor
payment_status:
type: string
enum:
- Pending
- Paid
- Not partner managed
- Converted to check
description: Status of the payment disbursement
required:
- contractor_payment_uuid
required:
- disbursements
"/v1/contractors/{contractor_uuid}/payment_method":
get:
summary: Get a contractor's payment method
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid-payment_method
security:
- CompanyAccessAuth: []
description: |-
Fetches a contractor's payment method. A contractor payment method
describes how the payment should be split across the contractor's associated
bank accounts.
scope: `contractor_payment_methods:read`
tags:
- Contractor Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Method"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorPaymentMethod
x-speakeasy-name-override: get
put:
summary: Update a contractor's payment method
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-contractors-contractor_id-payment_method
security:
- CompanyAccessAuth: []
description: |-
Updates a contractor's payment method. Note that creating a contractor
bank account will also update the contractor's payment method.
scope: `contractor_payment_methods:write`
tags:
- Contractor Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Method"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Conflict-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- version
- type
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/idempotency) for information on how to use this field.
example: 63859768485e218ccf8a449bb60f14ed
type:
type: string
enum:
- Direct Deposit
- Check
description: The payment method type. If type is Direct Deposit, the contractor is required to have a bank account. See [Bank account endpoint](./post-v1-contractors-contractor_uuid-bank_accounts).
required: true
x-speakeasy-group: contractorPaymentMethod
x-speakeasy-name-override: update
"/v1/contractors/{contractor_uuid}/payments":
get:
summary: Get contractor payments
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
required: true
description: The UUID of the contractor
schema:
type: string
- name: sort_by
in: query
required: false
description: 'Sort the results. Format: `field` or `field:direction` where `field` is `check_date` or `created_at` and `direction` is `asc` or `desc`.'
example: check_date:desc
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid-payments
security:
- CompanyAccessAuth: []
description: |-
Returns a paginated list of payments for a single contractor.
Results are sortable by `check_date` or `created_at`. Append `:asc` or `:desc` to control direction (e.g., `check_date:desc`).
scope: `contractor_pay_stubs:read`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: A JSON array of contractor payments
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Contractor-Payment-Listing"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/companies/{company_id}/contractor_payments":
get:
summary: Get contractor payments for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: start_date
in: query
required: true
description: The time period for which to retrieve contractor payments
example: '2020-01-01'
schema:
type: string
- name: end_date
in: query
required: true
description: The time period for which to retrieve contractor payments. If left empty, defaults to today's date.
example: '2020-12-31'
schema:
type: string
- name: contractor_uuid
in: query
required: false
description: The UUID of the contractor. When specified, will load all payments for that contractor.
schema:
type: string
- name: group_by_date
in: query
required: false
description: Display contractor payments results group by check date if set to true.
schema:
type: boolean
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-contractor_payments
security:
- CompanyAccessAuth: []
description: |-
Returns an object containing individual contractor payments, within a given time period, including totals.
Results are returned in reverse chronological order (newest first).
scope: `payrolls:read`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: A JSON object containing contractor payments information
content:
application/json:
schema:
anyOf:
- "$ref": "#/components/schemas/Contractor-Payment-Summary"
- "$ref": "#/components/schemas/Contractor-Payment-Summary-By-Dates"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided ID/UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorPayments
x-speakeasy-name-override: list
post:
summary: Create a contractor payment
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-contractor_payments
security:
- CompanyAccessAuth: []
description: |-
Pay a contractor. Information needed depends on the contractor's wage type (hourly vs fixed)
scope: `payrolls:run`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided ID/UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Body"
required: true
x-speakeasy-group: contractorPayments
x-speakeasy-name-override: create
"/v1/companies/{company_id}/contractor_payments/{contractor_payment_id}":
get:
summary: Get a single contractor payment
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: contractor_payment_id
in: path
required: true
description: The UUID of the contractor payment
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-contractor_payment-contractor-payment
security:
- CompanyAccessAuth: []
description: |-
Returns a single contractor payment.
scope: `payrolls:read`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided ID/UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
x-speakeasy-group: contractorPayments
delete:
summary: Cancel a contractor payment
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: contractor_payment_id
in: path
required: true
description: The UUID of the contractor payment
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-companies-company_id-contractor_payment-contractor-payment
security:
- CompanyAccessAuth: []
description: |-
Cancels and deletes a contractor payment. If the contractor payment has already started processing ("may_cancel": true), the payment cannot be cancelled.
scope: `payrolls:run`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided ID/UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: contractorPayments
x-speakeasy-name-override: delete
"/v1/companies/{company_uuid}/contractor_payments/preview":
get:
summary: Preview contractor payment debit date
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: get-companies-company_uuid-contractor_payments-preview
security:
- CompanyAccessAuth: []
description: |-
Returns a debit_date dependent on the ACH payment speed of the company.
If the payment method is Check or Historical payment, the debit_date will be the same as the check_date.
scope: `payrolls:read`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payments-Preview"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payments-Preview-Body"
required: true
x-speakeasy-name-override: preview
x-speakeasy-group: contractorPayments
"/v1/contractor_payments/{contractor_payment_uuid}/receipt":
get:
summary: Get a single contractor payment receipt
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_payment_uuid
in: path
required: true
description: The UUID of the contractor payment
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor_payments-contractor_payment_uuid-receipt
security:
- CompanyAccessAuth: []
description: |-
Returns a contractor payment receipt.
Notes:
* Receipts are only available for direct deposit payments and are only available once those payments have been funded.
* Payroll Receipt requests for payrolls which do not have receipts available (e.g. payment by check) will return a 404 status.
* Hour and dollar amounts are returned as string representations of numeric decimals.
* Dollar amounts are represented to the cent.
* If no data has yet be inserted for a given field, it defaults to “0.00” (for fixed amounts).
scope: `payrolls:read`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment-Receipt"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getReceipt
x-speakeasy-group: contractorPayments
"/v1/contractor_payments/{contractor_payment_uuid}/fund":
put:
summary: Fund a contractor payment [DEMO]
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_payment_uuid
in: path
required: true
description: The UUID of the contractor payment
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor_payments-contractor_payment_uuid-fund
security:
- CompanyAccessAuth: []
description: "> \U0001F6A7 Demo action\n>\n> This action is only available in the Demo environment\n\nSimulate funding a contractor payment. Funding only occurs automatically in the production environment when bank transactions are generated. Use this action in the demo environment to transition a contractor payment's `status` from `Unfunded` to `Funded`. A `Funded` status is required for generating a contractor payment receipt.\n\nscope: `payrolls:run`"
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Payment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: contractorPayments
x-speakeasy-name-override: fund
"/v1/contractor_payments/{contractor_payment_id}/pdf":
get:
summary: Get a contractor payment PDF
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_payment_id
in: path
required: true
description: The UUID of the contractor payment
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor_payments-contractor_payment_id-pdf
security:
- CompanyAccessAuth: []
description: |-
Get a PDF document for a single contractor payment.
scope: `payrolls:read`
tags:
- Contractor Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: A PDF document of the contractor payment
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided ID/UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/contractors/{contractor_uuid}/rehire":
post:
summary: Schedule a contractor rehire
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
required: true
description: The UUID of the contractor
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-contractors-contractor_uuid-rehire
security:
- CompanyAccessAuth: []
description: |-
## 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 rehire is recorded
- `contractor.reactivation_effective`: Fires when the rehire takes effect (on start_date)
scope: `contractors:write`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'204':
description: no content
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
format: date
description: The rehire date
example: '2025-07-01'
required:
- start_date
delete:
summary: Cancel a pending contractor rehire
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
required: true
description: The UUID of the contractor
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-contractors-contractor_uuid-rehire
security:
- CompanyAccessAuth: []
description: |-
## 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.reactivation_cancelled`: Fires when the pending rehire is cancelled
scope: `contractors:write`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'204':
description: no content
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/contractors/{contractor_uuid}/termination":
post:
summary: Schedule a contractor termination
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
required: true
description: The UUID of the contractor
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-contractors-contractor_uuid-termination
security:
- CompanyAccessAuth: []
description: |-
## 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 dismissal is recorded
- `contractor.deactivation_effective`: Fires when the dismissal takes effect (the day after end_date)
scope: `contractors:write`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'204':
description: no content
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
end_date:
type: string
format: date
description: The date of dismissal
example: '2025-06-15'
required:
- end_date
delete:
summary: Cancel a pending contractor termination
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
required: true
description: The UUID of the contractor
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-contractors-contractor_uuid-termination
security:
- CompanyAccessAuth: []
description: |-
## 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.deactivation_cancelled`: Fires when the pending dismissal is cancelled
scope: `contractors:write`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'204':
description: no content
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/contractors/{contractor_uuid}":
get:
summary: Get a contractor
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
- name: include
in: query
explode: false
required: false
schema:
type: array
items:
type: string
enum:
- company_name
- portal_invitations
x-enumDescriptions:
company_name: Include the name of the company that the contractor is associated with
portal_invitations: Include portal invitation status information, including member portal invitation details and partner portal invitation status
description: Include the requested attribute(s) in each contractor response. Multiple options are comma separated.
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid
security:
- CompanyAccessAuth: []
description: |-
Get a contractor.
scope: `contractors:read`
tags:
- Contractors
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Show"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
put:
summary: Update a contractor
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-contractors-contractor_uuid
security:
- CompanyAccessAuth: []
description: "Update a contractor.\n\n> \U0001F6A7 Warning\n>\n> 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\n\nscope: `contractors:write`"
tags:
- Contractors
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Update-Request-Body"
required: true
x-speakeasy-name-override: update
delete:
summary: Delete a contractor
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-contractors-contractor_uuid
security:
- CompanyAccessAuth: []
description: |-
A contractor can only be deleted when there are no contractor payments.
scope: `contractors:manage`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: delete
"/v1/companies/{company_uuid}/contractors":
get:
summary: Get contractors of a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: search_term
in: query
required: false
description: A string to search for in the object's names
schema:
type: string
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(created_at|type|onboarding_status|name)(:(asc|desc))?(,(created_at|type|onboarding_status|name)(:(asc|desc))?)*$"
example: created_at:asc
description: 'Sort by one or more fields. Options: created_at, type, onboarding_status, name. Append `:asc` or `:desc` to specify direction (e.g., `created_at:asc`). Defaults to ascending.'
- name: onboarded
in: query
required: false
description: Filters contractors by those who have completed onboarding
schema:
type: boolean
- name: onboarded_active
in: query
required: false
description: Filters contractors who are ready to work (onboarded AND active today)
schema:
type: boolean
- name: terminated
in: query
required: false
description: Filters contractors by those who have been or are scheduled to be dismissed
schema:
type: boolean
- name: terminated_today
in: query
required: false
description: Filters contractors by those who have been dismissed and whose dismissal is in effect today (excludes active and scheduled to be dismissed)
schema:
type: boolean
- name: include
in: query
explode: false
required: false
schema:
type: array
items:
type: string
enum:
- company_name
- portal_invitations
x-enumDescriptions:
company_name: Include the name of the company that the contractor is associated with
portal_invitations: Include portal invitation status information, including member portal invitation details and partner portal invitation status
description: Include the requested attribute(s) in each contractor response. Multiple options are comma separated.
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-contractors
security:
- CompanyAccessAuth: []
description: |-
Get all contractors, active and inactive, individual and business, for a company.
scope: `contractors:read`
tags:
- Contractors
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Show-Contractors"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: list
post:
summary: Create a contractor
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-contractors
security:
- CompanyAccessAuth: []
description: |-
Create an individual or business contractor.
scope: `contractors:manage`
tags:
- Contractors
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Create-Request-Body"
required: true
x-speakeasy-name-override: create
"/v1/contractors/{contractor_uuid}/onboarding_status":
get:
summary: Get the contractor's onboarding status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid-onboarding_status
security:
- CompanyAccessAuth: []
description: |-
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`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Onboarding-Status"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getOnboardingStatus
put:
summary: Change the contractor's onboarding status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-contractors-contractor_uuid-onboarding_status
security:
- CompanyAccessAuth: []
description: |-
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`
tags:
- Contractors
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Onboarding-Status"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Contractor-Onboarding-Status-Update-Request-Body"
required: true
x-speakeasy-name-override: updateOnboardingStatus
"/v1/departments/{department_uuid}":
get:
summary: Get a department
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: department_uuid
in: path
description: The UUID of the department
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-department
security:
- CompanyAccessAuth: []
description: |-
Get a department given the UUID
scope: `departments:read`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Department"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
put:
summary: Update a department
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: department_uuid
in: path
description: The UUID of the department
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-departments
security:
- CompanyAccessAuth: []
description: |-
Update a department
scope: `departments:write`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Department"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Conflict-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Department-Update-Request-Body"
required: true
x-speakeasy-name-override: update
delete:
summary: Delete a department
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: department_uuid
in: path
description: The UUID of the department
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-department
security:
- CompanyAccessAuth: []
description: |-
Delete a department. You cannot delete a department until all employees and contractors have been removed.
scope: `departments:write`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: delete
"/v1/departments/{department_uuid}/add":
put:
summary: Add people to a department
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: department_uuid
in: path
description: The UUID of the department
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-add-people-to-department
security:
- CompanyAccessAuth: []
description: |-
Add employees and contractors to a department
scope: `departments:write`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Department"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Department-People-Request-Body"
required: true
x-speakeasy-name-override: addPeople
"/v1/departments/{department_uuid}/remove":
put:
summary: Remove people from a department
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: department_uuid
in: path
description: The UUID of the department
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-remove-people-from-department
security:
- CompanyAccessAuth: []
description: |-
Remove employees and contractors from a department
scope: `departments:write`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Department"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Department-People-Request-Body"
required: true
x-speakeasy-name-override: removePeople
"/v1/companies/{company_uuid}/departments":
get:
summary: Get all departments of a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-companies-departments
security:
- CompanyAccessAuth: []
description: |-
Get all of the departments for a given company with the employees and contractors assigned to that department.
scope: `departments:read`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Department-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getAll
post:
summary: Create a department
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-departments
security:
- CompanyAccessAuth: []
description: |-
Create a department
scope: `departments:write`
tags:
- Departments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Department"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Department-Create-Request-Body"
required: true
x-speakeasy-name-override: create
"/v1/contractors/{contractor_uuid}/documents":
get:
summary: Get all contractor documents
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor-documents
security:
- CompanyAccessAuth: []
description: |-
Get a list of all contractor's documents
scope: `contractor_documents:read`
tags:
- Contractor Documents
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Document"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorDocuments
x-speakeasy-name-override: getAll
"/v1/documents/{document_uuid}":
get:
summary: Get a contractor document
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: document_uuid
in: path
description: The UUID of the document
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor-document
security:
- CompanyAccessAuth: []
description: |-
Get a contractor document.
scope: `contractor_documents:read`
tags:
- Contractor Documents
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Document"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
x-speakeasy-group: contractorDocuments
"/v1/documents/{document_uuid}/pdf":
get:
summary: Get the contractor document pdf
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: document_uuid
in: path
description: The UUID of the document
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractor-document-pdf
security:
- CompanyAccessAuth: []
description: |-
Get the contractor document pdf.
scope: `contractor_documents:read`
tags:
- Contractor Documents
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Document-Pdf"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: contractorDocuments
x-speakeasy-name-override: getPdf
"/v1/documents/{document_uuid}/sign":
put:
summary: Sign a contractor document
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: document_uuid
in: path
description: The UUID of the document
required: true
schema:
type: string
- name: x-gusto-client-ip
in: header
required: false
description: Optional header to supply the IP address. This can be used to supply the IP address for signature endpoints instead of the signed_by_ip_address parameter.
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-contractor-document-sign
security:
- CompanyAccessAuth: []
description: |-
Sign a contractor document.
scope: `contractor_documents:write`
tags:
- Contractor Documents
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Document-Signed"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
fields:
type: array
description: List of fields and the values they will be set to.
items:
type: object
properties:
key:
type: string
description: Unique identifier of the field
value:
type: string
description: Value for the field
agree:
type: boolean
description: Whether you agree to sign electronically
signed_by_ip_address:
type: string
description: The IP address of the signatory who signed the form. You must provide the IP address with either this parameter OR you can leave out this parameter and set the IP address in the request header using the `x-gusto-client-ip` header instead.
required:
- fields
- agree
required: true
x-speakeasy-group: contractorDocuments
x-speakeasy-name-override: sign
"/v1/companies/{company_id}/earning_types":
get:
summary: Get all earning types for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-earning_types
security:
- CompanyAccessAuth: []
description: |-
A payroll item in Gusto is associated to an earning type to name the type of earning described by the payroll item.
#### Default Earning Type
Certain earning types are special because they have tax considerations. Those earning types are mostly the same for every company depending on its legal structure (LLC, Corporation, etc.)
#### Custom Earning Type
Custom earning types are all the other earning types added specifically for a company.
scope: `payrolls:read`
tags:
- Earning Types
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Earning-Type-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: earningTypes
x-speakeasy-name-override: list
post:
summary: Create a custom earning type
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-earning_types
security:
- CompanyAccessAuth: []
description: |-
Create a custom earning type.
If an inactive earning type exists with the same name, this will reactivate it instead of creating a new one.
scope: `payrolls:write`
tags:
- Earning Types
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Earning-Type"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- name
properties:
name:
type: string
default: Gym Membership
description: The name of the custom earning type.
category:
type: string
description: The earning type category. Only settable when the company has access to categorized custom bonus earning types.
enum:
- Commission
- DiscretionaryBonus
- ServiceCharges
- OnCallPay
- Other
included_in_overtime_pay:
type: boolean
description: Whether earnings of this type are included when calculating an employee's regular rate of pay for overtime purposes. Only settable when `category` is `Other`.
required: true
x-speakeasy-group: earningTypes
x-speakeasy-name-override: create
"/v1/companies/{company_id}/earning_types/{earning_type_uuid}":
put:
summary: Update an earning type
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: earning_type_uuid
in: path
description: The UUID of the earning type
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-earning_types-earning_type_uuid
security:
- CompanyAccessAuth: []
description: |-
Update an earning type.
scope: `payrolls:write`
tags:
- Earning Types
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Earning-Type"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The name of the custom earning type.
category:
type: string
description: The earning type category. Set at creation and immutable afterward — submitting a value that differs from the current one returns a 422. Submitting the current value (e.g. when echoing back the full resource) is allowed.
included_in_overtime_pay:
type: boolean
description: Whether earnings of this type are included in overtime pay calculations. Editable only when the category is `Other`; otherwise immutable — submitting a value that differs from the current one returns a 422. Submitting the current value (e.g. when echoing back the full resource) is allowed.
required: true
x-speakeasy-group: earningTypes
x-speakeasy-name-override: update
delete:
summary: Deactivate an earning type
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: earning_type_uuid
in: path
description: The UUID of the earning type
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-companies-company_id-earning_types-earning_type_uuid
security:
- CompanyAccessAuth: []
description: |-
Deactivate an earning type.
scope: `payrolls:write`
tags:
- Earning Types
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: earningTypes
x-speakeasy-name-override: delete
"/v1/employees/{employee_id}/bank_accounts":
get:
summary: List employee bank accounts
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-bank_accounts
security:
- CompanyAccessAuth: []
description: |-
Returns all employee bank accounts.
scope: `employee_payment_methods:read`
tags:
- Employee Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Employee-Bank-Account"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeePaymentMethods
x-speakeasy-name-override: getBankAccounts
post:
summary: Create an employee bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-bank_accounts
security:
- CompanyAccessAuth: []
description: |-
Creates an employee bank account. An employee can have multiple bank accounts. Note that creating an employee bank account will also update the employee's payment method.
scope: `employee_payment_methods:write`
tags:
- Employee Payment Method
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Bank-Account"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Bank-Account-Request"
required: true
x-speakeasy-group: employeePaymentMethod
x-speakeasy-name-override: create
"/v1/employees/{employee_id}/bank_accounts/{bank_account_uuid}":
put:
summary: Update an employee bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: bank_account_uuid
in: path
description: The UUID of the bank account
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-bank_accounts
security:
- CompanyAccessAuth: []
description: |-
Updates an employee bank account.
scope: `employee_payment_methods:write`
tags:
- Employee Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Bank-Account"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Bank-Account-Request"
required: true
x-speakeasy-group: employeePaymentMethod
x-speakeasy-name-override: updateBankAccount
delete:
summary: Delete an employee bank account
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: bank_account_uuid
in: path
description: The UUID of the bank account
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employees-employee_id-bank_accounts-bank_account_id
security:
- CompanyAccessAuth: []
description: |-
Deletes an employee bank account. To update an employee's bank account details, delete the bank account first and create a new one.
scope: `employee_payment_methods:write`
tags:
- Employee Payment Method
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: employeePaymentMethod
x-speakeasy-name-override: deleteBankAccount
"/v1/employees/{employee_id}/employee_benefits":
get:
summary: Get all benefits for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: include
in: query
required: false
schema:
type: string
enum:
- all_benefits
description: |-
Available options:
- all_benefits: Include all effective dated benefits for each employee instead of only the current benefits.
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-employee_benefits
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee’s enrollment.
Returns an array of all employee benefits for this employee
Benefits containing PHI are only visible to applications with the `employee_benefits:read:phi` scope.
scope: `employee_benefits:read`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Employee-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeBenefits
x-speakeasy-name-override: get
post:
summary: Create an employee benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-employee_benefits
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee's enrollment.
When the application has the `employee_benefits:write:benefit_type_limited` data scope, the application can only create employee benefits for benefit types that are permitted for the application.
scope: `employee_benefits:write`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Benefit-Create-Request"
required: true
x-speakeasy-name-override: create
x-speakeasy-group: employeeBenefits
"/v1/employee_benefits/{employee_benefit_id}":
get:
summary: Get an employee benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_benefit_id
in: path
description: The UUID of the employee benefit.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employee_benefits-employee_benefit_id
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee’s enrollment.
Benefits containing PHI are only visible to applications with the `employee_benefits:read:phi` scope.
scope: `employee_benefits:read`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: retrieve
x-speakeasy-group: employeeBenefits
put:
summary: Update an employee benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_benefit_id
in: path
description: The UUID of the employee benefit.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employee_benefits-employee_benefit_id
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee's enrollment.
When the application has the `employee_benefits:write:benefit_type_limited` data scope, the application can only update employee benefits for benefit types that are permitted for the application.
scope: `employee_benefits:write`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Benefit"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Benefit-Update-Request"
required: true
x-speakeasy-group: employeeBenefits
x-speakeasy-name-override: update
delete:
summary: Delete an employee benefit
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_benefit_id
in: path
description: The UUID of the employee benefit.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employee_benefits-employee_benefit_id
security:
- CompanyAccessAuth: []
description: |-
Employee benefits represent an employee enrolled in a particular company benefit. It includes information specific to that employee's enrollment.
When the application has the `employee_benefits:write:benefit_type_limited` data scope, the application can only delete employee benefits for benefit types that are permitted for the application.
scope: `employee_benefits:write`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: employeeBenefits
x-speakeasy-name-override: delete
"/v1/employees/{employee_id}/custom_fields":
get:
summary: Get an employee's custom fields
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-custom_fields
security:
- CompanyAccessAuth: []
description: |-
Returns a list of the employee's custom fields.
scope: `employees:read`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Custom-Field-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getCustomFields
"/v1/employees/{employee_uuid}/federal_taxes":
get:
summary: Get federal taxes for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-federal_taxes
security:
- CompanyAccessAuth: []
description: |-
Returns federal tax information for an employee. The response structure varies based on the w4_data_type (pre_2020_w4 or rev_2020_w4).
scope: `employee_federal_taxes:read`
tags:
- Employee Tax Setup
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Federal-Tax"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeTaxSetup
x-speakeasy-name-override: getFederalTaxes
put:
summary: Update federal taxes for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-federal_taxes
security:
- CompanyAccessAuth: []
description: |-
Updates federal tax (W4) information for an employee. Only rev_2020_w4 format is accepted for updates.
scope: `employee_federal_taxes:write`
tags:
- Employee Tax Setup
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Federal-Tax"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- version
- w4_data_type
- filing_status
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field.
example: 56a489ce86ed6c1b0f0cecc4050a0b01
w4_data_type:
type: string
enum:
- rev_2020_w4
description: The version of the W4 form. Only rev_2020_w4 is accepted for updates.
filing_status:
type: string
enum:
- Single
- Married
- Head of Household
- Exempt from withholding
description: 'Determines which tax return form an individual will use. One of: Single, Married, Head of Household, Exempt from withholding.'
example: Single
two_jobs:
type: boolean
description: If there are only two jobs (e.g., you and your spouse each have a job), set to true.
dependents_amount:
type: number
description: Amount for dependents; a dependent entitles the taxpayer to claim a dependency exemption.
other_income:
type: number
description: Other income amount.
deductions:
type: number
description: Deductions other than the standard deduction to reduce withholding.
extra_withholding:
type: number
description: Additional amount to be withheld from each paycheck.
federal_withholding_allowance:
type: integer
description: Only applicable when w4_data_type is 'pre_2020_w4' (pre-2020 W4 forms are deprecated for updates).
additional_withholding:
type: number
description: Only applicable when w4_data_type is 'pre_2020_w4' (pre-2020 W4 forms are deprecated for updates).
required: true
x-speakeasy-group: employeeTaxSetup
x-speakeasy-name-override: updateFederalTaxes
"/v1/employees/{employee_id}/forms":
get:
summary: Get all employee forms
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employee-forms
security:
- CompanyAccessAuth: []
description: |-
Get a list of all employee's forms
scope: `employee_forms:read`
tags:
- Employee Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: list
x-speakeasy-group: employeeForms
"/v1/employees/{employee_id}/forms/{form_id}":
get:
summary: Get an employee form
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employee-form
security:
- CompanyAccessAuth: []
description: |-
Get an employee form
scope: `employee_forms:read`
tags:
- Employee Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeForms
x-speakeasy-name-override: get
"/v1/employees/{employee_id}/forms/{form_id}/pdf":
get:
summary: Get the employee form pdf
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employee-form-pdf
security:
- CompanyAccessAuth: []
description: |-
Get the link to the employee form PDF
scope: `employee_forms:read`
tags:
- Employee Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Form-Pdf"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeForms
x-speakeasy-name-override: getPdf
"/v1/employees/{employee_id}/forms/{form_id}/sign":
put:
summary: Sign an employee form
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: form_id
in: path
description: The UUID of the form
required: true
schema:
type: string
- name: x-gusto-client-ip
in: header
required: false
description: Optional header to supply the IP address. This can be used to supply the IP address for signature endpoints instead of the signed_by_ip_address parameter.
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employee-form-sign
security:
- CompanyAccessAuth: []
description: |-
Sign an employee form.
The optional preparer attributes are only valid for I-9 form. When a preparer is used, the
first name, last name, street address, city, state, and zip for that preparer are all required.
scope: `employee_forms:sign`
tags:
- Employee Forms
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
signature_text:
type: string
description: The signature
agree:
type: boolean
description: Whether you agree to sign electronically
signed_by_ip_address:
type: string
description: The IP address of the signatory who signed the form. Both IPv4 AND IPv6 are supported. You must provide the IP address with either this parameter OR you can leave out this parameter and set the IP address in the request header using the `x-gusto-client-ip` header instead.
preparer:
type: boolean
description: Whether there is a preparer
preparer_first_name:
type: string
preparer_last_name:
type: string
preparer_street_1:
type: string
preparer_street_2:
type: string
preparer_city:
type: string
preparer_state:
type: string
preparer_zip:
type: string
preparer_agree:
type: string
description: Whether preparer agrees to sign electronically
preparer2:
type: boolean
description: Whether there is a 2nd preparer
preparer2_first_name:
type: string
preparer2_last_name:
type: string
preparer2_street_1:
type: string
preparer2_street_2:
type: string
preparer2_city:
type: string
preparer2_state:
type: string
preparer2_zip:
type: string
preparer2_agree:
type: string
description: Whether 2nd preparer agrees to sign electronically
preparer3:
type: boolean
description: Whether there is a 3rd preparer
preparer3_first_name:
type: string
preparer3_last_name:
type: string
preparer3_street_1:
type: string
preparer3_street_2:
type: string
preparer3_city:
type: string
preparer3_state:
type: string
preparer3_zip:
type: string
preparer3_agree:
type: string
description: Whether 3rd preparer agrees to sign electronically
preparer4:
type: boolean
description: Whether there is a 4th preparer
preparer4_first_name:
type: string
preparer4_last_name:
type: string
preparer4_street_1:
type: string
preparer4_street_2:
type: string
preparer4_city:
type: string
preparer4_state:
type: string
preparer4_zip:
type: string
preparer4_agree:
type: string
description: Whether 4th preparer agrees to sign electronically
required:
- signature_text
- agree
required: true
x-speakeasy-group: employeeForms
x-speakeasy-name-override: sign
"/v1/companies/{company_id}/employees/payment_details":
get:
summary: Get employee payment details for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: employee_uuid
in: query
required: false
description: The UUID of a specific employee to fetch payment details for.
schema:
type: string
- name: payroll_uuid
in: query
required: false
description: The UUID of a specific payroll to fetch payment details for employees on that payroll.
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-employees-payment_details
security:
- CompanyAccessAuth: []
description: |-
Fetches payment details for employees in a given company. Results are paginated.
Use the `employee_uuid` query parameter to filter for a single employee.
Use the `payroll_uuid` query parameter to filter for employees on a specific payroll.
Providing both `employee_uuid` and `payroll_uuid` will result in a 422 error.
An empty array is returned if the company has no employees or if no employees match the filter criteria.
The `encrypted_account_number` in the `splits` array is only visible if the `employee_payment_methods:read:account_number` scope is present.
scope: `employee_payment_methods:read`
tags:
- Employees
x-gusto-integration-type:
- embedded
responses:
'200':
description: A list of employee payment details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Payment-Details-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/employees/{employee_id}/payment_method":
get:
summary: Get payment method for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-payment_method
security:
- CompanyAccessAuth: []
description: |-
Returns the payment method for an employee (e.g. Check or Direct Deposit with split configuration).
scope: `employee_payment_methods:read`
tags:
- Employee Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Payment-Method"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeePaymentMethod
x-speakeasy-name-override: get
put:
summary: Update payment method for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-payment_method
security:
- CompanyAccessAuth: []
description: |-
Updates the payment method for an employee. Can set to Check or Direct Deposit with split configuration.
scope: `employee_payment_methods:write`
tags:
- Employee Payment Method
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Payment-Method"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- version
- type
properties:
version:
type: string
description: The current version of the object. See the [versioning guide](https://docs.gusto.com/embedded-payroll/docs/versioning#object-layer) for information on how to use this field.
example: 63859768485e218ccf8a449bb60f14ed
type:
type: string
enum:
- Check
- Direct Deposit
description: The payment method type. If type is Check, split_by and splits do not need to be populated. If type is Direct Deposit, split_by and splits are required.
split_by:
anyOf:
- type: string
enum:
- Percentage
- Amount
- type: 'null'
description: How the payment will be split. If Percentage, split amounts must add up to exactly 100. If Amount, values are in cents and the last split amount must be null to capture the remainder.
splits:
type:
- array
- 'null'
description: Array of payment splits. Required when type is Direct Deposit.
items:
type: object
properties:
uuid:
type: string
description: The bank account UUID.
name:
type: string
description: The bank account name.
priority:
type: integer
description: Order of priority for each payment split; priority 1 is the first account paid. Must be unique and sequential.
split_amount:
type:
- number
- 'null'
description: If split_by is Amount, value is in cents (e.g., 500 for $5.00) and exactly one account must have null to capture the remainder. Amount must be less than or equal to 2147483647. If split_by is Percentage, value is the percentage (e.g., 60 for 60%).
required: true
x-speakeasy-group: employeePaymentMethod
x-speakeasy-name-override: update
"/v1/employees/{employee_id}/rehire":
get:
summary: Get an employee rehire
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-rehire
security:
- CompanyAccessAuth: []
description: |-
Retrieve an employee's rehire, which contains information on when the employee returns to work.
scope: `employments:read`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Rehire"
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: getRehire
post:
summary: Create an employee rehire
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-rehire
security:
- CompanyAccessAuth: []
description: |-
Rehire is created whenever an employee is scheduled to return to the company.
scope: `employments:write`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Rehire"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Rehire-Body"
required: true
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: createRehire
put:
summary: Update an employee rehire
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-rehire
security:
- CompanyAccessAuth: []
description: |-
Update an employee's rehire.
scope: `employments:write`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Rehire"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Rehire-Update-Request-Body"
required: true
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: rehire
delete:
summary: Delete an employee rehire
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employees-employee_id-rehire
security:
- CompanyAccessAuth: []
description: |-
Delete an employee rehire. An employee rehire cannot be deleted if it's active (past effective date).
scope: `employments:write`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: deleteRehire
"/v1/employees/{employee_uuid}/section603_high_earner_statuses":
get:
summary: Get all Section 603 high earner statuses for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_uuid-section603_high_earner_statuses
security:
- CompanyAccessAuth: []
description: |-
Get all Section 603 high earner statuses for an employee across all years.
Section 603 of the SECURE 2.0 Act applies to employees aged 50 or older whose prior-year FICA wages exceed the IRS threshold.
These employees are classified as high earners, and their catch-up contributions to pre-tax retirement benefits must be designated as post-tax contributions.
scope: `employee_benefits:read`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful - with records
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
post:
summary: Create a Section 603 high earner status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_uuid-section603_high_earner_statuses
security:
- CompanyAccessAuth: []
description: |-
Create a Section 603 high earner status for an employee for a specific year.
Section 603 of the SECURE 2.0 Act applies to employees aged 50 or older whose prior-year FICA wages exceed the IRS threshold.
These employees are classified as high earners, and their catch-up contributions to pre-tax retirement benefits must be designated as post-tax contributions.
scope: `employee_benefits:write`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: conflict - record already exists
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'422':
description: unprocessable entity - invalid is_high_earner
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status-Create-Request"
required: true
"/v1/employees/{employee_uuid}/section603_high_earner_statuses/{effective_year}":
get:
summary: Get a Section 603 high earner status for a specific year
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: effective_year
in: path
description: The effective year for the Section 603 status
required: true
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-employees-employee_uuid-section603_high_earner_statuses-effective_year
security:
- CompanyAccessAuth: []
description: |-
Get a Section 603 high earner status for an employee for a specific year.
Section 603 of the SECURE 2.0 Act applies to employees aged 50 or older whose prior-year FICA wages exceed the IRS threshold.
These employees are classified as high earners, and their catch-up contributions to pre-tax retirement benefits must be designated as post-tax contributions.
scope: `employee_benefits:read`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status"
'404':
description: Not Found - employee does not exist
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: unprocessable entity - invalid effective_year
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
patch:
summary: Update a Section 603 high earner status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: effective_year
in: path
description: The effective year for the Section 603 status
required: true
schema:
type: integer
x-gusto-rswag: true
operationId: patch-v1-employees-employee_uuid-section603_high_earner_statuses-effective_year
security:
- CompanyAccessAuth: []
description: |-
Update a Section 603 high earner status for an employee for a specific year.
Section 603 of the SECURE 2.0 Act applies to employees aged 50 or older whose prior-year FICA wages exceed the IRS threshold.
These employees are classified as high earners, and their catch-up contributions to pre-tax retirement benefits must be designated as post-tax contributions.
scope: `employee_benefits:write`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status"
'404':
description: Not Found - employee does not exist
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: unprocessable entity - invalid is_high_earner
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Section603-High-Earner-Status-Update-Request"
required: true
"/v1/employees/{employee_uuid}/state_taxes":
get:
summary: Get an employee's state taxes
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-state_taxes
security:
- CompanyAccessAuth: []
description: |-
Get attributes relevant for an employee's state taxes.
The data required to correctly calculate an employee's state taxes varies by both home and work location. This API returns information about each question that must be answered grouped by state. Mostly commonly, an employee lives and works in the same state and will only have questions for a single state. The response contains metadata about each question, the type of answer expected, and the current answer stored in Gusto for that question.
Answers are represented by an array. Today, this array can only be empty or contain exactly one element, but is designed to allow for forward compatibility with effective-dated fields. The `valid_from` and `valid_up_to` fields are optional and currently ignored.
## About filing new hire reports
Payroll Admins are responsible for filing a new hire report for each Employee. The `file_new_hire_report` question will only be listed if:
- the `employee.onboarding_status` is one of the following:
- `admin_onboarding_incomplete`
- `self_onboarding_awaiting_admin_review`
- that employee's work state requires filing a new hire report
scope: `employee_state_taxes:read`
tags:
- Employee Tax Setup
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-State-Taxes-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeTaxSetup
x-speakeasy-name-override: getStateTaxes
put:
summary: Update an employee's state taxes
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-state_taxes
security:
- CompanyAccessAuth: []
description: |-
Update attributes relevant for an employee's state taxes.
As described for the GET endpoint, the answers must be supplied in the effective-dated format, but currently only a single answer will be accepted. The `valid_from` and `valid_up_to` fields are optional and currently ignored.
scope: `employee_state_taxes:write`
tags:
- Employee Tax Setup
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-State-Taxes-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-State-Taxes-Request"
required: true
x-speakeasy-group: employeeTaxSetup
x-speakeasy-name-override: updateStateTaxes
"/v1/employees/{employee_uuid}/time_off_activities":
get:
summary: Get employee time off activities
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_uuid
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: time_off_type
in: query
required: true
description: 'The time off type name you want to query data for. ex: ''sick'' or ''vacation'''
schema:
type: string
x-gusto-rswag: true
operationId: get-version-employees-time_off_activities
security:
- CompanyAccessAuth: []
description: |-
Get employee time off activities.
scope: `employee_time_off_activities:read`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Activity-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: getTimeOffActivities
"/v1/companies/{company_id}/reports/employees_annual_fica_wage":
post:
summary: Create an employees annual FICA wage report
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-reports-employees_annual_fica_wage
security:
- CompanyAccessAuth: []
description: |-
Generates a report containing annual FICA (Federal Insurance Contributions Act) wage data for all employees in a company over a specified year range.
This report provides detailed wage information subject to Social Security and Medicare taxes, useful for benefits integrations that need to verify employee earnings for compliance and benefit calculations.
The report is generated asynchronously. After making this request, you will receive a `request_uuid` which can be used to poll the [Get a report](ref:get-v1-reports-request_uuid) endpoint to check the status and retrieve the report when complete.
scope: `company_reports:write`
tags:
- Reports
x-gusto-integration-type:
- embedded
responses:
'202':
description: accepted
content:
application/json:
schema:
"$ref": "#/components/schemas/Employees-Annual-Fica-Wage-Report-Acceptance"
'422':
description: unprocessable entity - start year before minimum
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- start_year
- end_year
properties:
start_year:
type: integer
description: The start year for the report (must be 2011 or later)
example: 2023
end_year:
type: integer
description: The end year for the report (must be the current year or earlier, and must be >= start_year)
example: 2024
required: true
"/v1/employees/{employee_id}":
get:
summary: Get an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: include
in: query
explode: false
required: false
schema:
type: array
items:
type: string
enum:
- all_compensations
- all_home_addresses
- company_name
- current_home_address
- custom_fields
- portal_invitations
x-enumDescriptions:
all_compensations: Include all effective dated compensations for each job instead of only the current compensation. Requires `compensations:read` scope.
all_home_addresses: Include all home addresses that have been associated to this employee
company_name: Include the name of the company that the employee is associated with
current_home_address: Include the employee's current home address
custom_fields: Include employees' custom fields
portal_invitations: Include portal invitation status information, including member portal invitation details and partner portal invitation status
description: Include the requested attribute(s) in each employee response. Multiple options are comma separated.
x-gusto-rswag: true
operationId: get-v1-employees
security:
- CompanyAccessAuth: []
description: |-
Get an employee.
Note: Compensation data (pay rate, payment unit, and related fields) represents sensitive employee pay information. When retrieving employee job data, these fields (`rate`, `payment_unit`, `current_compensation_uuid`, `compensations`) are only returned when the `compensations:read` scope is included. This allows you to access employee and job metadata without exposing pay rates.
scope: `employees:read`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Show"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
put:
summary: Update an employee.
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees
security:
- CompanyAccessAuth: []
description: |-
Update an employee.
scope: `employees:write`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee"
'409':
description: invalid version
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'422':
description: invalid attributes
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
first_name:
type: string
example: Weezy
middle_initial:
type:
- string
- 'null'
example: F
last_name:
type: string
example: Baby
email:
type: string
example: tunechi@cashmoneyrecords.com
work_email:
type: string
example: new.partner.work@example.com
date_of_birth:
type: string
example: '1991-01-31'
ssn:
type: string
pattern: "[0-9]{9}"
example: '824920233'
preferred_first_name:
type:
- string
- 'null'
two_percent_shareholder:
type: boolean
description: Whether the employee is a two percent shareholder of the company. This field only applies to companies with an S-Corp entity type.
required: true
x-speakeasy-name-override: update
delete:
summary: Delete an onboarding employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employee
security:
- CompanyAccessAuth: []
description: |-
Use this endpoint to delete an employee who is in onboarding. Deleting
an onboarded employee is not allowed and will return a 422 response. Please check out the Terminations api
if you need to terminate an onboarded employee.
scope: `employees:manage`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: successful
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: cannot delete onboarded employee
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: delete
"/v1/companies/{company_id}/employees":
get:
summary: Get employees of a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: location_uuid
in: query
required: false
description: Filter employees by a specific primary work location
schema:
type: string
- name: payroll_uuid
in: query
required: false
description: Filter employees by a specific payroll
schema:
type: string
- name: search_term
in: query
required: false
description: A string to search for in the object's names
schema:
type: string
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(created_at|name|onboarding_status)(:(asc|desc))?(,(created_at|name|onboarding_status)(:(asc|desc))?)*$"
example: created_at:asc
description: Sort employees by a given field. Cannot be used with search_term. Append `:asc` or `:desc` to specify direction (e.g., `name:desc`). Defaults to ascending.
- name: include
in: query
explode: false
required: false
schema:
type: array
items:
type: string
enum:
- all_compensations
- all_home_addresses
- company_name
- current_home_address
- custom_fields
- portal_invitations
x-enumDescriptions:
all_compensations: Include all effective dated compensations for each job instead of only the current compensation. Requires `compensations:read` scope.
all_home_addresses: Include all home addresses that have been associated to this employee
company_name: Include the name of the company that the employee is associated with
current_home_address: Include the employee's current home address
custom_fields: Include employees' custom fields
portal_invitations: Include portal invitation status information, including member portal invitation details and partner portal invitation status
description: Include the requested attribute(s) in each employee response. Multiple options are comma separated.
- name: onboarded
in: query
required: false
description: Filters employees by those who have completed onboarding
schema:
type: boolean
- name: onboarded_active
in: query
required: false
description: Filters employees who are ready to work (onboarded AND active today)
schema:
type: boolean
- name: terminated
in: query
required: false
description: Filters employees by those who have been or are scheduled to be terminated
schema:
type: boolean
- name: terminated_today
in: query
required: false
description: Filters employees by those who have been terminated and whose termination is in effect today (excludes active and scheduled to be terminated)
schema:
type: boolean
- name: uuids
in: query
explode: false
schema:
type: array
items:
type: string
required: false
description: Optional subset of employees to fetch.
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-employees
security:
- CompanyAccessAuth: []
description: |-
Get all of the employees, onboarding, active and terminated, for a given company.
Note: Compensation data (pay rate, payment unit, and related fields) represents sensitive employee pay information. When retrieving employee job data, these fields (`rate`, `payment_unit`, `current_compensation_uuid`, `compensations`) are only returned when the `compensations:read` scope is included. This allows you to access employee and job metadata without exposing pay rates.
scope: `employees:read`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Show-Employees"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: list
post:
summary: Create an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
required: true
description: Company ID
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees
security:
- CompanyAccessAuth: []
description: |-
Create an employee.
scope: `employees:manage`
tags:
- Employees
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: invalid attributes
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- first_name
- last_name
properties:
first_name:
type: string
middle_initial:
type: string
last_name:
type: string
email:
type:
- string
- 'null'
format: email
description: The employee's personal email address. Required if self_onboarding is true.
work_email:
type: string
format: email
description: The employee's work email address.
date_of_birth:
type: string
format: date
ssn:
type: string
pattern: "[0-9]{9}"
preferred_first_name:
type: string
self_onboarding:
type: boolean
description: If true, employee is expected to self-onboard. If false, payroll admin is expected to enter in the employee's onboarding information
x-speakeasy-name-override: create
"/v1/employees/{employee_id}/onboarding_status":
get:
summary: Get the employee's onboarding status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-onboarding_status
security:
- CompanyAccessAuth: []
description: |-
# Description
Retrieves an employee'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 complete the full employee-onboarding. |
| `onboarding_completed` | Employee has been fully onboarded and verified. |
### Employee self-onboarding
| onboarding_status | Description |
|:------------------|------------:|
| `admin_onboarding_incomplete` | Admin needs to enter basic information about the employee. |
| `self_onboarding_pending_invite` | Admin has the intention to invite the employee to self-onboard (e.g., marking a checkbox), but the system has not yet sent the invitation. |
| `self_onboarding_invited` | Employee has been sent an invitation to self-onboard. |
| `self_onboarding_invited_started` | Employee has started the self-onboarding process. |
| `self_onboarding_invited_overdue` | Employee's start date has passed, and employee has still not completed self-onboarding. |
| `self_onboarding_completed_by_employee` | Employee has completed entering in their information. The status should be updated via API to "self_onboarding_awaiting_admin_review" from here, once the Admin has started reviewing. |
| `self_onboarding_awaiting_admin_review` | Admin has started to verify the employee's information. |
| `onboarding_completed` | Employee has been fully onboarded and verified. |
## onboarding_steps
| onboarding_steps | Requirement(s) to be completed |
|:-----------------|-------------------------------:|
| `personal_details` | Add employee's first name, last name, email, date of birth, social security number |
| `compensation_details` | Associate employee to a job & compensation. |
| `add_work_address` | Add employee work address. |
| `add_home_address` | Add employee home address. |
| `federal_tax_setup` | Set up federal tax withholdings. |
| `state_tax_setup` | Set up state tax withholdings. |
| `direct_deposit_setup` | (optional) Set up employee's direct deposit. |
| `employee_form_signing` | Employee forms (e.g., W4, direct deposit authorization) are generated & signed. |
| `file_new_hire_report` | File a new hire report for this employee. |
| `admin_review` | Admin reviews & confirms employee details (only required for Employee self-onboarding) |
scope: `employees:read`
tags:
- Employees
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Onboarding-Status"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getOnboardingStatus
put:
summary: Update the employee's onboarding status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-onboarding_status
security:
- CompanyAccessAuth: []
description: |-
Updates an employee's onboarding status.
Below is a list of valid onboarding status changes depending on the intended action to be performed on behalf of the employee.
| Action | current onboarding_status | new onboarding_status |
|:------------------|:------------:|----------:|
| Mark an employee as self-onboarding | `admin_onboarding_incomplete` | `self_onboarding_pending_invite` |
| Invite an employee to self-onboard | `admin_onboarding_incomplete` or `self_onboarding_pending_invite` | `self_onboarding_invited` |
| Cancel an employee's self-onboarding | `self_onboarding_invited` or `self_onboarding_pending_invite` | `admin_onboarding_incomplete` |
| Review an employee's self-onboarded info | `self_onboarding_completed_by_employee` | `self_onboarding_awaiting_admin_review` |
| Finish an employee's onboarding | `admin_onboarding_incomplete` or `self_onboarding_awaiting_admin_review` | `onboarding_completed` |
scope: `employees:manage`
tags:
- Employees
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Onboarding-Status"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: invalid status transition
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- onboarding_status
properties:
onboarding_status:
type: string
description: Onboarding status value
enum:
- admin_onboarding_incomplete
- self_onboarding_pending_invite
- self_onboarding_invited
- self_onboarding_invited_started
- self_onboarding_invited_overdue
- self_onboarding_completed_by_employee
- self_onboarding_awaiting_admin_review
- onboarding_completed
required: true
x-speakeasy-name-override: updateOnboardingStatus
"/v1/employees/{employee_id}/onboarding_documents_config":
put:
summary: Update employee onboarding documents config
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
required: true
description: The UUID of the employee
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-onboarding_documents_config
security:
- CompanyAccessAuth: []
description: |-
Indicate whether to include the Form I-9 for an employee during the onboarding process.
If included, the employee will be prompted to complete Form I-9 as part of their onboarding.
## Related guides
- [Employee onboarding](doc:employee-onboarding)
scope: `employees:manage`
tags:
- Employees
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Onboarding-Document"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Onboarding-Documents-Config-Request"
x-speakeasy-name-override: updateOnboardingDocumentsConfig
"/v1/employees/{employee_id}/employment_history":
get:
summary: Get employment history for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-employment_history
security:
- CompanyAccessAuth: []
description: |-
Retrieve the employment history for a given employee, which includes termination and rehire.
scope: `employments:read`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employment-History-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: getHistory
"/v1/events":
get:
summary: Get all events
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: starting_after_uuid
in: query
required: false
description: A cursor for pagination. Returns all events occuring after the specified UUID (exclusive). Events are sorted according to the provided sort_order param.
schema:
type: string
- name: resource_uuid
in: query
required: false
description: The UUID of the company. If not specified, will return all events for all companies.
schema:
type: string
- name: limit
in: query
required: false
description: Limits the number of objects returned in a single response, between 1 and 100. The default is 25
schema:
type: string
- name: event_type
in: query
required: false
description: A string containing the exact event name (e.g. `employee.created`), or use a wildcard match to filter for a group of events (e.g. `employee.*`, `*.created`, `notification.*.created` etc.)
schema:
type: string
- name: sort_order
in: query
required: false
schema:
type: string
enum:
- asc
- desc
description: A string indicating whether to sort resulting events in ascending (asc) or descending (desc) chronological order. Events are sorted by their `timestamp`. Defaults to asc if left empty.
x-gusto-rswag: true
operationId: get-events
security:
- SystemAccessAuth: []
description: "Fetch all events, going back up to 30 days, that your partner application has the required scopes for. Note that a partner does NOT have to have verified webhook subscriptions in order to utilize this endpoint.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `events:read`"
tags:
- Events
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Event-List"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: get
"/v1/companies/{company_uuid}/external_payrolls":
get:
summary: Get external payrolls for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-company-external-payrolls
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Get external payrolls for a company.
scope: `external_payrolls:read`
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/External-Payroll-Basic"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: get
post:
summary: Create an external payroll for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-external-payroll
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Creates a new external payroll for a company.
scope: `external_payrolls:write`
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/External-Payroll"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/External-Payroll-Create-Request"
required: true
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: create
"/v1/companies/{company_uuid}/external_payrolls/tax_liabilities":
get:
summary: Get tax liabilities
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-tax-liabilities
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Get tax liabilities from aggregate external payrolls for a company.
scope: `external_payrolls:read`
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Tax-Liabilities-Selections"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: listTaxLiabilities
put:
summary: Update tax liabilities
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-tax-liabilities
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Update tax liabilities for a company.
scope: `external_payrolls:write`
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Tax-Liabilities-Selections"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Tax-Liability-Selections-Request"
required: true
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: updateTaxLiabilities
"/v1/companies/{company_uuid}/external_payrolls/tax_liabilities/finish":
put:
summary: Finalize tax liabilities options and convert into processed payrolls
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-tax-liabilities-finish
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Finalizes tax liabilities for a company. All external payrolls edit action will be disabled.
### Asynchronous processing
This endpoint triggers an asynchronous operation. The external payrolls will be processed in the background after finalization.
scope: `external_payrolls:write`
responses:
'202':
description: Accepted
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: finalizeTaxLiabilities
"/v1/companies/{company_uuid}/external_payrolls/{external_payroll_id}":
get:
summary: Get an external payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: external_payroll_id
in: path
description: The UUID of the external payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-external-payroll
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Get an external payroll for a given company.
scope: `external_payrolls:read`
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/External-Payroll"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: retrieve
put:
summary: Update an external payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: external_payroll_id
in: path
description: The UUID of the external payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-external-payroll
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Update an external payroll with a list of external payroll items.
scope: `external_payrolls:write`
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/External-Payroll"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/External-Payroll-Update-Request"
required: true
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: update
delete:
summary: Delete an external payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: external_payroll_id
in: path
description: The UUID of the external payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-external-payroll
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Delete an external payroll.
scope: `external_payrolls:write`
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: delete
"/v1/companies/{company_uuid}/external_payrolls/{external_payroll_id}/calculate_taxes":
get:
summary: Get tax suggestions for an external payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: external_payroll_id
in: path
description: The UUID of the external payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-external-payroll-calculate-taxes
security:
- CompanyAccessAuth: []
tags:
- External Payrolls
x-gusto-integration-type:
- embedded
description: |-
Get tax suggestions for an external payroll. Earnings and/or benefits data must be saved prior to the calculation in order to retrieve accurate tax calculation.
scope: `external_payrolls:read`
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/External-Payroll-Tax-Suggestions"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: externalPayrolls
x-speakeasy-name-override: calculateTaxes
"/v1/companies/{company_uuid}/flows":
post:
summary: Create a flow
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-company-flows
security:
- CompanyAccessAuth: []
description: |-
Generate a link to access a pre-built workflow in Gusto white-label UI. For security, all generated flows will expire within 1 hour of inactivity or 24 hours from creation time, whichever comes first.
You can see a list of all possible flow types in our [Flow Types](https://docs.gusto.com/embedded-payroll/docs/flow-types) guide.
You can also mix and match flow_types in the same category to create custom flows suitable for your needs.
For instance, to create a custom onboarding flow that only includes `add_addresses`, `add_employees`, and `sign_all_forms` steps, simply stitch those flow_types together into a comma delimited string:
```json
{
"flow_type": "add_addresses,add_employees,sign_all_forms"
}
```
Please be mindful of data dependencies in each step to achieve the best user experience.
For more information and in-depth guides review the [Getting Started](https://docs.gusto.com/embedded-payroll/docs/flows-getting-started) guide for flows.
scope: `flows:write`
tags:
- Flows
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Flow"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Create-Flow-Request"
required: true
x-speakeasy-name-override: create
"/v1/employees/{employee_id}/garnishments":
get:
summary: Get garnishments for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-garnishments
security:
- CompanyAccessAuth: []
description: |-
Garnishments, or employee deductions, are fixed amounts or percentages deducted from an employee’s pay. They can be deducted a specific number of times or on a recurring basis. Garnishments can also have maximum deductions on a yearly or per-pay-period bases. Common uses for garnishments are court-ordered payments for child support or back taxes. Some companies provide loans to their employees that are repaid via garnishments.
scope: `garnishments:read`
tags:
- Garnishments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Garnishment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: list
post:
summary: Create a garnishment
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-garnishments
security:
- CompanyAccessAuth: []
description: |-
Garnishments, or employee deductions, are fixed amounts or percentages deducted from an employee’s pay. They can be deducted a specific number of times or on a recurring basis. Garnishments can also have maximum deductions on a yearly or per-pay-period bases. Common uses for garnishments are court-ordered payments for child support or back taxes. Some companies provide loans to their employees that are repaid via garnishments.
scope: `garnishments:write`
tags:
- Garnishments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Garnishment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Garnishment-Request"
required: true
x-speakeasy-name-override: create
"/v1/garnishments/child_support":
get:
summary: Get child support garnishment data
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: get-v1-garnishments-child_support
security:
- CompanyAccessAuth: []
description: |-
Agency data and requirements to be used for creating child support garnishments
scope: `garnishments:read`
tags:
- Garnishments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Child-Support-Data"
x-speakeasy-name-override: getChildSupportData
"/v1/garnishments/{garnishment_id}":
get:
summary: Get a garnishment
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: garnishment_id
in: path
description: The UUID of the garnishment
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-garnishments-garnishment_id
security:
- CompanyAccessAuth: []
description: |-
Garnishments, or employee deductions, are fixed amounts or percentages deducted from an employee’s pay. They can be deducted a specific number of times or on a recurring basis. Garnishments can also have maximum deductions on a yearly or per-pay-period bases. Common uses for garnishments are court-ordered payments for child support or back taxes. Some companies provide loans to their employees that are repaid via garnishments.
scope: `garnishments:read`
tags:
- Garnishments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Garnishment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
put:
summary: Update a garnishment
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: garnishment_id
in: path
description: The UUID of the garnishment
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-garnishments-garnishment_id
security:
- CompanyAccessAuth: []
description: |-
Garnishments, or employee deductions, are fixed amounts or percentages deducted from an employee’s pay. They can be deducted a specific number of times or on a recurring basis. Garnishments can also have maximum deductions on a yearly or per-pay-period bases. Common uses for garnishments are court-ordered payments for child support or back taxes. Some companies provide loans to their employees that are repaid via garnishments.
scope: `garnishments:write`
tags:
- Garnishments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Garnishment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Update-Garnishment-Request"
required: true
x-speakeasy-name-override: update
"/v1/payrolls/{payroll_uuid}/generated_documents/printable_payroll_checks":
post:
summary: Generate printable payroll checks (pdf)
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_uuid
in: path
required: true
description: The UUID of the payroll
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-payrolls-payroll_uuid-generated_documents-printable_payroll_checks
security:
- CompanyAccessAuth: []
description: |-
This endpoint initiates the generation of employee checks for the payroll specified by payroll_uuid. A generation status and corresponding request_uuid will be returned. Use the generated document GET endpoint with document_type: `printable_payroll_checks` and request_uuid to poll the check generation process and retrieve the generated check URL upon completion.
scope: `generated_documents:write`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Check"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Printable-Payroll-Checks-Body"
required: true
x-speakeasy-name-override: generatePrintableChecks
"/v1/generated_documents/{document_type}/{request_uuid}":
get:
summary: Get a generated document
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: document_type
in: path
required: true
schema:
type: string
enum:
- printable_payroll_checks
description: The type of document being generated
- name: request_uuid
in: path
required: true
description: The UUID of the request to generate a document. Generate document endpoints return request_uuids to be used with the GET generated document endpoint.
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-generated_documents-document_type-request_uuid
security:
- CompanyAccessAuth: []
description: |-
Get a document given the request_uuid. The response will include the generation request's status and urls to the document. A list of urls is returned as certain document types require several urls.
scope: `generated_documents:read`
tags:
- Generated Documents
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Generated-Document"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: generatedDocuments
x-speakeasy-name-override: get
"/v1/companies/{company_uuid}/historical_employees":
post:
summary: Create a historical employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company that will employ this historical record.
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-historical_employees
security:
- CompanyAccessAuth: []
description: |-
Create a historical employee, an employee that was previously dismissed from the company in the current year.
scope: `employees:manage`
tags:
- Employees
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Historical-Employee-Body"
required: true
x-speakeasy-name-override: createHistorical
"/v1/companies/{company_uuid}/historical_employees/{historical_employee_uuid}":
put:
summary: Update a historical employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company that will employ this historical record.
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
schema:
type: string
- name: historical_employee_uuid
in: path
required: true
description: The UUID of the historical employee returned from create or list responses.
example: a2b3c4d-5e6f-7890-abcd-ef1234567890
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-historical_employees
security:
- CompanyAccessAuth: []
description: |-
Update a historical employee, an employee that was previously dismissed from the company in the current year.
scope: `employees:manage employees:write`
tags:
- Employees
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Historical-Employee-Body"
required: true
x-speakeasy-group: historicalEmployees
x-speakeasy-name-override: update
"/v1/companies/{company_uuid}/holiday_pay_policy":
get:
summary: Get a company's holiday pay policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-holiday_pay_policy
security:
- CompanyAccessAuth: []
description: |-
Get a company's holiday pay policy
scope: `holiday_pay_policies:read`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Holiday-Pay-Policy"
'204':
description: no policy exists
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: get
post:
summary: Create a holiday pay policy for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-holiday_pay_policy
security:
- CompanyAccessAuth: []
description: |-
Create a holiday pay policy for a company
scope: `holiday_pay_policies:write`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Holiday-Pay-Policy"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: company already has a policy
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Holiday-Pay-Policy-Request"
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: create
put:
summary: Update a company's holiday pay policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_uuid-holiday_pay_policy
security:
- CompanyAccessAuth: []
description: |-
Update a company's holiday pay policy
scope: `holiday_pay_policies:write`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Holiday-Pay-Policy"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: no policy exists
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Holiday-Pay-Policy-Request"
required: true
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: update
delete:
summary: Delete a company's holiday pay policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-companies-company_uuid-holiday_pay_policy
security:
- CompanyAccessAuth: []
description: |-
Delete a company's holiday pay policy
scope: `holiday_pay_policies:write`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'204':
description: successful
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: no policy exists
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: delete
"/v1/companies/{company_uuid}/holiday_pay_policy/add":
put:
summary: Add employees to a company's holiday pay policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_uuid-holiday_pay_policy-add
security:
- CompanyAccessAuth: []
description: |-
Add employees to a company's holiday pay policy
scope: `holiday_pay_policies:write`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Holiday-Pay-Policy"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: no policy exists
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
required:
- employees
properties:
employees:
type: array
description: An array of employee objects, each containing an employee_uuid.
items:
type: object
properties:
uuid:
type: string
required: true
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: addEmployees
"/v1/companies/{company_uuid}/holiday_pay_policy/remove":
put:
summary: Remove employees from a company's holiday pay policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_uuid-holiday_pay_policy-remove
security:
- CompanyAccessAuth: []
description: |-
Remove employees from a company's holiday pay policy
scope: `holiday_pay_policies:write`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Holiday-Pay-Policy"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: no policy exists
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
required:
- employees
properties:
employees:
type: array
description: An array of employee objects, each containing an employee_uuid.
items:
type: object
properties:
uuid:
type: string
required: true
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: removeEmployees
"/v1/employees/{employee_id}/home_addresses":
get:
summary: Get an employee's home addresses
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-home_addresses
security:
- CompanyAccessAuth: []
description: |-
The home address of an employee is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity.
Supports home address effective dating and courtesy withholding.
scope: `employees:read`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Address-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: get
post:
summary: Create an employee's home address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-home_addresses
security:
- CompanyAccessAuth: []
description: |-
The home address of an employee is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity.
Supports home address effective dating and courtesy withholding.
scope: `employees:write`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Address"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
street_1:
type: string
example: 300 3rd Street
street_2:
type:
- string
- 'null'
city:
type: string
example: San Francisco
state:
type: string
example: CA
zip:
type: string
example: '94107'
effective_date:
type:
- string
- 'null'
format: date
example: '2022-01-31'
courtesy_withholding:
type: boolean
required: true
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: create
"/v1/home_addresses/{home_address_uuid}":
get:
summary: Get an employee's home address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: home_address_uuid
in: path
description: The UUID of the home address
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-home_addresses-home_address_uuid
security:
- CompanyAccessAuth: []
description: |-
The home address of an employee is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity.
Supports home address effective dating and courtesy withholding.
scope: `employees:read`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Address"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: retrieveHomeAddress
put:
summary: Update an employee's home address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: home_address_uuid
in: path
description: The UUID of the home address
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-home_addresses-home_address_uuid
security:
- CompanyAccessAuth: []
description: |-
The home address of an employee is used to determine certain tax information about them. Addresses are geocoded on create and update to ensure validity.
Supports home address effective dating and courtesy withholding.
scope: `employees:write`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Address"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
street_1:
type: string
street_2:
type:
- string
- 'null'
city:
type: string
state:
type: string
zip:
type: string
effective_date:
type:
- string
- 'null'
format: date
courtesy_withholding:
type: boolean
required: true
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: update
delete:
summary: Delete an employee's home address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: home_address_uuid
in: path
description: The UUID of the home address
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-home_addresses-home_address_uuid
security:
- CompanyAccessAuth: []
description: |-
Used for deleting an employee's home address. Cannot delete the employee's active home address.
scope: `employees:write`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: successful
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: delete
"/v1/employees/{employee_id}/i9_authorization":
get:
summary: Get an employee's I-9 authorization
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-i9_authorization
security:
- CompanyAccessAuth: []
description: |-
An employee's I-9 authorization stores information about an employee's authorization status and I-9 signatures, information required to fill out the Form I-9 for employment eligibility verification.
**NOTE:** The `form_uuid` in responses from this endpoint can be used to retrieve the PDF version of the I-9. See the "get employee form PDF" request for more details.
### Related guides
- [I-9 employment verification](doc:i-9-employment-verification)
scope: `i9_authorizations:read`
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/I9-Authorization"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: i9Verification
x-speakeasy-name-override: getAuthorization
put:
summary: Create or update an employee's I-9 authorization
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-i9_authorization
security:
- CompanyAccessAuth: []
description: |-
An employee's I-9 authorization stores information about an employee's authorization status, as well as signatures and other information required to complete the Form I-9 for employment eligibility verification.
If the version is supplied and the employee I-9 authorization exists, this endpoint acts as an update. Otherwise, it will create an employee I-9 authorization.
Validations on this endpoint are conditional:
* `document_type` may be required, depending on `authorization_status`.
* Valid formats for `document_number` vary, depending on `document_type`.
* `country` is only allowed with `document_type: 'foreign_passport'`.
* `expiration_date` is only allowed with `authorization_status: 'alien'`.
> ℹ️ Unneeded information is automatically removed during updates.
>
> If an update causes some formerly-required fields to be unneeded, the now-unneeded data will be removed automatically.
>
> **Example:** Updating `authorization_status` from `alien` to `citizen` will cause any data in `document_type`, `document_number`, `country`, and `expiration_date` to be removed, since these fields are unused for `authorization_status:'citizen'`.
Detailed instructions for completing Form I-9 can be found at https://www.uscis.gov/sites/default/files/document/forms/i-9instr.pdf
### Related guides
- [I-9 employment verification](doc:i-9-employment-verification)
scope: `i9_authorizations:write`
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/I9-Authorization"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/I9-Authorization-Request-Body"
required: true
x-speakeasy-name-override: update
x-speakeasy-group: i9Verification
"/v1/employees/{employee_id}/i9_authorization/document_options":
get:
summary: Get an employee's I-9 verification document options
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-i9_authorization-document_options
security:
- CompanyAccessAuth: []
description: |-
An employee's I-9 verification documents are the documents an employee has provided the employer to verify their identity and authorization to work in the United States. This endpoint returns the possible document options based on the employee's authorization status. These options can then be used to create the I-9 verification documents.
### Related guides
- [I-9 employment verification](doc:i-9-employment-verification)
scope: `i9_authorizations:read`
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/I9-Authorization-Document-Option"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: i9Verification
x-speakeasy-name-override: getDocumentOptions
"/v1/employees/{employee_id}/i9_authorization/documents":
get:
summary: Get an employee's I-9 verification documents
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-i9_authorization-documents
security:
- CompanyAccessAuth: []
description: |-
An employee's I-9 verification documents are the documents an employee has provided the employer to verify their identity and authorization to work in the United States.
### Related guides
- [I-9 employment verification](doc:i-9-employment-verification)
scope: `i9_authorizations:read`
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/I9-Authorization-Document"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: i9Verification
x-speakeasy-name-override: getDocuments
put:
summary: Create an employee's I-9 authorization verification documents
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-i9_authorization-documents
security:
- CompanyAccessAuth: []
description: "An employee's I-9 verification documents are the documents an employee has provided the employer to verify their identity and authorization to work in the United States.\n\nUse the [document options endpoint](ref:get-v1-employees-employee_id-i9_authorization-document_options) to get the possible document types and titles, which can vary depending on the employee's authorization status.\n\n> \U0001F6A7 Every request must contain the complete list of documents for the Employee.\n>\n> Every request to this endpoint removes any previous verification document records for the employee.\n\n### Related guides\n- [I-9 employment verification](doc:i-9-employment-verification)\n\nscope: `i9_authorizations:manage`"
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/I9-Authorization-Document"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/I9-Authorization-Documents-Request-Body"
required: true
x-speakeasy-group: i9Verification
x-speakeasy-name-override: createDocuments
"/v1/employees/{employee_id}/i9_authorization/documents/{document_id}":
delete:
summary: Delete an employee's I-9 verification document
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: document_id
in: path
description: The UUID of the document
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employees-employee_id-i9_authorization-documents-document_id
security:
- CompanyAccessAuth: []
description: |-
An employee's I-9 verification documents are the documents an employee has provided the employer to verify their identity and authorization to work in the United States. This endpoint deletes a specific verification document.
### Related guides
- [I-9 employment verification](doc:i-9-employment-verification)
scope: `i9_authorizations:manage`
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: i9Verification
x-speakeasy-name-override: deleteDocument
"/v1/employees/{employee_id}/i9_authorization/employer_sign":
put:
summary: Employer sign an employee's Form I-9
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: x-gusto-client-ip
in: header
required: false
schema:
type: string
description: Optional header to supply the IP address. This can be used to supply the IP address for signature endpoints instead of the signed_by_ip_address parameter.
x-gusto-rswag: true
operationId: put-v1-employees-employee_id-i9_authorization-employer_sign
security:
- CompanyAccessAuth: []
description: |-
Sign an employee's Form I-9 as an employer. Once the form is signed, the employee's I-9 authorization is considered complete and cannot be modified.
### Prerequisites
Before calling this endpoint:
1. The employee must have a completed [I-9 authorization](ref:put-v1-employees-employee_id-i9_authorization)
2. The employee must have signed the Form I-9
3. [I-9 verification documents](ref:put-v1-employees-employee_id-i9_authorization-documents) must be submitted
### Related guides
- [I-9 employment verification](doc:i-9-employment-verification)
scope: `i9_authorizations:manage`
tags:
- I-9 Verification
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/I9-Authorization"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/I9-Authorization-Employer-Sign-Request-Body"
required: true
x-speakeasy-group: i9Verification
x-speakeasy-name-override: employerSign
"/v1/companies/{company_uuid}/information_requests":
get:
summary: Get all information requests for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(payroll_blocker|status|type)(:(asc|desc))?(,(payroll_blocker|status|type)(:(asc|desc))?)*$"
example: payroll_blocker:asc
description: 'Sort by one or more fields. Options: payroll_blocker, status, type. Append `:asc` or `:desc` to specify direction (e.g., `payroll_blocker:asc`). Defaults to ascending.'
x-gusto-rswag: true
operationId: get-information-requests
security:
- CompanyAccessAuth: []
description: |-
Fetch all information requests for a company.
scope: `information_requests:read`
tags:
- Information Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Information-Request"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/invoices/{invoice_period}":
get:
summary: Retrieve invoicing data for companies
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: invoice_period
in: path
required: true
description: The month we are calculating the invoice for. Must be in YYYY-MM format
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: company_uuids
in: query
required: false
description: Filter companies returned in the active_companies response, will return an error if company not active during provided invoice period. i.e. `?company_uuids=781922d8-e780-4b6b-bf74-ee303166d022,bbbca930-7322-491c-ba7f-98707a52a9c5`
schema:
type: string
x-gusto-rswag: true
operationId: get-invoices-invoice-period
security:
- SystemAccessAuth: []
description: "Retrieve data for active companies used to calculate invoices for Gusto Embedded Payroll. A company is considered active for an invoice period if they are an active partner managed company, have run payroll or created contractor payments since becoming a partner managed company, and are not suspended at any point during the invoice period. This endpoint forces pagination, with 100 results returned at a time. You can learn more about our pagination here: [pagination guide](https://docs.gusto.com/embedded-payroll/docs/pagination)\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `invoices:read`"
tags:
- Invoices
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Invoice-Data"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: get
"/v1/jobs/{job_id}":
get:
summary: Get a job
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: job_id
in: path
description: The UUID of the job
required: true
schema:
type: string
- name: include
in: query
required: false
schema:
type: string
enum:
- all_compensations
description: |
Available options:
- all_compensations: Include all effective dated compensations for each job instead of only the current compensation
x-gusto-rswag: true
operationId: get-v1-jobs-job_id
security:
- CompanyAccessAuth: []
description: |-
Get a job.
Note: Compensation data (pay rate, payment unit, and related fields) represents sensitive employee pay information. When retrieving employee job data, these fields (`rate`, `payment_unit`, `current_compensation_uuid`, `compensations`) are only returned when the `compensations:read` scope is included. This allows you to access employee and job metadata without exposing pay rates.
Compensation data in the response requires the `compensations:read` scope.
scope: `jobs:read`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Job"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: getJob
put:
summary: Update a job
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: job_id
in: path
description: The UUID of the job
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-jobs-job_id
security:
- CompanyAccessAuth: []
description: |-
Update a job.
scope: `jobs:write`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful blank title on a non-primary active job
content:
application/json:
schema:
"$ref": "#/components/schemas/Job"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Jobs-Update-Request-Body"
required: true
x-speakeasy-name-override: update
x-speakeasy-group: jobsAndCompensations
delete:
summary: Delete an individual job
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: job_id
in: path
description: The UUID of the job
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-jobs-job_id
security:
- CompanyAccessAuth: []
description: |-
Deletes a specific job that an employee holds.
scope: `jobs:write`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
responses:
'204':
description: successful
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: delete
"/v1/employees/{employee_id}/jobs":
get:
summary: Get jobs for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: include
in: query
required: false
schema:
type: string
enum:
- all_compensations
description: |
Available options:
- all_compensations: Include all effective dated compensations for each job instead of only the current compensation
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-jobs
security:
- CompanyAccessAuth: []
description: |-
Get all of the jobs that an employee holds.
Note: Compensation data (pay rate, payment unit, and related fields) represents sensitive employee pay information. When retrieving employee job data, these fields (`rate`, `payment_unit`, `current_compensation_uuid`, `compensations`) are only returned when the `compensations:read` scope is included. This allows you to access employee and job metadata without exposing pay rates.
Compensation data in the response requires the `compensations:read` scope.
scope: `jobs:read`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Job"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getJobs
x-speakeasy-group: jobsAndCompensations
post:
summary: Create a job
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-jobs
security:
- CompanyAccessAuth: []
description: |-
Create a job.
scope: `jobs:write`
tags:
- Jobs and Compensations
x-gusto-integration-type:
- embedded
responses:
'201':
description: created a primary job with a null title
content:
application/json:
schema:
"$ref": "#/components/schemas/Job"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Jobs-Create-Request-Body"
required: true
x-speakeasy-group: jobsAndCompensations
x-speakeasy-name-override: createJob
"/v1/locations/{location_uuid}/minimum_wages":
get:
summary: Get minimum wages for a location
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: location_uuid
in: path
description: The UUID of the location
required: true
schema:
type: string
- name: effective_date
in: query
required: false
example: '2020-01-31'
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-locations-location_uuid-minimum_wages
security:
- CompanyAccessAuth: []
description: |-
Get minimum wages for a location
scope: `companies:read`
tags:
- Locations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Minimum-Wage-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getMinimumWages
"/v1/locations/{location_id}":
get:
summary: Get a location
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: location_id
in: path
description: The UUID of the location
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-locations-location_id
security:
- CompanyAccessAuth: []
description: |-
Get a location.
scope: `companies:read`
tags:
- Locations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Location"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: retrieve
put:
summary: Update a location
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: location_id
in: path
description: The UUID of the location
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-locations-location_id
security:
- CompanyAccessAuth: []
description: |-
Update a location.
scope: `companies:write`
tags:
- Locations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Location"
'422':
description: Invalid state
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Invalid version param
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
phone_number:
type: string
pattern: "[0-9]{10}"
example: '8009360383'
street_1:
type: string
example: 300 3rd Street
street_2:
type:
- string
- 'null'
example: Apartment 318
city:
type: string
example: San Francisco
state:
type: string
zip:
type: string
example: '94107'
country:
type: string
mailing_address:
type: boolean
description: For a company location, specify if this location is the company's mailing address. A company has a single mailing address, so this designation will override any previous selection.
filing_address:
type: boolean
description: For a company location, specify if this location is the company's filing address. A company has a single filing address, so this designation will override any previous selection.
required: true
x-speakeasy-name-override: update
"/v1/companies/{company_id}/locations":
get:
summary: Get all company locations
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
example: 7b1d0df1-6403-4a06-8768-c1dd7d24d27a
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-locations
security:
- CompanyAccessAuth: []
description: |-
Retrieves all company locations (addresses) associated with a company: mailing addresses, filing
addresses, or work locations. A single address may serve multiple, or all, purposes.
Since all company locations are subsets of locations, use the Locations endpoints to
[get](ref:get-v1-locations-location_id) or [update](ref:put-v1-locations-location_id) an individual record.
scope: `companies:read`
tags:
- Locations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Locations-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
post:
summary: Create a company location
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-locations
security:
- CompanyAccessAuth: []
description: |-
Create a company location, which represents any address associated with a company: mailing
addresses, filing addresses, or work locations. A single address may serve multiple, or all, purposes.
Since all company locations are subsets of locations, use the Locations endpoints to
[get](ref:get-v1-locations-location_id) or [update](ref:put-v1-locations-location_id) an individual record.
scope: `companies:write`
tags:
- Locations
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Location"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Location-Request"
required: true
x-speakeasy-name-override: create
"/v1/employees/{employee_id}/member_portal_invitations":
post:
summary: Create an employee member portal invitation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-member_portal_invitations
security:
- CompanyAccessAuth: []
description: |-
Generates a member portal invitation for the specified employee. If the employee already has an invitation and its token has expired, calling this endpoint regenerates the invitation and overrides the prior token.
scope: `member_portal_invitation:write`
tags:
- Member Portal Invitations
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
get:
summary: Get an employee member portal invitation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-member_portal_invitations
security:
- CompanyAccessAuth: []
description: |-
Returns the current status of an employee's member portal invitation (`pending`, `sent`, `verified`, `complete`, or `cancelled`) along with an `expired` flag indicating whether the invitation can still be acted on by the employee.
scope: `member_portal_invitation:read`
tags:
- Member Portal Invitations
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Member-Portal-Invitation"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
delete:
summary: Cancel an employee member portal invitation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employees-employee_id-member_portal_invitations
security:
- CompanyAccessAuth: []
description: |-
Cancels the member portal invitation for the specified employee.
Note: this endpoint does not cancel the employee's self-onboarding flow. If you want the company admin to take full control of onboarding the employee, cancel the self-onboarding request instead.
scope: `member_portal_invitation:write`
tags:
- Member Portal Invitations
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/contractors/{contractor_uuid}/member_portal_invitations":
post:
summary: Create a contractor member portal invitation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-contractors-contractor_uuid-member_portal_invitations
security:
- CompanyAccessAuth: []
description: |-
Generates a member portal invitation for the specified contractor. If the contractor already has an invitation and its token has expired, calling this endpoint regenerates the invitation and overrides the prior token.
scope: `member_portal_invitation:write`
tags:
- Member Portal Invitations
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
get:
summary: Get a contractor member portal invitation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-contractors-contractor_uuid-member_portal_invitations
security:
- CompanyAccessAuth: []
description: |-
Returns the current status of a contractor's member portal invitation (`pending`, `sent`, `verified`, `complete`, or `cancelled`) along with an `expired` flag indicating whether the invitation can still be acted on by the contractor.
scope: `member_portal_invitation:read`
tags:
- Member Portal Invitations
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Member-Portal-Invitation"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
delete:
summary: Cancel a contractor member portal invitation
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: contractor_uuid
in: path
description: The UUID of the contractor
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-contractors-contractor_uuid-member_portal_invitations
security:
- CompanyAccessAuth: []
description: |-
Cancels the member portal invitation for the specified contractor.
Note: this endpoint does not cancel the contractor's self-onboarding flow. If you want the company admin to take full control of onboarding the contractor, cancel the self-onboarding request instead.
scope: `member_portal_invitation:write`
tags:
- Member Portal Invitations
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/notifications/{notification_uuid}":
get:
summary: Get a notification's details
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: notification_uuid
in: path
description: The notification entity_uuid
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-notifications-notification_uuid
security:
- CompanyAccessAuth: []
description: |-
Upon receiving a notification webhook event, use this endpoint to fetch the notification's details. The notification details include basic suggested content that can help you build notifications in your platform.
Note: partners are responsible for the delivery and any custom state management of notifications in their application. Refer to our [partner notification guide](https://docs.gusto.com/embedded-payroll/docs/partner-notifications) for more details.
If the notification UUID is not found, the response will be 404 Not Found. If the notification's supporting data is no longer valid, the response will be 422 Unprocessable Entity.
scope: `notifications:read`
tags:
- Notifications
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Notification"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: getDetails
"/v1/companies/{company_uuid}/paid_holidays":
get:
summary: Preview a company's paid holidays
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: year
in: query
required: false
description: If a year is passed, paid holidays for that year will be returned. Otherwise, paid holidays for the next three years will be returned.
schema:
type: string
example: '2023'
x-gusto-rswag: true
operationId: get-companies-company_uuid-paid_holidays
security:
- CompanyAccessAuth: []
description: |-
Preview a company's paid holidays
If a year is passed, paid holidays for that year will be returned. Otherwise, paid holidays for the next three years will be returned.
scope: `holiday_pay_policies:read`
tags:
- Holiday Pay Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Paid-Holiday"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: holidayPayPolicies
x-speakeasy-name-override: previewPaidHolidays
"/v1/partner_managed_companies/{company_uuid}/disassociate":
put:
summary: Disassociate a partner managed company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-partner-managed-companies-company-uuid-disassociate
security:
- SystemAccessAuth: []
description: "Disassociate a company from your embedded payroll product, reversing an earlier association or migration. You can only disassociate a company that is currently associated with your application.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `partner_managed_companies:disassociate`"
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Disassociate-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/partner_managed_companies/{company_uuid}/migrate":
put:
summary: Migrate company to embedded payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-partner-managed-companies-company-uuid-migrate
security:
- CompanyAccessAuth: []
description: |-
Migrate an existing Gusto customer to your embedded payroll product.
### Prerequisites
Before calling this endpoint:
1. The customer must connect their Gusto account to your application using [OAuth2](doc:oauth2)
2. The customer must view and [accept the Embedded Payroll Terms of Service](ref:post-partner-managed-companies-company_uuid-accept_terms_of_service)
### Related guides
- [Migrate an existing company](doc:migrate-existing-company)
scope: `partner_managed_companies:write`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Migrate-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Migrate-Request"
required: true
x-speakeasy-name-override: migrate
"/v1/partner_managed_companies":
post:
summary: Create a partner managed company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-partner-managed-companies
security:
- SystemAccessAuth: []
description: "Create a partner managed company. When you successfully call the API, it does the following:\n* Creates a new company in Gusto\n* Creates a new user using the provided email if the user does not already exist.\n* Makes the user the primary payroll administrator of the new company.\n\nIn response, you will receive oauth access tokens for the created company.\n\nIMPORTANT: the returned access and refresh tokens are reserved for this company only. They cannot be used to access other companies AND previously granted tokens cannot be used to access this company.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `partner_managed_companies:manage`"
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Create-Request"
required: true
x-speakeasy-name-override: createPartnerManaged
"/v1/partner_managed_companies/{company_uuid}/migration_readiness":
get:
summary: Check company migration readiness
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-partner-managed-companies-company-uuid-migration_readiness
security:
- CompanyAccessAuth: []
description: |-
Check if an existing Gusto customer is ready to be migrated to embedded payroll. This endpoint returns blockers and warnings associated with migrating the company and is recommended to be called before attempting to migrate a company.
scope: `partner_managed_companies:read`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Migration-Readiness-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/partner_managed_companies/{company_uuid}/accept_terms_of_service":
post:
summary: Accept terms of service for a company user
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-partner-managed-companies-company_uuid-accept_terms_of_service
security:
- CompanyAccessAuth: []
description: |-
Accept the Gusto Embedded Payroll's [Terms of Service](https://flows.gusto.com/terms).
The user must have a role in the company in order to accept the Terms of Service.
scope: `terms_of_services:write`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Terms-Of-Service-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Accept-Terms-Of-Service-Request"
required: true
x-speakeasy-name-override: acceptTermsOfService
"/v1/partner_managed_companies/{company_uuid}/retrieve_terms_of_service":
post:
summary: Retrieve terms of service status for a company user
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-partner-managed-companies-company_uuid-retrieve_terms_of_service
security:
- CompanyAccessAuth: []
description: |-
Retrieve the user acceptance status of the Gusto Embedded Payroll's [Terms of Service](https://flows.gusto.com/terms).
scope: `terms_of_services:read`
tags:
- Companies
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Terms-Of-Service-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Partner-Managed-Company-Retrieve-Terms-Of-Service-Request"
required: true
x-speakeasy-name-override: retrieveTermsOfService
"/v1/companies/{company_id}/pay_periods":
get:
summary: Get pay periods for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: start_date
in: query
required: false
schema:
type: string
format: date
description: Start date (YYYY-MM-DD) for the pay periods range. Defaults to 6 months ago.
- name: end_date
in: query
required: false
schema:
type: string
format: date
description: End date (YYYY-MM-DD) for the pay periods range. Cannot be more than 3 months in the future. Defaults to today.
- name: payroll_types
in: query
required: false
schema:
type: string
enum:
- regular
- transition
- regular,transition
description: Comma-separated list of payroll types to include (regular, transition). Defaults to regular only.
x-gusto-rswag: true
operationId: get-v1-companies-company_id-pay_periods
security:
- CompanyAccessAuth: []
description: |-
Pay periods are the foundation of payroll. Compensation, time & attendance, taxes, and expense reports all rely on when they happened.
To begin submitting information for a given payroll, we need to agree on the time period.
By default, this endpoint returns pay periods starting from 6 months ago to the date today. Use the `start_date` and `end_date` parameters to change the scope of the response. End dates can be up to 3 months in the future and there is no limit on start dates.
Starting in version 2023-04-01, the `eligible_employees` attribute was removed from the response. The eligible employees for a payroll are determined by the employee_compensations returned from the [PUT /v1/companies/{company_id}/payrolls/{payroll_id}/prepare](ref:put-v1-companies-company_id-payrolls-payroll_id-prepare) endpoint.
scope: `payrolls:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Pay-Period"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: paySchedules
x-speakeasy-name-override: getPayPeriods
"/v1/companies/{company_id}/pay_periods/unprocessed_termination_pay_periods":
get:
summary: Get termination pay periods for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-unprocessed_termination_pay_periods
security:
- CompanyAccessAuth: []
description: |-
When a payroll admin terminates an employee and selects "Dismissal Payroll" as the employee's final payroll, their last pay period will appear on the list.
This endpoint returns the unprocessed pay periods for past and future terminated employees in a given company.
scope: `payrolls:read`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Unprocessed-Termination-Pay-Period"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: paySchedules
x-speakeasy-name-override: getUnprocessedTerminationPeriods
"/v1/companies/{company_id}/pay_schedules":
get:
summary: Get the pay schedules for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-pay_schedules
security:
- CompanyAccessAuth: []
description: |-
Returns all pay schedules for a company. The pay schedule object captures the details of when employees work and when they should be paid. A company can have multiple pay schedules.
scope: `pay_schedules:read`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Show-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: paySchedules
x-speakeasy-name-override: getAll
post:
summary: Create a new pay schedule
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-pay_schedules
security:
- CompanyAccessAuth: []
description: |-
If a company does not have any pay schedules, this endpoint will create a single pay schedule and assign it to all employees. This is a common use case during company onboarding.
If a company has an existing active pay schedule and want to support multiple pay schedules, this endpoint will create a pay schedule that is not assigned to any employee.
Be sure to **[check state laws](https://www.dol.gov/agencies/whd/state/payday)** to know what schedule is right for your customers.
> If an onboarded company misses their first pay date, Gusto will automatically adjust the pay schedule to the next available pay date.
### Webhooks
- `pay_schedule.created`: Fires when a pay schedule is successfully created.
### Related guides
- [Create a pay schedule](doc:create-a-pay-schedule)
- [Pay Schedules](doc:pay-schedule-info)
- [Manage Pay Schedules via API](doc:manage-pay-schedules-api)
scope: `pay_schedules:write`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Show"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Create-Request"
required: true
x-speakeasy-group: paySchedules
x-speakeasy-name-override: create
"/v1/companies/{company_id}/pay_schedules/preview":
get:
summary: Preview pay schedule dates
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: frequency
in: query
required: true
schema:
type: string
enum:
- Every week
- Every other week
- Twice per month
- Monthly
example: Twice per month
description: The frequency that employees on this pay schedule are paid with Gusto.
- name: anchor_pay_date
in: query
required: true
schema:
type: string
format: date
example: '2020-05-15'
description: The first date that employees on this pay schedule are paid with Gusto.
- name: anchor_end_of_pay_period
in: query
required: true
schema:
type: string
format: date
example: '2020-05-08'
description: The last date of the first pay period. This can be the same date as the anchor pay date.
- name: day_1
in: query
required: false
schema:
type: integer
example: 15
description: An integer between 1 and 31 indicating the first day of the month that employees are paid. This field is only relevant for pay schedules with the "Twice per month" and "Monthly" frequencies. It will be null for pay schedules with other frequencies.
- name: day_2
in: query
required: false
schema:
type: integer
example: 31
description: An integer between 1 and 31 indicating the second day of the month that employees are paid. This field is the second pay date for pay schedules with the "Twice per month" frequency. For semi-monthly pay schedules, set this field to 31. For months shorter than 31 days, the second pay date is set to the last day of the month. It will be null for pay schedules with other frequencies.
- name: end_date
in: query
required: false
schema:
type: string
format: date
description: End date for the preview range. If given, this date must be in the future. When unspecified, defaults to 18 months from today.
- name: pay_schedule_uuid
in: query
required: false
schema:
type: string
format: uuid
description: Optional UUID of an existing pay schedule. When supplied, the preview is seeded from the persisted schedule — including internal flags (such as arrears handling) that affect period boundaries but are not exposed as request parameters. Any other query parameters override individual attributes on top of the loaded schedule.
x-gusto-rswag: true
operationId: get-v1-companies-company_id-pay_schedules-preview
security:
- CompanyAccessAuth: []
description: |-
Provides a preview of a pay schedule with the specified parameters for the next 18 months. Use this before creating or updating a pay schedule to show expected check dates, pay period boundaries, and payroll deadlines.
### Related guides
- [Create a pay schedule](doc:create-a-pay-schedule)
- [Manage Pay Schedules via API](doc:manage-pay-schedules-api)
scope: `pay_schedules:write`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Preview"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: paySchedules
x-speakeasy-name-override: getPreview
"/v1/companies/{company_id}/pay_schedules/{pay_schedule_id}":
get:
summary: Get a pay schedule
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: pay_schedule_id
in: path
description: The UUID of the pay schedule
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-pay_schedules-pay_schedule_id
security:
- CompanyAccessAuth: []
description: |-
Returns a single pay schedule by UUID. The pay schedule object in Gusto captures the details of when employees work and when they should be paid. A company can have multiple pay schedules.
scope: `pay_schedules:read`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Show"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
x-speakeasy-group: paySchedules
put:
summary: Update a pay schedule
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: pay_schedule_id
in: path
description: The UUID of the pay schedule
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-pay_schedules-pay_schedule_id
security:
- CompanyAccessAuth: []
description: |-
Updates a pay schedule. The `version` parameter from the GET response is required for [optimistic concurrency](doc:api-fundamentals); a mismatch returns 409 Conflict.
### Effect on payrolls
Updating a pay schedule will delete any unprocessed regular payrolls whose pay period end date is today or in the future. Already-processed payrolls are not affected.
### Pay schedules may be automatically adjusted
If an onboarded company misses their first pay date, Gusto will automatically adjust the pay schedule to the next available pay date.
### Webhooks
- `pay_schedule.updated`: Fires when a pay schedule is successfully updated.
### Related guides
- [Create a pay schedule](doc:create-a-pay-schedule)
- [Manage Pay Schedules via API](doc:manage-pay-schedules-api)
scope: `pay_schedules:write`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Show"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Update-Request"
required: true
x-speakeasy-group: paySchedules
x-speakeasy-name-override: update
"/v1/companies/{company_id}/pay_schedules/assignment_preview":
post:
summary: Preview pay schedule assignments for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-pay_schedules-assignment_preview
security:
- CompanyAccessAuth: []
description: |-
This endpoint returns the employee changes, including pay period and transition pay periods, for changing the pay schedule.
scope: `pay_schedules:write`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Preview"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Body"
required: true
x-speakeasy-group: paySchedules
x-speakeasy-name-override: previewAssignment
"/v1/companies/{company_id}/pay_schedules/assign":
post:
summary: Assign pay schedules for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-pay_schedules-assign
security:
- CompanyAccessAuth: []
description: |-
This endpoint assigns employees to pay schedules based on the schedule type.
For `by_employee` and `by_department` schedules, use the `partial_assignment` parameter to control the assignment scope. Set it to `true` for partial assignments (only some employees or departments at a time) and `false` for full assignments (all employees or departments at once).
scope: `pay_schedules:write`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
responses:
'200':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Assignment-Body"
required: true
x-speakeasy-group: paySchedules
x-speakeasy-name-override: assign
"/v1/companies/{company_id}/pay_schedules/assignments":
get:
summary: Get pay schedule assignments for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-pay_schedules-assignments
security:
- CompanyAccessAuth: []
description: |-
This endpoint returns the current pay schedule assignment for a company, with pay schedule and employee/department mappings depending on the pay schedule type.
scope: `pay_schedules:read`
tags:
- Pay Schedules
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Pay-Schedule-Assignment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: paySchedules
x-speakeasy-name-override: getAssignments
"/v1/employees/{employee_id}/pay_stubs":
get:
summary: Get an employee's pay stubs
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-employees-employee_uuid-pay_stubs
security:
- CompanyAccessAuth: []
description: |-
Get an employee's pay stubs.
Results are returned in reverse chronological order (newest first).
scope: `pay_stubs:read`
x-gusto-integration-type:
- embedded
tags:
- Payrolls
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Pay-Stubs-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getPayStubs
"/v1/payrolls/{payroll_id}/employees/{employee_id}/pay_stub":
get:
summary: Get an employee pay stub (pdf)
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-payrolls-payroll_uuid-employees-employee_uuid-pay_stub
security:
- CompanyAccessAuth: []
description: |-
Get an employee's pay stub for the specified payroll. By default, an application/pdf response will be returned. No other content types are currently supported, but may be supported in the future.
scope: `pay_stubs:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/pdf:
schema:
type: string
format: binary
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getPayStub
"/v1/companies/{company_id}/payrolls/{id}/partner_disbursements":
get:
summary: Get partner disbursements for a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_id-payrolls-id-partner_disbursements
security:
- CompanyAccessAuth: []
description: |-
Get partner disbursements for a specific payroll.
scope: `partner_disbursements:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Partner-Disbursements"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
patch:
summary: Update partner disbursements for a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: patch-v1-companies-company_id-payrolls-id-partner_disbursements
security:
- CompanyAccessAuth: []
description: |-
Update partner disbursements for a specific payroll.
scope: `partner_disbursements:write`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Partner-Disbursements"
'422':
description: mixed single and multiple errors example
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
disbursements:
type: array
items:
type: object
properties:
employee_uuid:
type: string
description: UUID of the employee
example: 1a2b3c4d-5e6f-7890-abcd-ef1234567890
payment_method:
type: string
enum:
- Direct Deposit
- Check
description: Payment method for the employee
payment_status:
type: string
enum:
- Pending
- Paid
- Not partner managed
- Converted to check
description: Status of the payment disbursement
required:
- employee_uuid
required:
- disbursements
"/v1/payroll_batches":
post:
summary: Create a payroll cancellation batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-payroll_batches
security:
- SystemAccessAuth: []
description: "Cancels up to 100 payrolls across one or more companies the partner is mapped to, asynchronously.\n\nThe batch is processed asynchronously. Use the returned batch UUID to poll `GET /v1/payroll_batches/{payroll_batch_uuid}` for status and per-payroll results.\n\nEach item carries the payroll `uuid` and the `company_uuid` that owns it. A payroll whose company is not mapped to the partner — or that doesn't exist — is recorded as a `not_found` exclusion rather than a hard error, so every requested UUID lands in either `results` or `exclusions`.\n\nIdempotency is scoped per `(partner, idempotency_key)`. A duplicate POST with the same `idempotency_key` returns a 409 Conflict referencing the existing batch UUID — no duplicate processing occurs.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `payroll_batches:write`"
tags:
- Payroll Cancellations
x-gusto-integration-type:
- embedded
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Batch"
'409':
description: conflict - idempotency key already used by this partner
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Batch-Conflict-Error"
'422':
description: unprocessable entity - validation errors
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- idempotency_key
- batch_action
- batch
properties:
idempotency_key:
type: string
format: uuid
description: A partner-generated unique identifier to ensure idempotency of the batch request. Scoped per partner.
example: 80a74f8b-2c16-45e5-9038-aa108849c6e6
batch_action:
type: string
enum:
- cancel
description: The action to perform on the batch. Only `cancel` is supported.
example: cancel
batch:
type: array
description: Array of payrolls to cancel. Maximum 100 payrolls per request.
minItems: 1
maxItems: 100
items:
type: object
required:
- entity_type
- uuid
- company_uuid
properties:
entity_type:
type: string
enum:
- payroll
description: The type of entity to act on.
example: payroll
uuid:
type: string
format: uuid
description: The UUID of the payroll to cancel. Payrolls the partner is not authorized to access, or that do not exist, appear in the response's `exclusions` array.
company_uuid:
type: string
format: uuid
description: The UUID of the company that owns the payroll. The partner must be mapped to this company.
required: true
"/v1/payroll_batches/{payroll_batch_uuid}":
get:
summary: Get a payroll cancellation batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_batch_uuid
in: path
description: The UUID of the payroll cancellation batch returned by `POST /v1/payroll_batches`.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-payroll_batches-payroll_batch_uuid
security:
- SystemAccessAuth: []
description: "Returns the status and per-payroll results of a payroll cancellation batch.\n\nPoll this endpoint until the batch `status` reaches a terminal value (`completed` or `failed`). Once terminal, the response includes the `results` array (one entry per authorized payroll, each with its own per-payroll `status` — `success` or `failed`) and the `exclusions` array (one entry per payroll that could not be processed). A cancel is atomic, so a per-payroll result is only ever `success` or `failed` — never `partial_success`.\n\nNote that the top-level batch `status` (`pending` / `processing` / `completed` / `failed`) is the request lifecycle, distinct from the per-payroll `status` inside `results[]`. A `completed` batch does not imply every payroll was cancelled — inspect the array for per-payroll outcomes.\n\nResults are stored in Redis with a limited TTL after completion. If the partner polls after results have expired, this endpoint returns 410 Gone — partners should re-submit a new batch.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `payroll_batches:read`"
tags:
- Payroll Cancellations
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Batch-Results"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'410':
description: Gone - results have expired from Redis
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/payroll_digests":
post:
summary: Create a payroll digest batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-payroll_digests
security:
- SystemAccessAuth: []
description: "Triggers an asynchronous computation of payroll digest data (statuses, blockers, pay periods, totals) across up to 25 companies that the partner is mapped to.\n\nThe batch is processed asynchronously. Use the returned batch UUID to poll `GET /v1/payroll_digests/{payroll_digest_uuid}` for status and results.\n\nIdempotency is scoped per `(partner, idempotency_key)`. A duplicate POST with the same `idempotency_key` returns a 409 Conflict referencing the existing batch UUID — no duplicate computation occurs.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `payroll_digests:write`"
tags:
- Payroll Digests
x-gusto-integration-type:
- embedded
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Digest"
'409':
description: conflict - idempotency key already used by this partner
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Digest-Conflict-Error"
'422':
description: unprocessable entity - validation errors
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- idempotency_key
- batch_action
- batch
properties:
idempotency_key:
type: string
format: uuid
description: A partner-generated unique identifier to ensure idempotency of the batch request. Scoped per partner.
example: 80a74f8b-2c16-45e5-9038-aa108849c6e6
batch_action:
type: string
enum:
- create
description: The action to perform on the batch.
example: create
batch:
type: array
description: Array of companies to fetch payroll digest data for. Maximum 25 companies per request.
minItems: 1
maxItems: 25
items:
type: object
required:
- entity_type
- uuid
properties:
entity_type:
type: string
enum:
- company
description: The type of entity to look up.
example: company
uuid:
type: string
format: uuid
description: The UUID of a company that the partner is mapped to. Companies that the partner is not authorized to access will appear in the response's `exclusions` array.
required: true
"/v1/payroll_digests/{payroll_digest_uuid}":
get:
summary: Get a payroll digest batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_digest_uuid
in: path
description: The UUID of the payroll digest batch returned by `POST /v1/payroll_digests`.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-payroll_digests-payroll_digest_uuid
security:
- SystemAccessAuth: []
description: "Returns the status and results of a payroll digest batch.\n\nPoll this endpoint until the batch `status` reaches a terminal value (`completed` or `failed`). Once terminal, the response includes the full `results` array (one entry per attempted company, each with its own per-company `status` — `success`, `partial_success`, or `failed`) and the `exclusions` array (one entry per company that could not be looked up or processed).\n\nNote that the top-level batch `status` (`pending` / `processing` / `completed` / `failed`) is distinct from the per-company `status` returned inside `results[]` and `exclusions[]`. A `completed` batch does not imply every company succeeded — inspect the arrays for per-company outcomes.\n\nResults are stored in Redis with a short TTL after completion. If the partner polls after results have expired, this endpoint returns 410 Gone — partners should re-submit a new batch to fetch fresh data.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `payroll_digests:read`"
tags:
- Payroll Digests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Digest-Results"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'410':
description: Gone - results have expired from Redis
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_id}/payroll_reversals":
get:
summary: Get approved payroll reversals
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_id-payroll_reversals
security:
- CompanyAccessAuth: []
description: |-
Returns all approved Payroll Reversals for a Company.
scope: `payrolls:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Reversal-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getApprovedReversals
"/v1/companies/{company_id}/payrolls/{payroll_id}":
get:
summary: Get a single payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
- name: include
in: query
explode: false
required: false
schema:
type: array
items:
type: string
enum:
- benefits
- deductions
- taxes
- payroll_status_meta
- totals
- risk_blockers
- reversals
- payroll_taxes
description: Include the requested attribute in the response, for multiple attributes comma separate the values, i.e. `?include=benefits,deductions,taxes`
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(first_name|last_name)(:(asc|desc))?(,(first_name|last_name)(:(asc|desc))?)*$"
example: first_name:asc
description: 'Sort employee compensations by one or more fields. Options: first_name, last_name. Append `:asc` or `:desc` to specify direction (e.g., `last_name:asc` or `last_name:asc,first_name:asc`). Defaults to ascending.'
x-gusto-rswag: true
operationId: get-v1-companies-company_id-payrolls-payroll_id
security:
- CompanyAccessAuth: []
description: |-
Returns a payroll. If payroll is calculated or processed, will return employee_compensations and totals.
Results are paginated, with a maximum page size of 100 employee_compensations.
Notes:
* Hour and dollar amounts are returned as string representations of numeric decimals.
* Hours are represented to the thousands place; dollar amounts are represented to the cent.
* Every eligible compensation is returned for each employee. If no data has yet be inserted for a given field, it defaults to "0.00" (for fixed amounts) or "0.000" (for hours ).
* When include parameter with benefits value is passed, employee_benefits:read scope is required to return benefits
* Benefits containing PHI are only visible with the `employee_benefits:read:phi` scope
scope: `payrolls:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful with wait_for_reverse_wire credit blocker
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Show"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: get
put:
summary: Update a payroll by ID
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-payrolls
security:
- CompanyAccessAuth: []
description: |-
This endpoint allows you to update information for one or more employees for a specific **unprocessed** payroll. You can think of the **unprocessed**
payroll object as a template of fields that you can update. You cannot modify the structure of the payroll object through this endpoint, only values
of the fields included in the payroll. If you do not include specific employee compensations, fixed/hourly compensations, or deductions in your request body, they
will not be removed from the payroll. A maximum of 100 employee_compensations can be updated at a time. Only the employee compensation objects that were
inputted will be returned.
scope: `payrolls:write`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Prepared"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'409':
description: Conflict (lock contention)
content:
application/json:
schema:
"$ref": "#/components/schemas/Conflict-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Update"
required: true
x-speakeasy-name-override: update
delete:
summary: Delete a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
- name: async
in: query
description: When true, request an asynchronous delete of the payroll.
schema:
type: boolean
x-gusto-rswag: true
operationId: delete-v1-companies-company_id-payrolls
security:
- CompanyAccessAuth: []
description: |-
This endpoint allows you to delete an **unprocessed** payroll.
By default the payroll and associated data is deleted synchronously. To request an asynchronous delete, use the `async=true` query parameter. In both cases validation of ability to delete will be performed and an Unprocessable Entity error will be returned if the payroll is not able to be deleted. A successful synchronous delete will return `204/No Content`. When a payroll has been enqueued for asynchronous deletion, `202/Accepted` will be returned.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'204':
description: no content
'202':
description: Accepted
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: delete
"/v1/companies/{company_id}/payrolls":
get:
summary: Get all payrolls for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: processing_statuses
in: query
required: false
explode: false
description: Whether to include processed and/or unprocessed payrolls in the response, defaults to processed, for multiple attributes comma separate the values, i.e. `?processing_statuses=processed,unprocessed`
schema:
type: array
items:
type: string
enum:
- processed
- unprocessed
- name: payroll_types
in: query
required: false
explode: false
description: Whether to include regular and/or off_cycle payrolls in the response, defaults to regular, for multiple attributes comma separate the values, i.e. `?payroll_types=regular,off_cycle`
schema:
type: array
items:
type: string
enum:
- regular
- off_cycle
- external
- name: processed
in: query
required: false
description: Whether to return processed or unprocessed payrolls
schema:
type: boolean
- name: include_off_cycle
in: query
required: false
description: Whether to include off cycle payrolls in the response
schema:
type: boolean
- name: include
in: query
explode: false
required: false
schema:
type: array
items:
type: string
enum:
- taxes
- payroll_status_meta
- totals
- risk_blockers
- reversals
description: Include the requested attribute in the response, for multiple attributes comma separate the values, i.e. `?include=benefits,deductions,taxes`
- name: start_date
in: query
required: false
example: '2020-01-31'
description: Return payrolls whose pay period is after the start date
schema:
type: string
- name: end_date
in: query
required: false
example: '2020-01-31'
description: Return payrolls whose pay period is before the end date. If left empty, defaults to today's date.
schema:
type: string
- name: date_filter_by
in: query
required: false
description: Specifies which date field to use when filtering payrolls with start_date and end_date. This field applies only to regular processed payrolls and defaults to pay period if not provided.
schema:
type: string
enum:
- check_date
example: check_date
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: sort_order
in: query
required: false
description: A string indicating whether to sort resulting events in ascending (asc) or descending (desc) chronological order. Events are sorted by their `timestamp`. Defaults to asc if left empty.
schema:
type: string
enum:
- asc
- desc
example: asc
x-gusto-rswag: true
operationId: get-v1-companies-company_id-payrolls
security:
- CompanyAccessAuth: []
description: |-
Returns a list of payrolls for a company. You can change the payrolls returned by updating the processing_status, payroll_types, start_date, & end_date params.
By default, will return processed, regular payrolls for the past 6 months.
Notes:
* Dollar amounts are returned as string representations of numeric decimals, are represented to the cent.
* end_date can be at most 3 months in the future and start_date and end_date can't be more than 1 year apart.
* Results are paginated. Maximum page size is 100 payrolls per request; the default page size is 25.
scope: `payrolls:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: list
post:
summary: Create an off-cycle payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-payrolls
security:
- CompanyAccessAuth: []
description: |-
Creates a new, unprocessed, off-cycle payroll.
## `off_cycle_reason`
By default:
- External benefits and deductions will be included when the `off_cycle_reason` is set to `Correction`.
- All benefits and deductions are blocked when the `off_cycle_reason` is set to `Bonus`.
These elections can be overridden with the `skip_regular_deductions` boolean.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Unprocessed"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- off_cycle
- off_cycle_reason
- start_date
- end_date
properties:
off_cycle:
type: boolean
description: Whether it is an off cycle payroll.
off_cycle_reason:
type: string
enum:
- Bonus
- Correction
- Adhoc
- Dismissed employee
- Transition from old pay schedule
description: An off cycle payroll reason. Select one from the following list.
start_date:
type: string
format: date
description: Pay period start date.
end_date:
type: string
format: date
description: Pay period end date.
pay_schedule_uuid:
description: A pay schedule is required for transition from old pay schedule payroll to identify the matching transition pay period.
type: string
employee_uuids:
description: A list of employee uuids to include on the payroll.
type:
- array
- 'null'
items:
type: string
check_date:
type: string
format: date
description: Payment date.
withholding_pay_period:
description: The payment schedule tax rate the payroll is based on.
type: string
enum:
- Every week
- Every other week
- Twice per month
- Monthly
- Quarterly
- Semiannually
- Annually
skip_regular_deductions:
description: Block regular deductions and contributions for this payroll.
type: boolean
fixed_withholding_rate:
description: Enable taxes to be withheld at the IRS's required rate of 22% for federal income taxes. State income taxes will be taxed at the state's supplemental tax rate. Otherwise, we'll sum the entirety of the employee's wages and withhold taxes on the entire amount at the rate for regular wages.
type: boolean
is_check_only_payroll:
description: When true, all employees in the payroll will be paid by check and the check date can be set to today or any future business day (rather than requiring ACH lead time). Payment methods cannot be changed on check-only payrolls.
type: boolean
x-speakeasy-name-override: createOffCycle
"/v1/payrolls/{payroll_uuid}/receipt":
get:
summary: Get a single payroll receipt
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_uuid
in: path
description: The UUID of the payroll
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-payment-receipts-payrolls-payroll_uuid
security:
- CompanyAccessAuth: []
description: |-
Returns a payroll receipt.
Notes:
* Hour and dollar amounts are returned as string representations of numeric decimals.
* Dollar amounts are represented to the cent.
* If no data has yet be inserted for a given field, it defaults to "0.00" (for fixed amounts).
* Pagination is optional. Supplying `page` and/or `per` returns only the requested page of employee compensations and includes the `X-Page`, `X-Total-Count`, `X-Total-Pages`, and `X-Per-Page` response headers. Without either parameter, all employee compensations are returned without pagination headers.
* Maximum page size is 100 employee compensations per request.
scope: `payrolls:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Receipt"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getReceipt
"/v1/companies/{company_id}/payrolls/{payroll_id}/cancel":
put:
summary: Cancel a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-api-v1-companies-company_id-payrolls-payroll_id-cancel
security:
- CompanyAccessAuth: []
description: |-
Transitions a `processed` payroll back to the `unprocessed` state. A payroll can be canceled if it meets both criteria:
- `processed` is `true`
- Current time is earlier than 4pm PT on the `payroll_deadline`
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessed-Payroll"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: cancel
"/v1/companies/{company_id}/payrolls/{payroll_id}/prepare":
put:
summary: Prepare a payroll for update
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(first_name|last_name)(:(asc|desc))?(,(first_name|last_name)(:(asc|desc))?)*$"
example: first_name:asc
description: 'Sort employee compensations by one or more fields. Options: first_name, last_name. Append `:asc` or `:desc` to specify direction (e.g., `last_name:asc` or `last_name:asc,first_name:asc`). Defaults to ascending.'
x-gusto-rswag: true
operationId: put-v1-companies-company_id-payrolls-payroll_id-prepare
security:
- CompanyAccessAuth: []
description: |-
Prepares an unprocessed payroll for update, including: adding eligible employees to off-cycle payrolls that support multiple employees (`Bonus`, `Correction`, and `Adhoc`),
and updating `check_date`, `payroll_deadline`, and `payroll_status_meta` dates and times.
Use this endpoint before calling [PUT /v1/companies/{company_id}/payrolls/{payroll_id}](ref:put-v1-companies-company_id-payrolls).
### Notes
* Nullifies `calculated_at` and `totals` if the payroll was previously calculated
* Returns the `version` parameter required for [updating the payroll](ref:put-v1-companies-company_id-payrolls)
* `employees:read` scope is required to include employee compensations data in the response.
* Results are paginated, with a maximum page size of 100 employee compensations.
scope: `payrolls:write employees:read`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Prepared"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
employee_uuids:
type:
- array
- 'null'
description: |-
The employees to prepare, identified by UUID. If omitted, every employee currently on the payroll is prepared.
**Off-cycle payrolls that support multiple employees (`Bonus`, `Correction`, `Adhoc`):** passing `employee_uuids` also adds eligible employees who aren't yet on the payroll - a listed employee not on the payroll is added, while one already on it is simply prepared. A request may include up to 100 UUIDs, of which at most 25 may be employees not already on the payroll; an ineligible or unknown UUID, or more than 25 new employees, is rejected with a 422.
**All other payrolls:** `employee_uuids` selects which of the payroll's existing employees to prepare; a UUID for an employee not on the payroll is rejected with a 422.
items:
type: string
x-speakeasy-name-override: prepare
"/v1/companies/{company_id}/payrolls/{payroll_id}/calculate":
put:
summary: Calculate a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-payrolls-payroll_id-calculate
security:
- CompanyAccessAuth: []
description: |-
Performs calculations for taxes, benefits, and deductions for an unprocessed payroll. The calculated payroll details provide a preview of the actual values that will be used when the payroll is run.
This calculation is asynchronous and a successful request responds with a 202 HTTP status. To view the details of the calculated payroll, use the GET /v1/companies/{company_id}/payrolls/{payroll_id} endpoint with *include=taxes,benefits,deductions* params.
If the company is blocked from running payroll due to issues like incomplete setup, missing information or other compliance issues, the response will be 422 Unprocessable Entity with a categorization of the blockers as described in the error responses.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'202':
description: Accepted
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: calculate
"/v1/companies/{company_uuid}/payrolls/blockers":
get:
summary: Get all payroll blockers for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-payroll-blockers-company_uuid
security:
- CompanyAccessAuth: []
description: |-
Returns a list of reasons that prevent the company from running payrolls. See the [Payroll Blockers guide](doc:payroll-blockers) for a complete list of reasons. The list is empty if there are no payroll blockers.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Payroll-Blocker"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getBlockers
"/v1/companies/{company_uuid}/payrolls/skip":
post:
summary: Skip a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-companies-payroll-skip-company_uuid
security:
- CompanyAccessAuth: []
description: |-
Submits a $0 payroll for employees associated with the pay schedule to skip payroll. This submission is asynchronous and a successful request responds with a 202 HTTP status. Upon success, the payroll is transitioned to the `processed` state.
If the company is blocked from running payroll due to issues like incomplete setup, missing information or other compliance issues, the response will be 422 Unprocessable Entity with a categorization of the blockers as described in the error responses.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'202':
description: Accepted
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Blockers-Error"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Conflict-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
payroll_type:
type: string
description: Payroll type
enum:
- Regular
- Hired employee
- Dismissed employee
- Transition from old pay schedule
start_date:
type: string
description: Pay period start date
end_date:
type: string
description: Pay period end date. If left empty, defaults to today's date.
pay_schedule_uuid:
type: string
description: The UUID of the pay schedule
employee_uuids:
description: An array of employees. This field is only applicable to new hire payroll and termination payroll
type:
- array
- 'null'
items:
type: string
required:
- payroll_type
required: true
x-speakeasy-name-override: skip
"/v1/companies/{company_id}/payrolls/{payroll_id}/submit":
put:
summary: Submit payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_id-payrolls-payroll_id-submit
security:
- CompanyAccessAuth: []
description: |-
Submits an unprocessed payroll to be calculated and run. This submission is asynchronous and a successful request responds with a 202 HTTP status. Upon success, transitions the payroll to the `processed` state.
You should poll to ensure that payroll is processed successfully, as async errors only occur after async processing is complete.
If the company is blocked from running payroll due to issues like incomplete setup, missing information or other compliance issues, the response will be 422 Unprocessable Entity with a categorization of the blockers as described in the error responses.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'202':
description: Accepted
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
submission_blockers:
type: array
description: An array of submission_blockers, each with a selected unblock option.
items:
"$ref": "#/components/schemas/Payroll-Submission-Blocker-Request-Type"
x-speakeasy-name-override: submit
"/v1/payrolls/{payroll_uuid}/gross_up":
post:
summary: Calculate gross up for a payroll
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_uuid
in: path
description: The UUID of the payroll
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-payrolls-gross-up-payroll_uuid
security:
- CompanyAccessAuth: []
description: |-
Calculates gross up earnings for an employee's payroll, given net earnings. This endpoint is only applicable to off-cycle unprocessed payrolls.
The gross up amount must then be mapped to the corresponding fixed compensation earning type to get the correct payroll amount. For example, for bonus off-cycles, the gross up amount should be set with the Bonus earning type in the payroll `fixed_compensations` field.
scope: `payrolls:run`
tags:
- Payrolls
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Gross-Up-Response"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Gross-Up-Request"
required: true
x-speakeasy-name-override: calculateGrossUp
"/v1/payrolls/{payroll_id}/employees/{employee_id}/calculate_accruing_time_off_hours":
post:
summary: Calculate accruing time off hours
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_id
in: path
description: The UUID of the payroll
required: true
schema:
type: string
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-payrolls-payroll_id-calculate_accruing_time_off_hours
security:
- CompanyAccessAuth: []
description: |-
Returns a list of accruing time off for each time off policy associated with the employee.
Factors affecting the accrued hours:
- the time off policy accrual method (whether they get pay per hour worked, per hour paid, with / without overtime, accumulate time off based on pay period / calendar year / anniversary)
- how many hours of work during this pay period
- how many hours of PTO / sick hours taken during this pay period (for per hour paid policies only)
- company pay schedule frequency (for per pay period)
If none of the parameters is passed in, the accrued time off hour will be 0.
scope: `payrolls:read`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Calculate-Accruing-Time-Off-Hours-Response"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Payroll-Calculate-Accruing-Time-Off-Hours-Request"
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: calculateAccruingTimeOffHours
"/v1/companies/{company_id}/people_batches":
post:
summary: Create a people batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_id
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_id-people_batches
security:
- CompanyAccessAuth: []
description: |-
Creates a batch for bulk employee creation.
The batch is processed asynchronously. Use the returned batch UUID to poll for status and results.
scope: `people_batches:write`
tags:
- People Batches
x-gusto-integration-type:
- embedded
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/People-Batch"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: conflict - idempotency key already used
content:
application/json:
schema:
"$ref": "#/components/schemas/People-Batch-Conflict-Error"
'422':
description: unprocessable entity - validation errors
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- idempotency_key
- batch_action
- batch
properties:
idempotency_key:
type: string
format: uuid
description: A unique identifier to ensure idempotency of the batch request
example: 550e8400-e29b-41d4-a716-446655440000
batch_action:
type: string
enum:
- create
description: The action to perform on the batch
example: create
batch:
type: array
description: Array of people to create
items:
type: object
required:
- entity_type
- person
properties:
entity_type:
type: string
enum:
- employee
description: The type of entity to create
example: employee
person:
type: object
required:
- external_id
- first_name
- last_name
properties:
external_id:
type: string
description: External identifier for the person
first_name:
type: string
description: Legal first name
last_name:
type: string
description: Legal last name
middle_initial:
type:
- string
- 'null'
maxLength: 1
minLength: 1
description: Middle initial
preferred_first_name:
type:
- string
- 'null'
description: Preferred first name
email:
type:
- string
- 'null'
format: email
description: Personal email address
work_email:
type:
- string
- 'null'
format: email
description: Work email address
ssn:
type:
- string
- 'null'
description: 'Social Security Number (format: xxx-xx-xxxx)'
date_of_birth:
type:
- string
- 'null'
format: date
description: Date of birth (YYYY-MM-DD)
self_onboarding:
type:
- boolean
- 'null'
description: Whether the employee will complete their own onboarding
home_address:
type: object
description: Home address for the employee
required:
- street_1
- city
- state
- zip
properties:
street_1:
type: string
description: Street address line 1
street_2:
type: string
description: Street address line 2
city:
type: string
description: City
state:
type: string
description: State abbreviation
zip:
type: string
description: ZIP code
country:
type: string
description: Country (defaults to USA)
work_from_home:
type: boolean
description: If true, a company work address will be created based on this home address and the `work_address` property is not allowed.
work_address:
type: object
description: Specify the company work location for the employee
required:
- location_uuid
properties:
location_uuid:
type: string
format: uuid
description: UUID of an existing company work location
job:
type: object
description: Job details for the employee (required if compensation is provided)
required:
- title
- hire_date
properties:
title:
type: string
description: Job title
hire_date:
type: string
format: date
description: The date when the employee was hired or rehired for the job.
two_percent_shareholder:
type: boolean
description: Whether the employee owns at least 2% of the company. Can only be `true` for S-Corp companies.
state_wc_covered:
type:
- boolean
- 'null'
description: Whether this job is eligible for workers' compensation coverage in the state of Washington (WA).
state_wc_class_code:
type:
- string
- 'null'
description: The risk class code for workers' compensation in Washington state. Please visit [Washington state's Risk Class page](https://www.lni.wa.gov/insurance/rates-risk-classes/risk-classes-for-workers-compensation/risk-class-lookup#/) to learn more.
department:
type: object
description: Department details for the employee
required:
- department_uuid
properties:
department_uuid:
type: string
format: uuid
description: UUID of an existing company department
compensation:
type: object
description: Compensation details for the employee (requires job to be provided)
required:
- rate
- payment_unit
- flsa_status
properties:
rate:
type: string
description: The dollar amount paid per payment unit.
payment_unit:
type: string
enum:
- Hour
- Week
- Month
- Year
- Paycheck
description: The unit accompanying the compensation rate. If the employee is an owner, rate should be `Paycheck`.
flsa_status:
type: string
enum:
- Exempt
- Salaried Nonexempt
- Nonexempt
- Owner
- Commission Only Exempt
- Commission Only Nonexempt
description: The FLSA status for this compensation. Salaried ('Exempt') employees are paid a fixed salary every pay period. Salaried with overtime ('Salaried Nonexempt') employees are paid a fixed salary every pay period, and receive overtime pay when applicable. Hourly ( 'Nonexempt') employees are paid for the hours they work, and receive overtime pay when applicable. Commissioned employees ('Commission Only Exempt') earn wages based only on commission. Commissioned with overtime ('Commission Only Nonexempt') earn wages based on commission, and receive overtime pay when applicable. Owners ('Owner') are employees that own at least twenty percent of the company. If selecting `Owner`, `payment_unit` must be `"Paycheck"`.
bank_accounts:
type: array
description: |-
Creates employee bank account(s) and payment method(s) for direct deposit. Payments can be split across accounts by Percentage or by Amount. If splitting payments by `Percentage`, all splits must have a `split_amount` and the percentages must add up to `100`.
If splitting payments by `Amount`, the priority is set based on the order of the bank accounts in the array and the last bank account is the remainder account (should have `split_amount` set to `null`).
items:
type: object
required:
- type
- account_type
- routing_number
- account_number
- split_by
properties:
name:
type:
- string
- 'null'
description: Account nickname
account_type:
type: string
enum:
- Checking
- Savings
description: Type of bank account
routing_number:
type: string
description: Bank routing number
account_number:
type: string
description: Bank account number
type:
type: string
enum:
- Direct Deposit
description: Payment type (must be Direct Deposit)
split_by:
type: string
enum:
- Amount
- Percentage
description: How to split deposits, must be the same for all bank accounts. If split_by is `Percentage`, then the split_amounts must add up to exactly 100.
split_amount:
type:
- string
- 'null'
description: Split amount in percentage or CENTS (`null` for remainder account)
required: true
"/v1/people_batches/{people_batch_uuid}":
get:
summary: Get a people batch
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: people_batch_uuid
in: path
description: The UUID of the people batch
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-people_batches-people_batch_uuid
security:
- CompanyAccessAuth: []
description: |-
Returns the status and results of a people batch.
Poll this endpoint to check the batch processing status and retrieve results.
scope: `people_batches:read`
tags:
- People Batches
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/People-Batch-Results"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/plaid/processor_token":
post:
summary: Create a bank account from a plaid processor token
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-plaid-processor_token
security:
- CompanyAccessAuth: []
description: "This endpoint creates a new **verified** bank account by using a plaid processor token to retrieve its information.\n\n> \U0001F4D8\n> To create a token please use the [plaid api](https://plaid.com/docs/api/processors/#processortokencreate) and select \"gusto\" as processor.\n\n> \U0001F6A7 Warning - Company Bank Accounts\n>\n> If a default company bank account exists, it will be disabled and the new bank account will replace it as the company's default funding method.\n\nscope: `plaid_processor:write`"
tags:
- Bank Accounts
x-gusto-integration-type:
- embedded
responses:
'201':
description: A JSON object containing bank information
content:
application/json:
schema:
"$ref": "#/components/schemas/Company-Bank-Account"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Plaid-Processor-Token-Request"
required: true
x-speakeasy-group: bankAccounts
x-speakeasy-name-override: createFromPlaidToken
"/v1/companies/{company_uuid}/recovery_cases":
get:
summary: Get all recovery cases for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-recovery-cases
security:
- CompanyAccessAuth: []
description: |-
Fetch all recovery cases for a company.
scope: `recovery_cases:read`
tags:
- Recovery Cases
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Recovery-Case"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: recoveryCases
x-speakeasy-name-override: get
"/v1/recovery_cases/{recovery_case_uuid}/redebit":
put:
summary: Initiate a redebit for a recovery case
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: recovery_case_uuid
in: path
required: true
description: The UUID of the recovery case
schema:
type: string
x-gusto-rswag: true
operationId: redebit-recovery-case
security:
- CompanyAccessAuth: []
description: |-
After resolving the underlying bank error, initiate a redebit for an open recovery case. This submission is asynchronous and a successful request responds with a 202 HTTP status.
It may take up to four business days for the ACH debit to process; in the meantime, the status of the recovery case will be in the `initiated_redebit` state. When funds are successfully redebited, the recovery case is transitioned to the `recovered` state.
If the company has exceeded maximum redebit attempts, or if the recovery case is not in a redebitable state, the response will be 422 Unprocessable Entity.
scope: `recovery_cases:write`
tags:
- Recovery Cases
x-gusto-integration-type:
- embedded
responses:
'202':
description: Accepted
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: recoveryCases
x-speakeasy-name-override: redebit
"/v1/employees/{employee_id}/recurring_reimbursements":
get:
summary: Get recurring reimbursements for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-recurring_reimbursements
security:
- CompanyAccessAuth: []
description: |-
Get all active recurring reimbursements for an employee.
scope: `reimbursements:read`
tags:
- Reimbursements
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Recurring-Reimbursement-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
post:
summary: Create a recurring reimbursement
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-recurring_reimbursements
security:
- CompanyAccessAuth: []
description: |-
Create a recurring reimbursement for an employee.
scope: `reimbursements:write`
tags:
- Reimbursements
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Recurring-Reimbursement"
'422':
description: invalid attributes
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- description
- amount
properties:
description:
type: string
description: The description of the reimbursement
amount:
type: number
description: The dollar amount of the reimbursement
required: true
"/v1/recurring_reimbursements/{id}":
get:
summary: Get a recurring reimbursement
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: id
in: path
description: The UUID of the reimbursement
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-recurring_reimbursements
security:
- CompanyAccessAuth: []
description: |-
Get a specific recurring reimbursement.
scope: `reimbursements:read`
tags:
- Reimbursements
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Recurring-Reimbursement"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
put:
summary: Update a recurring reimbursement
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: id
in: path
description: The UUID of the reimbursement
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-recurring_reimbursements
security:
- CompanyAccessAuth: []
description: |-
Update a recurring reimbursement.
scope: `reimbursements:write`
tags:
- Reimbursements
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Recurring-Reimbursement"
'409':
description: invalid version
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: invalid attributes
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
description:
type: string
description: The description of the reimbursement
amount:
type: number
description: The dollar amount of the reimbursement
required: true
delete:
summary: Delete a recurring reimbursement
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: id
in: path
description: The UUID of the reimbursement
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-recurring_reimbursements
security:
- CompanyAccessAuth: []
description: |-
Delete (soft delete) a recurring reimbursement for an employee.
scope: `reimbursements:write`
tags:
- Reimbursements
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: successful
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_uuid}/reports":
post:
summary: Create a custom report
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
x-gusto-rswag: true
operationId: post-companies-company_uuid-reports
security:
- CompanyAccessAuth: []
description: |-
Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the [report GET endpoint](https://docs.gusto.com/embedded-payroll/reference/get-reports-request_uuid). This URL is valid for 10 minutes.
scope: `company_reports:write`
tags:
- Reports
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Create-Report"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Create-Report-Body"
required: true
x-speakeasy-name-override: createCustom
"/v1/payrolls/{payroll_uuid}/reports/general_ledger":
post:
summary: Create a general ledger report
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: payroll_uuid
in: path
required: true
description: The UUID of the payroll
schema:
type: string
x-gusto-rswag: true
operationId: post-payrolls-payroll_uuid-reports-general_ledger
security:
- CompanyAccessAuth: []
description: |-
Create a general ledger report for a payroll. The report can be aggregated by different dimensions such as job or department.
Use the `request_uuid` in the response with the [report GET endpoint](../reference/get-reports-request_uuid) to poll for the status and report URL upon completion. The retrieved report will be generated in a JSON format.
scope: `company_reports:write`
tags:
- Reports
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/General-Ledger-Report"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/General-Ledger-Report-Body"
required: true
"/v1/reports/{request_uuid}":
get:
summary: Get a report
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: request_uuid
in: path
required: true
description: The UUID of the request to generate a document. Generate document endpoints return request_uuids to be used with the GET generated document endpoint.
schema:
type: string
x-gusto-rswag: true
operationId: get-reports-request_uuid
security:
- CompanyAccessAuth: []
description: |-
Get a company's report given the `request_uuid`. The response will include the report request's status and, if complete, the report URL.
Reports containing PHI are inaccessible with `company_reports:read:tier_2_only` data scope
scope: `company_reports:read`
tags:
- Reports
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Report"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_uuid}/report_templates/{report_type}":
get:
summary: Get a report template
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: report_type
in: path
required: true
description: The report type
schema:
type: string
x-gusto-rswag: true
operationId: get-companies-company_uuid-report-templates-report_type
security:
- CompanyAccessAuth: []
description: |-
Get a company's report template. The only supported report type is `payroll_journal`. The resulting columns and groupings from this endpoint can be used as a guidance to create the report using the POST create report endpoint.
scope: `company_reports:write`
tags:
- Reports
x-gusto-integration-type:
- embedded
responses:
'200':
description: OK
content:
application/json:
schema:
"$ref": "#/components/schemas/Report-Template"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-name-override: getTemplate
"/v1/companies/{company_uuid}/reverse_wire_transactions":
get:
summary: Get all reverse wire transactions for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: payroll_uuid
in: query
required: false
description: Filter results to reverse wires associated with a specific payroll
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-reverse-wire-transactions
security:
- CompanyAccessAuth: []
description: |-
Returns a paginated list of reverse wire (drawdown) transactions for a company. Reverse wires are debit transactions initiated by Gusto to pull funds from a partner's bank account to cover payroll or contractor payment obligations. Pagination is returned via the `x-page`, `x-per-page`, `x-total-count`, and `x-total-pages` response headers.
scope: `reverse_wire_transactions:read`
tags:
- Reverse Wire Transactions
x-gusto-integration-type:
- embedded
responses:
'200':
description: Example response
content:
application/json:
schema:
"$ref": "#/components/schemas/Reverse-Wire-Transaction-List"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/employees/{employee_id}/salary_estimates":
post:
summary: Create a salary estimate for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
required: true
description: The UUID of the employee
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-salary_estimates
security:
- CompanyAccessAuth: []
description: |-
Create a salary estimate for an employee. This endpoint helps calculate a reasonable salary for S Corp owners based on their occupation, experience level, location, and business revenue.
A salary estimate must include:
- Annual net revenue of the business
- ZIP code for location-based salary data
- One or more occupations with experience levels and time percentages (must sum to 100%)
Only one in-progress salary estimate can exist per employee at a time. If an in-progress estimate already exists, you must either accept it or use the update endpoint.
scope: `salary_estimates:write`
tags:
- Salary Estimates
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: successfully created
content:
application/json:
schema:
"$ref": "#/components/schemas/Salary-Estimate"
'422':
description: unprocessable entity - invalid parameters
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- zip_code
- occupations
properties:
annual_net_revenue:
type:
- number
- 'null'
description: The annual net revenue of the business (must be greater than 0)
example: 500000
zip_code:
type: string
description: The ZIP code for location-based salary calculations
pattern: "^\\d{5}$"
example: '94107'
occupations:
type: array
description: Array of occupations. Time percentages must sum to 100%.
minItems: 1
items:
type: object
required:
- code
- experience_level
- time_percentage
properties:
code:
type: string
description: Bureau of Labor Statistics (BLS) occupation code
example: '151252'
experience_level:
type: string
description: Experience level for this occupation
enum:
- novice
- intermediate
- average
- skilled
- expert
example: skilled
time_percentage:
type: string
format: float
description: Percentage of time spent in this occupation (as decimal, e.g., 1.0 = 100%)
minimum: 0
maximum: 1
example: '1.0'
primary:
type: boolean
description: Whether this is the primary occupation
example: true
required: true
"/v1/salary_estimates/{uuid}":
get:
summary: Get a salary estimate
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: uuid
in: path
required: true
description: The UUID of the salary estimate
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-salary_estimates-id
security:
- CompanyAccessAuth: []
description: |-
Retrieve a salary estimate by its UUID. Returns the estimated salary calculation along with all occupation details, revenue, and location information.
scope: `salary_estimates:read`
tags:
- Salary Estimates
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Salary-Estimate"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
put:
summary: Update a salary estimate
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: uuid
in: path
required: true
description: The UUID of the salary estimate
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-salary_estimates-id
security:
- CompanyAccessAuth: []
description: |-
Update an existing salary estimate. You can modify the annual net revenue, ZIP code, and occupations.
The salary estimate must not be finalized (accepted). Once accepted, salary estimates become read-only for record-keeping purposes.
scope: `salary_estimates:write`
tags:
- Salary Estimates
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Salary-Estimate"
'422':
description: unprocessable entity - already finalized
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- zip_code
- occupations
properties:
annual_net_revenue:
type:
- number
- 'null'
description: The annual net revenue of the business (must be greater than 0)
example: 600000
zip_code:
type: string
description: The ZIP code for location-based salary calculations
pattern: "^\\d{5}$"
example: '94107'
occupations:
type: array
description: Array of occupations. Time percentages must sum to 100%.
minItems: 1
items:
type: object
required:
- code
- experience_level
- time_percentage
properties:
code:
type: string
description: Bureau of Labor Statistics (BLS) occupation code
example: '151252'
experience_level:
type: string
description: Experience level for this occupation
enum:
- novice
- intermediate
- average
- skilled
- expert
example: expert
time_percentage:
type: string
format: float
description: Percentage of time spent in this occupation (as decimal, e.g., 0.5 = 50%)
minimum: 0
maximum: 1
example: '0.6'
primary:
type: boolean
description: Whether this is the primary occupation
example: true
required: true
"/v1/salary_estimates/{uuid}/accept":
post:
summary: Accept a salary estimate
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: uuid
in: path
required: true
description: The UUID of the salary estimate
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-salary_estimates-uuid-accept
security:
- CompanyAccessAuth: []
description: |-
Accept and finalize a salary estimate. This associates the estimate with an employee job and marks it as accepted.
Once accepted, the salary estimate becomes read-only for record-keeping purposes. The accepted salary can then be used to set up compensation for the employee.
scope: `salary_estimates:write`
tags:
- Salary Estimates
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Salary-Estimate"
'422':
description: unprocessable entity - invalid employee job
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- employee_job_uuid
properties:
employee_job_uuid:
type: string
description: The UUID of the employee job to associate with this salary estimate
example: 7f5d3d93-6d6f-48c0-9f4e-cd12c2d3e4b2
required: true
"/v1/salary_estimates/occupations":
get:
summary: Search for BLS occupations
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: search
in: query
required: true
description: Search term for occupation (minimum 3 characters)
example: software
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-salary_estimates-occupations
security:
- SystemAccessAuth: []
description: "Search for Bureau of Labor Statistics (BLS) occupations by name or keyword. This endpoint helps users find the appropriate occupation codes to use when creating or updating salary estimates.\n\nReturns a list of matching occupations with their codes, titles, and descriptions.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `salary_estimates:read`"
tags:
- Salary Estimates
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/BLS-Occupation"
'422':
description: unprocessable entity - search term too short
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/sandbox/generate_w2":
post:
summary: Generate a W2 form [DEMO]
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-sandbox-generate_w2
security:
- CompanyAccessAuth: []
description: "> \U0001F6A7 Demo action\n>\n> This action is only available in the Demo environment\n\nGenerates a W2 document for testing purposes.\n\nscope: `employees:write`"
tags:
- Employee Forms
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Form"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
employee_id:
type: string
description: The employee UUID.
year:
type: integer
description: 'Must be equal to or more recent than 2015. If not specified, defaults to the previous year.
'
required:
- employee_id
required: true
x-speakeasy-group: employeeForms
x-speakeasy-name-override: generateW2
"/v1/sandbox/generate_1099":
post:
summary: Generate a 1099 form [DEMO]
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-sandbox-generate_1099
security:
- CompanyAccessAuth: []
description: "> \U0001F6A7 Demo action\n>\n> This action is only available in the Demo environment\n\nGenerates a 1099 document for testing purposes.\n\nscope: `contractors:write`"
tags:
- Contractor Forms
x-gusto-integration-type:
- embedded
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Form_1099"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
contractor_id:
type: string
description: The contractor UUID.
year:
type: integer
description: 'Must be equal to or more recent than 2015. If not specified, defaults to the previous year.
'
required:
- contractor_id
required: true
x-speakeasy-group: contractorForms
x-speakeasy-name-override: generate1099
"/v1/companies/{company_uuid}/signatories":
get:
summary: Get the signatories for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-signatories
security:
- CompanyAccessAuth: []
description: |-
Returns the signatories for a company. A company has at most one signatory.
## Related guides
- [Signatory Events](doc:signatory-events)
scope: `signatories:read`
tags:
- Signatories
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Signatory"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: list
post:
summary: Create a signatory
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-company-signatories
security:
- CompanyAccessAuth: []
description: |-
Creates a company signatory with complete information. The company must not already have a signatory.
A signatory can legally sign forms once the identity verification process is successful. The signatory should be an officer, owner, general partner or LLC member manager, plan administrator, fiduciary, or an authorized representative who is designated to sign agreements on the company's behalf. An officer is the president, vice president, treasurer, chief accounting officer, etc. There can only be a single primary signatory in a company.
### Webhooks
- `signatory.created`: Fires when a signatory is successfully created.
### Related guides
- [Signatory Events](doc:signatory-events)
scope: `signatories:manage`
tags:
- Signatories
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Signatory"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Signatory-Create-Request"
required: true
x-speakeasy-name-override: create
"/v1/companies/{company_uuid}/signatories/invite":
post:
summary: Invite a signatory
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-signatories-invite
security:
- CompanyAccessAuth: []
description: |-
Creates a signatory with minimal information. This signatory can be invited to provide more information through the [Update a signatory](ref:put-v1-companies-company_uuid-signatories-signatory_uuid) endpoint. This will start the identity verification process and allow the signatory to be verified to sign documents.
## Related guides
- [Signatory Events](doc:signatory-events)
scope: `signatories:manage`
tags:
- Signatories
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Signatory"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Signatory-Invite-Request"
required: true
x-speakeasy-name-override: invite
"/v1/companies/{company_uuid}/signatories/{signatory_uuid}":
put:
summary: Update a signatory
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: signatory_uuid
in: path
description: The UUID of the signatory
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-companies-company_uuid-signatories-signatory_uuid
security:
- CompanyAccessAuth: []
description: |-
Updates a signatory that has been either invited or created. If the signatory has been created with minimal information through the [Invite a signatory](ref:post-v1-companies-company_uuid-signatories-invite) endpoint, then the first update must contain all attributes specified in the request body in order to start the identity verification process.
## Related guides
- [Signatory Events](doc:signatory-events)
scope: `signatories:write`
tags:
- Signatories
x-gusto-integration-type:
- embedded
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Signatory"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'409':
description: Conflict
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Signatory-Update-Request"
required: true
x-speakeasy-name-override: update
delete:
summary: Delete a signatory
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: signatory_uuid
in: path
description: The UUID of the signatory
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-companies-company_uuid-signatories-signatory_uuid
security:
- CompanyAccessAuth: []
description: |-
Deletes a company signatory.
## Related guides
- [Signatory Events](doc:signatory-events)
scope: `signatories:manage`
tags:
- Signatories
x-gusto-integration-type:
- embedded
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: delete
"/v1/companies/{company_uuid}/tax_payments":
get:
summary: Get all tax payments for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: jurisdiction
in: query
required: false
explode: false
schema:
type: array
items:
type: string
description: Filter by tax jurisdiction. Accepts one or more two-letter state codes, or `US` for federal, as a comma-separated list (e.g. `IL,CA`). Codes are case-insensitive.
- name: payroll_uuids
in: query
required: false
explode: false
schema:
type: array
items:
type: string
description: Filter to tax payments associated with one or more payrolls, given as a comma-separated list of payroll UUIDs.
- name: due_date_from
in: query
required: false
schema:
type: string
format: date
description: Lower-bound (inclusive) date filter on due_date.
- name: due_date_to
in: query
required: false
schema:
type: string
format: date
description: Upper-bound (inclusive) date filter on due_date.
- name: payment_sent_on_from
in: query
required: false
schema:
type: string
format: date
description: Lower-bound (inclusive) date filter on payment_sent_on.
- name: payment_sent_on_to
in: query
required: false
schema:
type: string
format: date
description: Upper-bound (inclusive) date filter on payment_sent_on.
- name: period_start_from
in: query
required: false
schema:
type: string
format: date
description: Lower-bound (inclusive) date filter on period_start.
- name: period_start_to
in: query
required: false
schema:
type: string
format: date
description: Upper-bound (inclusive) date filter on period_start.
- name: period_end_from
in: query
required: false
schema:
type: string
format: date
description: Lower-bound (inclusive) date filter on period_end.
- name: period_end_to
in: query
required: false
schema:
type: string
format: date
description: Upper-bound (inclusive) date filter on period_end.
- name: amount_min
in: query
required: false
schema:
type: number
format: float
description: Lower-bound (inclusive) filter on amount.
- name: amount_max
in: query
required: false
schema:
type: number
format: float
description: Upper-bound (inclusive) filter on amount.
- name: sort_by
in: query
required: false
schema:
type: string
pattern: "^(amount|due_date|payment_sent_on|period_end|period_start)(:(asc|desc))?(,(amount|due_date|payment_sent_on|period_end|period_start)(:(asc|desc))?)*$"
example: amount:asc
description: 'Sort by one or more fields. Options: amount, due_date, payment_sent_on, period_end, period_start. Append `:asc` or `:desc` to specify direction (e.g., `amount:asc`). Defaults to ascending.'
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-tax-payments
security:
- CompanyAccessAuth: []
description: |-
Fetches all tax payments Gusto has made (or scheduled) to tax agencies on behalf of a company.
scope: `tax_payments:read`
tags:
- Tax Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Tax-Payment-List"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_uuid}/tax_payments/{uuid}":
get:
summary: Get a tax payment for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
required: true
description: The UUID of the company
schema:
type: string
- name: uuid
in: path
required: true
description: The UUID of the tax payment
schema:
type: string
x-gusto-rswag: true
operationId: get-tax-payment
security:
- CompanyAccessAuth: []
description: |-
Fetches a single tax payment by UUID, including the payroll tax liabilities that make up the payment.
scope: `tax_payments:read`
tags:
- Tax Payments
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Tax-Payment"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/employees/{employee_id}/terminations":
get:
summary: Get terminations for an employee
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-terminations
security:
- CompanyAccessAuth: []
description: |-
Terminations are created whenever an employee is scheduled to leave the company. The only things required are an effective date (their last day of work) and whether they should receive their wages in a one-off termination payroll or with the rest of the company.
Note that some states require employees to receive their final wages within 24 hours (unless they consent otherwise,) in which case running a one-off payroll may be the only option.
scope: `employments:read`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Termination"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: getTerminations
post:
summary: Create an employee termination
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-terminations
security:
- CompanyAccessAuth: []
description: |-
Create a termination for an employee. The only things required are an effective date (their last day of work) and whether they should receive their wages in a one-off termination payroll or with the rest of the company.
Note that some states require employees to receive their final wages within 24 hours (unless they consent otherwise,) in which case running a one-off payroll may be the only option.
scope: `employments:write`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: Created
content:
application/json:
schema:
"$ref": "#/components/schemas/Termination"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
effective_date:
type: string
description: The employee's last day of work.
example: '2020-06-30'
run_termination_payroll:
type: boolean
description: If true, the employee should receive their final wages via an off-cycle payroll. If false, they should receive their final wages on their current pay schedule.
default: false
example: true
required:
- effective_date
example:
effective_date: '2020-06-30'
run_termination_payroll: false
required: true
x-speakeasy-name-override: createTermination
x-speakeasy-group: employeeEmployments
delete:
summary: Delete an employee termination
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-employees-employee_id-terminations
security:
- CompanyAccessAuth: []
description: |-
Delete an employee termination.
scope: `employments:write`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: deleteTermination
"/v1/terminations/{employee_id}":
get:
summary: Get an employee termination
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-terminations-employee_id
security:
- CompanyAccessAuth: []
description: |-
Terminations are created whenever an employee is scheduled to leave the company. The only things required are an effective date (their last day of work) and whether they should receive their wages in a one-off termination payroll or with the rest of the company.
Note that some states require employees to receive their final wages within 24 hours (unless they consent otherwise,) in which case running a one-off payroll may be the only option.
scope: `employments:read`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Termination"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
put:
summary: Update an employee termination
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-terminations-employee_id
security:
- CompanyAccessAuth: []
description: |-
Terminations are created whenever an employee is scheduled to leave the company. The only things required are an effective date (their last day of work) and whether they should receive their wages in a one-off termination payroll or with the rest of the company.
Note that some states require employees to receive their final wages within 24 hours (unless they consent otherwise,) in which case running a one-off payroll may be the only option.
scope: `employments:write`
tags:
- Employee Employments
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Termination"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
effective_date:
type: string
description: The employee's last day of work.
example: '2020-06-30'
run_termination_payroll:
type: boolean
description: If true, the employee should receive their final wages via an off-cycle payroll. If false, they should receive their final wages on their current pay schedule.
default: false
example: true
required:
- effective_date
example:
version: d487dd0b55dfcacdd920ccbdaeafa351
effective_date: '2020-06-30'
run_termination_payroll: false
required: true
x-speakeasy-group: employeeEmployments
x-speakeasy-name-override: updateTermination
"/v1/companies/{company_uuid}/time_off/admin_approved_requests":
post:
summary: Create an admin-approved time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-time_off-admin_approved_requests
security:
- CompanyAccessAuth: []
description: |-
Create a pre-approved time off request on behalf of an employee (admin or system initiated).
The request is always created with approved status.
scope: `time_off_requests:manage`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee
policy_uuid:
type: string
description: The UUID of the time off policy
employer_note:
type: string
description: A note from the employer about the request
approver_uuid:
type: string
description: The UUID of the approving admin. Defaults to the primary payroll admin.
start_date:
type: string
description: The start date of the time off request (YYYY-MM-DD)
end_date:
type: string
description: The end date of the time off request (YYYY-MM-DD)
days:
type: object
additionalProperties:
type: string
description: 'An object where keys are dates in YYYY-MM-DD format and values are hours as string decimals (e.g. {"2025-01-20": "8.000"})'
required:
- employee_uuid
- policy_uuid
- start_date
- end_date
- days
required: true
"/v1/companies/{company_uuid}/time_off/balances":
get:
summary: Get time off balances for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: employee_uuids
in: query
required: false
description: Filter by employee UUIDs (comma-separated)
schema:
type: string
- name: policy_uuids
in: query
required: false
description: Filter by time off policy UUIDs (comma-separated)
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-time_off-balances
security:
- CompanyAccessAuth: []
description: |-
Get time off balances for all employees in a company
scope: `time_off_requests:read`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Embedded-Time-Off-Balance"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
"/v1/companies/{company_uuid}/time_off/requests":
get:
summary: List time off requests for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: employee_uuids
in: query
required: false
description: Filter by employee UUIDs. Comma-separated for multiple values.
schema:
type: string
- name: status
in: query
required: false
description: Filter by request status. Comma-separated for multiple values (e.g. pending,approved,declined,consumed).
schema:
type: string
- name: start_date
in: query
required: false
description: Filter requests that overlap with this start date
schema:
type: string
- name: end_date
in: query
required: false
description: Filter requests that overlap with this end date
schema:
type: string
- name: sort_order
in: query
required: false
description: Sort order by start_date (asc or desc, defaults to desc)
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page
schema:
type: integer
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-time_off-requests
security:
- CompanyAccessAuth: []
description: |-
Get all time off requests for a company. Supports filtering by status, employee, and date ranges.
Possible statuses:
- `pending` — awaiting approval
- `approved` — approved by an admin but not yet processed in a payroll
- `declined` — declined by an admin
- `consumed` — processed in a completed payroll
Allowed values for `status`: pending, approved, declined, consumed.
scope: `time_off_requests:read`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
post:
summary: Create a time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-time_off-requests
security:
- CompanyAccessAuth: []
description: |-
Create a time off request for an employee
scope: `time_off_requests:write`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
employee_uuid:
type: string
description: The UUID of the employee
policy_uuid:
type: string
description: The UUID of the time off policy
employee_note:
type: string
description: A note from the employee about the request
start_date:
type: string
description: The start date of the time off request (YYYY-MM-DD)
end_date:
type: string
description: The end date of the time off request (YYYY-MM-DD)
days:
type: object
additionalProperties:
type: string
description: 'An object where keys are dates in YYYY-MM-DD format and values are hours as string decimals (e.g. {"2025-01-20": "8.000"})'
required:
- employee_uuid
- policy_uuid
- start_date
- end_date
- days
required: true
"/v1/companies/{company_uuid}/time_off/requests/preview":
post:
summary: Preview a time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-time_off-requests-preview
security:
- CompanyAccessAuth: []
description: |-
Preview a time off request to see balance impact before creating
scope: `time_off_requests:read`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Embedded-Time-Off-Request-Preview"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
request_uuid:
type: string
description: The UUID of an existing time off request to preview changes for
employee_uuid:
type: string
description: The UUID of the employee
policy_uuid:
type: string
description: The UUID of the time off policy
start_date:
type: string
description: The start date of the time off request (YYYY-MM-DD)
end_date:
type: string
description: The end date of the time off request (YYYY-MM-DD)
days:
type: object
additionalProperties:
type: string
description: 'An object where keys are dates in YYYY-MM-DD format and values are hours as string decimals (e.g. {"2025-01-20": "8.000"})'
required:
- employee_uuid
- policy_uuid
- start_date
- end_date
- days
required: true
"/v1/time_off/requests/{time_off_request_uuid}":
get:
summary: Get a time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_request_uuid
in: path
description: The UUID of the time off request
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-time_off-requests-time_off_request_uuid
security:
- CompanyAccessAuth: []
description: |-
Get a single time off request by UUID
scope: `time_off_requests:read`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
delete:
summary: Delete a time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_request_uuid
in: path
description: The UUID of the time off request
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-time_off-requests-time_off_request_uuid
security:
- CompanyAccessAuth: []
description: |-
Delete a time off request
scope: `time_off_requests:write`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'204':
description: no content
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
"/v1/time_off/requests/{time_off_request_uuid}/approve":
put:
summary: Approve a time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_request_uuid
in: path
description: The UUID of the time off request
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off-requests-time_off_request_uuid-approve
security:
- CompanyAccessAuth: []
description: |-
Approve a pending time off request. Optionally override the dates and hours.
Only requests with a `pending` status can be approved. Attempting to approve a request that has already been `declined` or `consumed` will fail with a 422 error.
scope: `time_off_requests:manage`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
approver_uuid:
type: string
description: The UUID of the admin approving the request. Defaults to the company's primary payroll admin.
employer_note:
type: string
description: A note from the employer about the approval
days:
type: object
additionalProperties:
type: string
description: 'An object where keys are dates in YYYY-MM-DD format and values are hours as string decimals (e.g. {"2025-01-20": "8.000"}). Use this to override the requested hours.'
"/v1/time_off/requests/{time_off_request_uuid}/decline":
put:
summary: Decline a time off request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_request_uuid
in: path
description: The UUID of the time off request
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off-requests-time_off_request_uuid-decline
security:
- CompanyAccessAuth: []
description: |-
Decline a pending or approved time off request. Requires an employer_note.
scope: `time_off_requests:manage`
tags:
- Time Off Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Embedded-Time-Off-Request"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
employer_note:
type: string
description: Note explaining why the request was declined
approver_uuid:
type: string
description: The UUID of the admin declining the request. Defaults to the company's primary payroll admin.
required:
- employer_note
required: true
"/v1/companies/{company_uuid}/time_off_policies":
get:
summary: Get all time off policies for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-companies-company_uuid-time_off_policies
security:
- CompanyAccessAuth: []
description: |-
Get all time off policies for a company
scope: `time_off_policies:read`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Time-Off-Policy"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: getAll
post:
summary: Create a time off policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-companies-company_uuid-time_off_policies
security:
- CompanyAccessAuth: []
description: |-
Create a time off policy
scope: `time_off_policies:write`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'422':
description: Policy name required
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy-Request"
required: true
x-speakeasy-name-override: create
x-speakeasy-group: timeOffPolicies
"/v1/time_off_policies/{time_off_policy_uuid}":
get:
summary: Get a time off policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_policy_uuid
in: path
description: The UUID of the time off policy
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-time_off_policies-time_off_policy_uuid
security:
- CompanyAccessAuth: []
description: |-
Get a time off policy
scope: `time_off_policies:read`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: get
put:
summary: Update a time off policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_policy_uuid
in: path
description: The UUID of the time off policy
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off_policies-time_off_policy_uuid
security:
- CompanyAccessAuth: []
description: |-
Update a time off policy
scope: `time_off_policies:write`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'422':
description: Unlimited Policy updated with accrual rate
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- "$ref": "#/components/schemas/Time-Off-Policy-Update-Request"
required: true
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: update
"/v1/time_off_policies/{time_off_policy_uuid}/deactivate":
put:
summary: Deactivate a time off policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_policy_uuid
in: path
description: The UUID of the time off policy
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off_policies-time_off_policy_uuid-deactivate
security:
- CompanyAccessAuth: []
description: |-
Deactivate a time off policy
scope: `time_off_policies:write`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'422':
description: Policy has pending time off requests
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: deactivate
"/v1/time_off_policies/{time_off_policy_uuid}/add_employees":
put:
summary: Add employees to a time off policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_policy_uuid
in: path
description: The UUID of the time off policy
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off_policies-time_off_policy_uuid-add_employees
security:
- CompanyAccessAuth: []
description: |-
Add employees to a time off policy. Employees are required to have at least one job to be added to a time off policy. Accepts starting balances for non-unlimited policies
scope: `time_off_policies:write`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'422':
description: Add employees with no employees
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- employees
properties:
employees:
type: array
items:
type: object
required:
- uuid
properties:
uuid:
type: string
description: The UUID of the employee
balance:
type:
- string
- 'null'
description: The starting balance for the employee
required: true
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: addEmployees
"/v1/time_off_policies/{time_off_policy_uuid}/remove_employees":
put:
summary: Remove employees from a time off policy
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_policy_uuid
in: path
description: The UUID of the time off policy
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off_policies-time_off_policy_uuid-remove_employees
security:
- CompanyAccessAuth: []
description: |-
Remove employees from a time off policy
scope: `time_off_policies:write`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'422':
description: Remove employees with no employees
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- employees
properties:
employees:
type: array
items:
type: object
required:
- uuid
properties:
uuid:
type: string
description: The UUID of the employee
required: true
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: removeEmployees
"/v1/time_off_policies/{time_off_policy_uuid}/balance":
put:
summary: Update employee time off balances
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: time_off_policy_uuid
in: path
description: The UUID of the time off policy
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-time_off_policies-time_off_policy_uuid-balance
security:
- CompanyAccessAuth: []
description: |-
Updates time off hours balances for employees for a time off policy.
scope: `time_off_policies:write`
tags:
- Time Off Policies
x-gusto-integration-type:
- embedded
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Time-Off-Policy"
'422':
description: Unlimited policy balance update
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- employees
properties:
employees:
type: array
items:
type: object
required:
- uuid
- balance
properties:
uuid:
type: string
description: The UUID of the employee
balance:
type: string
description: The new balance for the employee
required: true
x-speakeasy-group: timeOffPolicies
x-speakeasy-name-override: updateBalance
"/oauth/token":
post:
summary: Create a System Access Token or Refresh an Access Token
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: oauth-access-token
security: []
description: Creates a system access token or refreshes an oauth access token
tags:
- Introspection
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Authentication"
requestBody:
content:
application/json:
schema:
oneOf:
- type: object
title: Refresh Token Request
required:
- client_id
- client_secret
- grant_type
- refresh_token
properties:
client_id:
type: string
description: Your client ID
example: qr6L_9FRkbMVL_GdwvrMW6Ef8tcU6NUxjWpOfqXqOG8
client_secret:
type: string
description: Your client secret
example: 3aQSHRB3596nZhm6NdNBELZ1u9xbZmvCrKpBhbZYq6w
grant_type:
type: string
enum:
- refresh_token
description: Set system_access to create a system access token, refresh_token to refresh an existing token
refresh_token:
type: string
descrition: The refresh token being exchanged for an access token code
example: iEjL96L9Pndwmi-xVX3Q-xbrvvhnjHYGX87sopgGJ8E
redirect_uri:
type: string
description: The redirect URI you set up via the Developer Portal
- type: object
title: System Access Token Request
required:
- client_id
- client_secret
- grant_type
properties:
client_id:
type: string
description: Your client ID
example: qr6L_9FRkbMVL_GdwvrMW6Ef8tcU6NUxjWpOfqXqOG8
client_secret:
type: string
description: Your client secret
example: 3aQSHRB3596nZhm6NdNBELZ1u9xbZmvCrKpBhbZYq6w
grant_type:
type: string
description: Set system_access to create a system access token, refresh_token to refresh an existing token
enum:
- system_access
required: true
"/v1/token_info":
get:
summary: Get info about the current access token
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: get-v1-token-info
security:
- CompanyAccessAuth: []
description: |-
Returns scope and resource information associated with the current access token. Use this endpoint to verify the following for the current access token:
* Resource (company, employee, contractor, or application) and resource owner
* Access level
tags:
- Introspection
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Token-Info"
x-speakeasy-name-override: getInfo
"/v1/webhook_subscriptions":
get:
summary: List webhook subscriptions
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: get-v1-webhook-subscriptions
security:
- SystemAccessAuth: []
description: "Returns all webhook subscriptions associated with the provided Partner API token.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:read`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Webhook-Subscription"
x-speakeasy-name-override: listSubscriptions
post:
summary: Create a webhook subscription
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: post-v1-webhook-subscription
security:
- SystemAccessAuth: []
description: "Create a webhook subscription to receive events of the specified subscription_types whenever there is a state change.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:write`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Webhook-Subscription"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- url
- subscription_types
properties:
url:
type: string
description: The URL where webhook events will be POSTed.
subscription_types:
type: array
description: The types of events to subscribe to.
items:
type: string
enum:
- BankAccount
- Company
- CompanyBenefit
- Contractor
- ContractorPayment
- Employee
- EmployeeBenefit
- EmployeeJobCompensation
- ExternalPayroll
- Form
- Location
- Notification
- Payroll
- PayrollSync
- PaySchedule
- PeopleBatch
- Signatory
- TimeOffRequest
required: true
x-speakeasy-name-override: createSubscription
"/v1/webhook_subscriptions/{webhook_subscription_uuid}":
get:
summary: Get a webhook subscription
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: webhook_subscription_uuid
in: path
description: The webhook subscription UUID.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-webhook-subscription-uuid
security:
- SystemAccessAuth: []
description: "Returns the Webhook Subscription associated with the provided UUID.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:read`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Webhook-Subscription"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: getSubscription
put:
summary: Update a webhook subscription
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: webhook_subscription_uuid
in: path
description: The webhook subscription UUID.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-webhook-subscription-uuid
security:
- SystemAccessAuth: []
description: "Updates the Webhook Subscription associated with the provided UUID.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:write`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Webhook-Subscription"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- subscription_types
properties:
subscription_types:
type: array
description: The types of events to subscribe to.
items:
type: string
enum:
- BankAccount
- Company
- CompanyBenefit
- Contractor
- ContractorPayment
- Employee
- EmployeeBenefit
- EmployeeJobCompensation
- ExternalPayroll
- Form
- Location
- Notification
- Payroll
- PayrollSync
- PaySchedule
- PeopleBatch
- Signatory
- TimeOffRequest
required: true
x-speakeasy-name-override: updateSubscription
delete:
summary: Delete a webhook subscription
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: webhook_subscription_uuid
in: path
description: The webhook subscription UUID.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-webhook-subscription-uuid
security:
- SystemAccessAuth: []
description: "Deletes the Webhook Subscription associated with the provided UUID.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:write`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: deleteSubscription
"/v1/webhook_subscriptions/{webhook_subscription_uuid}/request_verification_token":
get:
summary: Request a verification token for a webhook subscription
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: webhook_subscription_uuid
in: path
description: The webhook subscription UUID.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-webhook-subscription-verification-token-uuid
security:
- SystemAccessAuth: []
description: "Request that the webhook subscription `verification_token` be POSTed to the Subscription URL.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:read`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: No Content. The `verification_token` is POSTed to the Subscription URL.
content:
application/json:
schema:
"$ref": "#/components/schemas/Webhook-Verification-Token-Response"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-name-override: requestVerificationToken
"/v1/webhook_subscriptions/{webhook_subscription_uuid}/verify":
put:
summary: Verify a webhook subscription
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: webhook_subscription_uuid
in: path
description: The webhook subscription UUID.
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-verify-webhook-subscription-uuid
security:
- SystemAccessAuth: []
description: "When a webhook subscription is created, a `verification_token` is POSTed to the registered webhook subscription URL. This `verify` endpoint needs to be called with `verification_token` before webhook events can be sent to the registered webhook URL.\n\nUse the /v1/webhook_subscriptions/{webhook_subscription_uuid}/request_verification_token API to resend the `verification_token` to the Subscriber.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:write`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Webhook-Subscription"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
required:
- verification_token
properties:
verification_token:
type: string
description: The verification token received at the webhook subscription URL.
required: true
x-speakeasy-name-override: verify
"/v1/webhooks/health_check":
get:
summary: Get the webhooks health status
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
x-gusto-rswag: true
operationId: get-v1-webhooks-health_check
security:
- SystemAccessAuth: []
description: "Returns the health status (`healthy`, `unhealthy`, or `unknown`) of the webhooks system based on the last ten minutes of activity.\n\n\U0001F4D8 System Access Authentication\n\nThis endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access)\n\nscope: `webhook_subscriptions:read`"
tags:
- Webhooks
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Webhooks-Health-Check-Status"
"/v1/wire_in_requests/{wire_in_request_uuid}":
get:
summary: Get a single Wire In Request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: wire_in_request_uuid
in: path
description: The UUID of the Wire In Request
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-wire_in_requests-wire_in_request_uuid
security:
- CompanyAccessAuth: []
description: |-
Fetch a Wire In Request.
scope: `payrolls:read`
tags:
- Wire In Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Wire-In-Request"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: wireInRequests
x-speakeasy-name-override: get
put:
summary: Submit a wire in request
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: wire_in_request_uuid
in: path
description: The UUID of the Wire In Request
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-wire_in_requests-wire_in_request_uuid
security:
- CompanyAccessAuth: []
description: |-
Submit a wire in request for a payment
scope: `payrolls:run`
tags:
- Wire In Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Wire-In-Request"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Wire-In-Request-Update-Request-Body"
required: true
x-speakeasy-group: wireInRequests
x-speakeasy-name-override: submit
"/v1/companies/{company_uuid}/wire_in_requests":
get:
summary: Get all Wire In Requests for a company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: company_uuid
in: path
description: The UUID of the company
required: true
schema:
type: string
- name: page
in: query
required: false
description: The page that is requested. When unspecified, will load all objects unless endpoint forces pagination.
schema:
type: integer
- name: per
in: query
required: false
description: Number of objects per page. For majority of endpoints will default to 25
schema:
type: integer
x-gusto-rswag: true
operationId: get-companies-company_uuid-wire_in_request_uuid
security:
- CompanyAccessAuth: []
description: |-
Fetches all Wire In Requests for a company.
scope: `payrolls:read`
tags:
- Wire In Requests
x-gusto-integration-type:
- embedded
responses:
'200':
description: Success
content:
application/json:
schema:
"$ref": "#/components/schemas/Wire-In-Request-List"
x-speakeasy-group: wireInRequests
x-speakeasy-name-override: list
"/v1/employees/{employee_id}/work_addresses":
get:
summary: Get an employee's work addresses
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-employees-employee_id-work_addresses
security:
- CompanyAccessAuth: []
description: |-
Returns a list of an employee's work addresses. Each address includes its effective
date and a boolean signifying if it is the currently active work address.
scope: `employees:read`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: List of employee work addresses
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Work-Addresses-List"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: getWorkAddresses
post:
summary: Create an employee work address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
description: The UUID of the employee
required: true
schema:
type: string
x-gusto-rswag: true
operationId: post-v1-employees-employee_id-work_addresses
security:
- CompanyAccessAuth: []
description: |-
The work address of an employee describes when an employee began working at an associated company location.
scope: `employees:manage`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'201':
description: created
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Work-Address"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: unprocessable entity
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
type: object
properties:
location_uuid:
type: string
description: Reference to a company location
example: 6a119be7-b4b0-4e27-aaa0-89d5f2524635
effective_date:
type: string
format: date
description: Date the employee began working at the company location
example: '2023-05-15'
required: true
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: createWorkAddress
"/v1/work_addresses/{work_address_uuid}":
get:
summary: Get an employee work address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: work_address_uuid
in: path
description: The UUID of the work address
required: true
schema:
type: string
x-gusto-rswag: true
operationId: get-v1-work_addresses-work_address_uuid
security:
- CompanyAccessAuth: []
description: |-
The work address of an employee is used for payroll tax purposes.
scope: `employees:read`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Work-Address"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: retrieveWorkAddress
put:
summary: Update an employee work address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: work_address_uuid
in: path
description: The UUID of the work address
required: true
schema:
type: string
x-gusto-rswag: true
operationId: put-v1-work_addresses-work_address_uuid
security:
- CompanyAccessAuth: []
description: |-
The work address of an employee is used for payroll tax purposes.
scope: `employees:manage`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: successful
content:
application/json:
schema:
"$ref": "#/components/schemas/Employee-Work-Address"
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: unprocessable entity
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
allOf:
- "$ref": "#/components/schemas/Versionable-Required"
- type: object
properties:
location_uuid:
type: string
description: Reference to a company location
example: 6a119be7-b4b0-4e27-aaa0-89d5f2524635
effective_date:
type: string
format: date
example: '2023-05-15'
required: true
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: updateWorkAddress
delete:
summary: Delete an employee's work address
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: work_address_uuid
in: path
description: The UUID of the work address
required: true
schema:
type: string
x-gusto-rswag: true
operationId: delete-v1-work_addresses-work_address_uuid
security:
- CompanyAccessAuth: []
description: |-
Used for deleting an employee's work address. Cannot delete the employee's active work address.
scope: `employees:manage`
tags:
- Employee Addresses
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: no content
'404':
description: Not Found
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: unprocessable entity
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
x-speakeasy-group: employeeAddresses
x-speakeasy-name-override: deleteWorkAddress
"/v1/employees/{employee_id}/ytd_benefit_amounts_from_different_company":
get:
summary: Get year-to-date benefit amounts from a different company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
required: true
description: The UUID of the employee
schema:
type: string
- name: tax_year
in: query
required: false
schema:
type: integer
minimum: 2000
maximum: 2999
example: 2024
description: The tax year for which to retrieve YTD benefit amounts. Defaults to current year if not specified.
x-gusto-rswag: true
operationId: get-employee-ytd-benefit-amounts-from-different-company
security:
- CompanyAccessAuth: []
description: |-
Retrieves year-to-date benefit amounts that were contributed at a different company for the specified employee.
Returns benefit amounts for the requested tax year (defaults to current year if not specified).
This endpoint only supports retrieving outside contributions for 401(k) benefits.
scope: `employee_benefits:read`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Ytd-Benefit-Amounts-From-Different-Company"
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
x-speakeasy-group: employeeBenefits
x-speakeasy-name-override: getYtdBenefitAmountsFromDifferentCompany
post:
summary: Create year-to-date benefit amounts from a different company
parameters:
- name: X-Gusto-API-Version
in: header
schema:
type: string
enum:
- '2025-06-15'
default: '2025-06-15'
description: Determines the date-based API version associated with your API call. If none is provided, your application's [minimum API version](https://docs.gusto.com/embedded-payroll/docs/api-versioning#minimum-api-version) is used.
- name: employee_id
in: path
required: true
description: The UUID of the employee
schema:
type: string
x-gusto-rswag: true
operationId: post-employee-ytd-benefit-amounts-from-different-company
security:
- CompanyAccessAuth: []
description: |-
Year-to-date benefit amounts from a different company represents the amount of money added to an employee's plan during a current year, made outside of the current contribution when they were employed at a different company.
This endpoint only supports passing outside contributions for 401(k) benefits.
scope: `employee_benefits:write`
tags:
- Employee Benefits
x-gusto-integration-type:
- embedded
- app-integrations
responses:
'204':
description: No Content
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.
content:
application/json:
schema:
"$ref": "#/components/schemas/Not-Found-Error-Object"
'422':
description: |
Unprocessable Entity
This may happen when the body of your request contains errors such as `invalid_attribute_value`, or the request fails due to an `invalid_operation`. See the [Errors Categories](https://docs.gusto.com/embedded-payroll/docs/error-categories) guide for more details.
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/Ytd-Benefit-Amounts-From-Different-Company-Body"
required: true
x-speakeasy-group: employeeBenefits
x-speakeasy-name-override: createYtdBenefitAmountsFromDifferentCompany
"/v1/information_requests/{information_request_uuid}/submit":
put:
x-gusto-integration-type:
- embedded
summary: Submit information request responses
tags:
- Information Requests
operationId: submit-information-request
x-speakeasy-group: informationRequests
x-speakeasy-name-override: submit
description: |-
Submit responses to an information request.
Supports both text responses and file uploads (multipart/form-data).
Maximum file size: 120MB.
scope: `information_requests:write`
parameters:
- name: information_request_uuid
in: path
required: true
schema:
type: string
description: The UUID of the information request
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
required_questions:
type: array
items:
type: object
required:
- question_uuid
- response_type
properties:
question_uuid:
type: string
format: uuid
description: UUID of the question being answered
response_type:
type: string
enum:
- text
- document
description: Type of response - matches the question's response_type from GET
text_response:
type: string
description: Text response (required when response_type is text)
file_response:
type: string
description: Data URL with base64-encoded file (e.g., "data:image/png;base64,..."). Required when response_type is document.
file_name:
type: string
description: Original filename with extension (e.g., "document.pdf"). Used for document uploads.
responses:
'200':
description: Information request successfully submitted
content:
application/json:
schema:
"$ref": "#/components/schemas/Information-Request"
'422':
description: Validation error - invalid responses or missing required answers
content:
application/json:
schema:
"$ref": "#/components/schemas/Unprocessable-Entity-Error-Object"
examples:
Basic:
value:
errors:
- error_key: base
category: payroll_blocker
message: Company must complete all onboarding requirements in order to run payroll.
metadata:
key: needs_onboarding
Resource:
value:
errors:
- error_key: first_name
category: invalid_attribute_value
message: First name is required
- error_key: date_of_birth
category: invalid_attribute_value
message: Date of birth is not a valid date
Nested:
value:
errors:
- error_key: contractor_payments
category: nested_errors
metadata:
contractor_uuid: 72ae4617-daa9-4ed7-85e0-18ed5d0ee835
errors:
- error_key: hours
category: invalid_attribute_value
message: Ella Fitzgerald is paid fixed wage and hours cannot be set on a contractor payment
- error_key: contractor_payments
category: nested_errors
metadata:
contractor_uuid: 2d7bf62c-babf-4a12-8292-340e2d9cab28
errors:
- error_key: wage
category: invalid_attribute_value
message: Isaiah Berlin is paid hourly and wage cannot be set on a contractor payment
'404':
description: |
Not Found
The requested resource does not exist. Make sure the provided UUID is valid.