Payslip data model

View field support, webhooks, and list parameters for each integration on the Supported Integrations page.

FieldTypeRequiredDescription
idstringNo
created_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
updated_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
user_idstringNothe employee (reference to HrisEmployee)
company_idstringNo(reference to HrisCompany)
payment_referencestringNo
payment_typeenumNoValues: DIRECT, CHEQUE, CASH
paid_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
start_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
end_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
currencystringNo
gross_amountnumberNo
net_amountnumberNo
detailsHrisPayslipDetail[]No
details[].typeenumNoValues: EARNING_SALARY, EARNING_OVERTIME, EARNING_TIP, EARNING_BONUS, EARNING_COMMISSION, EARNING_ADJUSTMENT, EARNING, PRETAX_DEDUCTION, PRETAX_DEDUCTION_HEALTH_INSURANCE, PRETAX_DEDUCTION_RETIREMENT, PRETAX_DEDUCTION_HRA, TAX_FEDERAL, TAX_REGION, TAX_LOCAL, POSTTAX_BENEFIT, POSTTAX_GARNISHMENT, REIMBURSEMENT, EARNING_REGULAR, EARNING_DOUBLE_OVERTIME, EARNING_PTO, EARNING_SICK, EARNING_HOLIDAY, EARNING_SEVERANCE, EARNING_REIMBURSEMENT, TAX_SOCIAL_SECURITY, TAX_MEDICARE, TAX_UNEMPLOYMENT, TAX_EMPLOYER, PRETAX_DEDUCTION_HSA, PRETAX_DEDUCTION_FSA, PRETAX_DEDUCTION_DEPENDENT_CARE, PRETAX_DEDUCTION_COMMUTER, PRETAX_DEDUCTION_DENTAL, PRETAX_DEDUCTION_VISION, POSTTAX_DEDUCTION, POSTTAX_RETIREMENT_ROTH, POSTTAX_LOAN_REPAYMENT, EMPLOYER_CONTRIBUTION, PENSION, EARNING_CASH_IN_LIEU
details[].namestringNo
details[].descriptionstringNo
details[].amountnumberYes
details[].employee_amountnumberNo
details[].company_amountnumberNo
details[].hoursnumberNo
details[].rate_amountnumberNopay rate for hourly/unit-based lines
details[].ytd_amountnumberNoyear-to-date amount for this line
details[].is_pre_taxbooleanNo
details[].is_employerbooleanNotrue when this line is paid by the employer (employer tax or contribution)
details[].paycode_idstringNothe hris_paycode for this line
details[].benefit_idstringNo
details[].deduction_idstringNo
details[].original_typestringNointegration pay-code label before normalization
deductionobjectNoThe ID (and optionally name) of the employee deduction (if this detail represents a deduction)
deduction.idstringNo
deduction.created_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
deduction.updated_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
deduction.user_idstringNoemployee ID (reference to HrisEmployee)
deduction.company_idstringNo(reference to HrisCompany)
deduction.benefit_idstringNo
deduction.amountnumberNopercentage or absolute amount (employee's portion)
deduction.typeenumNoValues: FIXED, PERCENTAGE
deduction.coverage_levelenumNoLevel selected by employee (e.g. "FAMILY", "EMPLOYEE_ONLY", or other) Values: EMPLOYEE_ONLY, EMPLOYEE_SPOUSE, EMPLOYEE_CHILD, EMPLOYEE_CHILDREN, EMPLOYEE_FAMILY, FAMILY, OTHER
deduction.frequencyenumNoFrequency for this deduction (should always be set, matches IHrisBenefit.frequency) Values: ONE_TIME, DAY, QUARTER, YEAR, HOUR, MONTH, WEEK, BIWEEKLY, SEMIMONTHLY
deduction.start_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
deduction.end_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
deduction.is_activebooleanNo
deduction.notesstringNo
deduction.employer_amountnumberNopercentage or absolute amount (employer's portion/match)
deduction.employer_typeenumNoValues: PERCENTAGE, FIXED
deduction.max_amountnumberNoannual maximum employee amount (always money)
deduction.paycode_idstringNothe hris_paycode (deduction code) this deduction uses
deduction.garnishment_typeenumNoset when this deduction is a court-ordered garnishment Values: CHILD_SUPPORT, TAX_LEVY, STUDENT_LOAN, CREDITOR, BANKRUPTCY, OTHER
payroll_idstringNothe hris_payroll (pay run) this payslip belongs to
group_idstringNothe pay group (hris_group of type PAY_GROUP) (reference to HrisGroup)
typeenumNoValues: REGULAR, OFF_CYCLE, BONUS, CORRECTION, TERMINATION, CONTRACTOR
hoursnumberNototal hours paid on this payslip
employee_tax_amountnumberNototal taxes withheld from the employee
employer_tax_amountnumberNototal employer-paid taxes
deduction_amountnumberNototal employee deductions (pre and post-tax)
employer_contribution_amountnumberNototal employer benefit contributions
gross_ytd_amountnumberNoyear-to-date gross pay as of this payslip
net_ytd_amountnumberNoyear-to-date net pay as of this payslip

TypeScript

TypeScript
export type HrisPayslip = {
	id?: string;
	created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	updated_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	user_id?: string; // the employee (reference to HrisEmployee)
	company_id?: string; // (reference to HrisCompany)
	payment_reference?: string;
	payment_type?: 'DIRECT' | 'CHEQUE' | 'CASH';
	paid_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	start_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	end_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	currency?: string;
	gross_amount?: number;
	net_amount?: number;
	details?: [];
	deduction?: {
		id?: string; 
		created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		updated_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		user_id?: string; // employee ID (reference to HrisEmployee) 
		company_id?: string; // (reference to HrisCompany) 
		benefit_id?: string; 
		amount?: number; // percentage or absolute amount (employee's portion) 
		type?: 'FIXED' | 'PERCENTAGE'; 
		coverage_level?: 'EMPLOYEE_ONLY' | 'EMPLOYEE_SPOUSE' | 'EMPLOYEE_CHILD' | 'EMPLOYEE_CHILDREN' | 'EMPLOYEE_FAMILY' | 'FAMILY' | 'OTHER'; // Level selected by employee (e.g. "FAMILY", "EMPLOYEE_ONLY", or other) 
		frequency?: 'ONE_TIME' | 'DAY' | 'QUARTER' | 'YEAR' | 'HOUR' | 'MONTH' | 'WEEK' | 'BIWEEKLY' | 'SEMIMONTHLY'; // Frequency for this deduction (should always be set, matches IHrisBenefit.frequency) 
		start_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		end_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) 
		is_active?: boolean; 
		notes?: string; 
		employer_amount?: number; // percentage or absolute amount (employer's portion/match) 
		employer_type?: 'PERCENTAGE' | 'FIXED'; 
		max_amount?: number; // annual maximum employee amount (always money) 
		paycode_id?: string; // the hris_paycode (deduction code) this deduction uses 
		garnishment_type?: 'CHILD_SUPPORT' | 'TAX_LEVY' | 'STUDENT_LOAN' | 'CREDITOR' | 'BANKRUPTCY' | 'OTHER'; // set when this deduction is a court-ordered garnishment 
		raw?: any; 
	}; // The ID (and optionally name) of the employee deduction (if this detail represents a deduction)
	payroll_id?: string; // the hris_payroll (pay run) this payslip belongs to
	group_id?: string; // the pay group (hris_group of type PAY_GROUP) (reference to HrisGroup)
	type?: 'REGULAR' | 'OFF_CYCLE' | 'BONUS' | 'CORRECTION' | 'TERMINATION' | 'CONTRACTOR';
	hours?: number; // total hours paid on this payslip
	employee_tax_amount?: number; // total taxes withheld from the employee
	employer_tax_amount?: number; // total employer-paid taxes
	deduction_amount?: number; // total employee deductions (pre and post-tax)
	employer_contribution_amount?: number; // total employer benefit contributions
	gross_ytd_amount?: number; // year-to-date gross pay as of this payslip
	net_ytd_amount?: number; // year-to-date net pay as of this payslip
	raw?: any;
} 

Zod

Zod
import { z } from 'zod';

export const ZodHrisPayslip = z.object({
	id: z.string().optional(),
	created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	updated_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	user_id: z.string().optional().describe("the employee (reference to HrisEmployee)"),
	company_id: z.string().optional().describe("(reference to HrisCompany)"),
	payment_reference: z.string().optional(),
	payment_type: z.enum("DIRECT", "CHEQUE", "CASH").optional(),
	paid_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	start_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	end_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	currency: z.string().optional(),
	gross_amount: z.number().optional(),
	net_amount: z.number().optional(),
	details: z.array().optional(),
	deduction: z.object({
			id: z.string().optional(),
			created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			updated_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			user_id: z.string().optional().describe("employee ID (reference to HrisEmployee)"),
			company_id: z.string().optional().describe("(reference to HrisCompany)"),
			benefit_id: z.string().optional(),
			amount: z.number().optional().describe("percentage or absolute amount (employee's portion)"),
			type: z.enum("FIXED", "PERCENTAGE").optional(),
			coverage_level: z.enum("EMPLOYEE_ONLY", "EMPLOYEE_SPOUSE", "EMPLOYEE_CHILD", "EMPLOYEE_CHILDREN", "EMPLOYEE_FAMILY", "FAMILY", "OTHER").optional().describe("Level selected by employee (e.g. "FAMILY", "EMPLOYEE_ONLY", or other)"),
			frequency: z.enum("ONE_TIME", "DAY", "QUARTER", "YEAR", "HOUR", "MONTH", "WEEK", "BIWEEKLY", "SEMIMONTHLY").optional().describe("Frequency for this deduction (should always be set, matches IHrisBenefit.frequency)"),
			start_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			end_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
			is_active: z.boolean().optional(),
			notes: z.string().optional(),
			employer_amount: z.number().optional().describe("percentage or absolute amount (employer's portion/match)"),
			employer_type: z.enum("PERCENTAGE", "FIXED").optional(),
			max_amount: z.number().optional().describe("annual maximum employee amount (always money)"),
			paycode_id: z.string().optional().describe("the hris_paycode (deduction code) this deduction uses"),
			garnishment_type: z.enum("CHILD_SUPPORT", "TAX_LEVY", "STUDENT_LOAN", "CREDITOR", "BANKRUPTCY", "OTHER").optional().describe("set when this deduction is a court-ordered garnishment"),
	
}).optional().describe("The ID (and optionally name) of the employee deduction (if this detail represents a deduction)"),
	payroll_id: z.string().optional().describe("the hris_payroll (pay run) this payslip belongs to"),
	group_id: z.string().optional().describe("the pay group (hris_group of type PAY_GROUP) (reference to HrisGroup)"),
	type: z.enum("REGULAR", "OFF_CYCLE", "BONUS", "CORRECTION", "TERMINATION", "CONTRACTOR").optional(),
	hours: z.number().optional().describe("total hours paid on this payslip"),
	employee_tax_amount: z.number().optional().describe("total taxes withheld from the employee"),
	employer_tax_amount: z.number().optional().describe("total employer-paid taxes"),
	deduction_amount: z.number().optional().describe("total employee deductions (pre and post-tax)"),
	employer_contribution_amount: z.number().optional().describe("total employer benefit contributions"),
	gross_ytd_amount: z.number().optional().describe("year-to-date gross pay as of this payslip"),
	net_ytd_amount: z.number().optional().describe("year-to-date net pay as of this payslip"),

});

Python

Python
import dataclasses

@dataclasses.dataclass
class HrisPayslipPayment_type(str, Enum):
	DIRECT = 'DIRECT'
	CHEQUE = 'CHEQUE'
	CASH = 'CASH'

@dataclasses.dataclass
class HrisPayslipType(str, Enum):
	REGULAR = 'REGULAR'
	OFF_CYCLE = 'OFF_CYCLE'
	BONUS = 'BONUS'
	CORRECTION = 'CORRECTION'
	TERMINATION = 'TERMINATION'
	CONTRACTOR = 'CONTRACTOR'

@dataclasses.dataclass
class HrisPayslipDeductionType(str, Enum):
	FIXED = 'FIXED'
	PERCENTAGE = 'PERCENTAGE'

@dataclasses.dataclass
class HrisPayslipDeductionCoverage_level(str, Enum):
	EMPLOYEE_ONLY = 'EMPLOYEE_ONLY'
	EMPLOYEE_SPOUSE = 'EMPLOYEE_SPOUSE'
	EMPLOYEE_CHILD = 'EMPLOYEE_CHILD'
	EMPLOYEE_CHILDREN = 'EMPLOYEE_CHILDREN'
	EMPLOYEE_FAMILY = 'EMPLOYEE_FAMILY'
	FAMILY = 'FAMILY'
	OTHER = 'OTHER'

@dataclasses.dataclass
class HrisPayslipDeductionFrequency(str, Enum):
	ONE_TIME = 'ONE_TIME'
	DAY = 'DAY'
	QUARTER = 'QUARTER'
	YEAR = 'YEAR'
	HOUR = 'HOUR'
	MONTH = 'MONTH'
	WEEK = 'WEEK'
	BIWEEKLY = 'BIWEEKLY'
	SEMIMONTHLY = 'SEMIMONTHLY'

@dataclasses.dataclass
class HrisPayslipDeductionEmployer_type(str, Enum):
	PERCENTAGE = 'PERCENTAGE'
	FIXED = 'FIXED'

@dataclasses.dataclass
class HrisPayslipDeductionGarnishment_type(str, Enum):
	CHILD_SUPPORT = 'CHILD_SUPPORT'
	TAX_LEVY = 'TAX_LEVY'
	STUDENT_LOAN = 'STUDENT_LOAN'
	CREDITOR = 'CREDITOR'
	BANKRUPTCY = 'BANKRUPTCY'
	OTHER = 'OTHER'

@dataclasses.dataclass
class PropertyHrisPayslipDeduction:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	updated_at: Optional[str]
	"""employee ID (reference to HrisEmployee)"""
	user_id: Optional[str]
	"""(reference to HrisCompany)"""
	company_id: Optional[str]
	benefit_id: Optional[str]
	"""percentage or absolute amount (employee's portion)"""
	amount: Optional[int]
	type: Optional[HrisPayslipDeductionType]
	"""Level selected by employee (e.g. "FAMILY", "EMPLOYEE_ONLY", or other)"""
	coverage_level: Optional[HrisPayslipDeductionCoverage_level]
	"""Frequency for this deduction (should always be set, matches IHrisBenefit.frequency)"""
	frequency: Optional[HrisPayslipDeductionFrequency]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	start_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	end_at: Optional[str]
	is_active: Optional[bool]
	notes: Optional[str]
	"""percentage or absolute amount (employer's portion/match)"""
	employer_amount: Optional[int]
	employer_type: Optional[HrisPayslipDeductionEmployer_type]
	"""annual maximum employee amount (always money)"""
	max_amount: Optional[int]
	"""the hris_paycode (deduction code) this deduction uses"""
	paycode_id: Optional[str]
	"""set when this deduction is a court-ordered garnishment"""
	garnishment_type: Optional[HrisPayslipDeductionGarnishment_type]


@dataclasses.dataclass
class HrisPayslip:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	updated_at: Optional[str]
	"""the employee (reference to HrisEmployee)"""
	user_id: Optional[str]
	"""(reference to HrisCompany)"""
	company_id: Optional[str]
	payment_reference: Optional[str]
	payment_type: Optional[HrisPayslipPayment_type]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	paid_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	start_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	end_at: Optional[str]
	currency: Optional[str]
	gross_amount: Optional[int]
	net_amount: Optional[int]
	details: Optional[PropertyHrisPayslipDetails]
	"""The ID (and optionally name) of the employee deduction (if this detail represents a deduction)"""
	deduction: Optional[PropertyHrisPayslipDeduction]
	"""the hris_payroll (pay run) this payslip belongs to"""
	payroll_id: Optional[str]
	"""the pay group (hris_group of type PAY_GROUP) (reference to HrisGroup)"""
	group_id: Optional[str]
	type: Optional[HrisPayslipType]
	"""total hours paid on this payslip"""
	hours: Optional[int]
	"""total taxes withheld from the employee"""
	employee_tax_amount: Optional[int]
	"""total employer-paid taxes"""
	employer_tax_amount: Optional[int]
	"""total employee deductions (pre and post-tax)"""
	deduction_amount: Optional[int]
	"""total employer benefit contributions"""
	employer_contribution_amount: Optional[int]
	"""year-to-date gross pay as of this payslip"""
	gross_ytd_amount: Optional[int]
	"""year-to-date net pay as of this payslip"""
	net_ytd_amount: Optional[int]
Are we missing anything? Let us know
Was this page helpful?