Payroll Status
Stages in the lifecycle of a Payroll
Once a payroll is approved, Check will automatically collect funds from the employer's bank account, make sure wages are transferred into employees' bank accounts on payday, and remit tax payments on time. We handle all of this behind the scenes, but you will still want to keep tabs on your payroll as it moves through each phase of its lifecycle.
Check surfaces status information on the payroll objects returned by our API through the status
field. A payroll can have one of four statuses: draft
, pending
, processing
, and paid
. Below is an overview of these statuses, what they mean, and how payrolls transition between them.
Payroll status webhooks
When a payroll makes status transitions from
pending
toprocessing
and fromprocessing
topaid
, you can receive webhook notifications from our platform. See the webhook documentation for more details about how to set this up.
Payroll Status Lifecycle
draft
draft
When a payroll is first created, it will be in the draft
status. You can modify a draft payroll in any way you see fit. Payments to employees can be added and removed, earnings and hours worked can be modified on individual payroll items, etc. You can only delete a payroll while it's in draft.
Certain fields like net_pay
, taxes
, and benefits
are null
on a draft payroll because they haven’t been calculated yet. In order to see what these fields would be set to based on the current configuration of the payroll, you can preview the payroll using the /payrolls/<payroll_id>/preview
endpoint. This causes our API to perform and surface the same calculations that will be performed when the payroll is approved, but does not change the status of the payroll.
Note that only draft payrolls can be previewed, and they can be previewed any number of times.
Historical Payroll Items
Payroll Items related to historical Payroll objects will retain a status of
draft
in scenarios where their related Payroll may be inPaid
because they are not being pushed through the lifecycle outlined above.
pending
pending
When a payroll is approved (via the /payrolls/<payroll_id>/approve
endpoint), its status changes to pending
. Once pending, the payroll can no longer be modified or previewed. This is because the taxes, net pay, and benefits have been calculated and saved for the payroll.
If you determine that an error exists in the payroll, you can still reopen the payroll (via the /payrolls/<payroll_id>/reopen
endpoint), which will move it back into the draft
status. Once reopened, a draft payroll can again be modified, previewed, and even deleted. Ultimately, if and when it is approved again, the payroll will move back into the pending
status.
Sandbox Behavior
In our sandbox environment, we automatically transition payrolls from
pending
toprocessing
topaid
every five minutes. We do this to simulate the behavior of a payroll in production on a shorter time scale.
processing
processing
At the end of each business day at 5pm PT, our system collects all pending
payrolls that have an approval_deadline
on that day and begins the multi-step process of moving money through the banking system to pay them out. The first step in this process is to submit an ACH transaction to debit the cash requirement for a payroll from the employer’s bank account. When a payroll’s debit transaction has been sent to the ACH network, it moves into a new status: processing
.
Once a payroll is processing, it can no longer be reopened. If you require a change to a processing payroll, reach out to us directly.
paid
paid
Due to the nature of the ACH network, the employer debit transaction will take 3 business days to complete. For example, if you approve a payroll with a Friday payday on Monday, we should have the employer’s funds in our bank account by Thursday morning. Once Check has the employer’s cash requirement, we submit ACH transactions to send net pay to each employee who is set up for direct deposit. When these transactions complete, the payroll enters its final status: paid
. Once here, the employees' payments for your payroll have been sent out . The employees are happy, and employers can focus on their business!
partially_paid
partially_paid
Unfortunately, there will be times when an ACH payment to an employee or a contractor is returned. This can happen for a number of reasons, but the most common is an invalid account/routing number or frozen bank account. In cases like these, it is important that you have insight into the exact state of the payments. To handle this, Check will mark the returned payroll item or contractor payment as failed
, and mark the parent payroll as partially_paid
. This status means that we have attempted to send out employee or contractor payments and one or more of these payments failed. If you need to resolve a failure, please reach out to us directly. After the employee or contractor payment failure has been handled you will see the payroll's status flip back to paid
.
failed
failed
Just as we will unfortunately see times that an employee's payment will fail, there will also be times when the ACH transaction to debit the cash requirement for an employer's payroll will be returned. One common reason this occurs is because there are insufficient funds for the transaction in an employer's bank account at the time of request. When this happens, Check sets the payroll's status to be failed
and, if possible, pauses in-flight employee and contractor payments for that payroll. Our team then works with you to quickly wire the cash requirement for the failed
payroll before unpausing and delivering the payroll's employee and contractor payments.
Testing sandbox failure behavior
For more information on how to reach
failed
andpartially_paid
status in Sandbox, see our Payments Guide.
Updated 7 months ago