---
updatedAt: 2025-10-12T20:25:15.000Z
agentTools:
  projectIndex: https://docs.checkhq.com/llms.txt
---

# 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 five (5) statuses: `draft`, `pending`, `processing`, `paid`, or `partially_paid`. Below is an overview of these statuses, what they mean, and how payrolls transition between them.

> 📘 Payroll status webhooks
>
> When a payroll transitions between statuses, you can receive webhook notifications from our platform. See the [webhook documentation](https://docs.checkhq.com/docs/webhooks-1) for more details about how to set this up.

## Payroll Status Lifecycle

<Image align="center" src="https://files.readme.io/3dfdfd96bc53fd00d1324b91212be7122438b0827c505a48ed37785fe6b960be-untitled2x.png" />

## `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`, even while their related Payroll may be in`paid`, because they are not being pushed through the lifecycle outlined above.

## `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 need to modify a `pending` payroll, you can do so by reopening the payroll (via the `/payrolls/<payroll_id>/reopen` endpoint), which will move it back into the `draft` status. This action can be taken up until the `reopen_deadline` shown on the payroll, which is set automatically to the later of 11am ET on day of the payroll's `approval_deadline` or 1 hour after approval (but no later than the payroll's `approval_deadline`).

> 📘 Sandbox Behavior
>
> In our sandbox environment, we automatically transition payrolls from `pending` to `processing` to `paid` every five minutes. We do this to simulate the behavior of a payroll in production on a shorter time scale.

## `processing`

After the `reopen_deadline` on the payroll passes, the payroll will automatically move to a `processing` status. This indicates that the payroll can no longer actioned upon, and it is now on Check to begin the multi-step process of moving money through the banking system. If you require a change to a payroll in a `processing` status, reach out to us directly.

At the end of each business day at 5pm PT, our system collects all payrolls that have an `approval_deadline` on that day and begins processing payments for those payrolls. 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.

## `paid`

Due to the nature of the ACH network, the employer debit transaction will take up to 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`

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`

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` and `partially_paid`status in Sandbox, see our [Payments Guide](https://docs.checkhq.com/docs/payments#sandbox-testing).