Skip to main content
Nmbr will automatically generate payrolls and pay stubs for configured pay schedules and employment profiles. The next payroll in the pay schedule, ordered by pay_date, will automatically have all recurring earnings, allowances, reimbursements, deductions and benefits populated on its Pay Stubs.

Interacting with payrolls

You can retrieve a list of payrolls from the payroll API endpoint: Request
You can retrieve an individual payroll by querying for a specific ID: Request
Response
employee_summary.subtractions is the total of everything withheld from the employee’s gross to reach net pay: statutory withholdings (income tax, CPP, EI), deductions (e.g. union dues), and the employee’s benefit contributions. Each Pay Stub carries a per-employee employee_summary, a company_summary, and a line_item_summary that breaks the totals down by category: earnings, statutory withholdings, deductions, employee and employer benefits, reimbursements, and allowances. Query the pay stub endpoint for the Pay Stubs on a specific payroll id: Request
Response

Filtering the payrolls list

GET /payrolls requires either a business_entity_id or a pay_schedule_id. Without one of them, the request returns a 422. The status filter accepts one or more comma-separated values. Pass several to retrieve everything in flight in a single call: Request
Invalid status values are rejected with a 422. To retrieve every payroll except certain statuses, use not_status with the same comma-separated form: Request
Unknown values passed to not_status are ignored rather than rejected, so check them against the documented statuses.

Retrieving the upcoming regular draft payroll

To retrieve the upcoming regular draft payroll (the next payroll that is ready for editing), filter the payrolls index by type=regular and status=draft, and sort by pay_date: Request
The first payroll in the response is the upcoming regular draft payroll. The type=regular filter returns regular payrolls only. Off-cycle and historical payrolls are excluded, so query them separately if you need them.
📘 Why not use next_payrolls? The next_payrolls=only filter returns the current payroll being handled by Nmbr for each Pay Schedule, which may be an approved, processing, or failed payroll, not necessarily one that is ready for editing. Filtering by type=regular&status=draft and sorting by pay_date ensures you always get the next editable regular payroll.
You can update an individual payroll line item using the API. The example below could be used to enter 10 hours for the given pay rate.

Approving payroll

When a payroll is approved (via the /payrolls/<payroll_id>/approve endpoint), its status changes to approved. Once approved, the payroll can no longer be modified. This is because the taxes, net pay, and benefits have been calculated and saved for the payroll.
📘 Rejected Approvals If a payroll is in an invalid state when the /approve endpoint is called, the approval will fail, returning a 422 Unprocessable Entity response. Common reasons for failure include:
  • The payroll is past its approval deadline.
  • A pay stub has a negative net amount.
  • The payroll has stale calculations and needs to be recalculated.
  • The payroll is not in the draft status.
Once a payroll is approved, Nmbr collects the funds from the employer’s bank account, sends net pay to employees’ bank accounts on payday, and remits tax payments on time. Follow a payroll through each phase using its status field. A payroll has one of five statuses: draft, approved, processing, paid, and failed. The rest of this section covers what each status means and how a payroll moves between them.
📘 Payroll webhooks Nmbr can notify your app as a payroll moves through its lifecycle. Subscribe to the payroll_approved, payroll_unapproved, payroll_paid, and payroll_deadline_upcoming events instead of polling. See Webhooks for the setup and payload shape.

Payroll Status Lifecycle

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.

approved

When a payroll is approved (via the /payrolls/<payroll_id>/approve endpoint), its status changes to approved. Once approved, the payroll can no longer be modified. 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 move it back to the draft status (via the /payrolls/<payroll_id>/unapprove endpoint). Once back in draft, the payroll can again be modified, previewed, and even deleted. If and when it is approved again, the payroll moves back into the approved status.

processing

Each business day, once the 4:30 PM ET approval deadline passes, Nmbr collects the approved payrolls due that day and begins moving the money to pay them out using Electronic Funds Transfer (EFT). The first step debits the payroll’s cash_requirement from the employer’s bank account. Once that debit is submitted, the payroll moves into processing. A processing payroll can no longer be moved back to draft. If you need to change a payroll that is already processing, contact Nmbr. Before employees are paid, the employer debit has to settle. Once Nmbr has the employer’s cash_requirement, it sends net pay to each employee set up for direct deposit. When those payments are sent, the payroll reaches its final status: paid. The number of business days between approval and payday depends on the business entity’s configured processing speed. Read the current value from effective_processing_speed on the business entity.

partially_paid

Deprecated. No payroll reaches this status today, and you should not filter on it. It remains a valid value only for backwards compatibility. When a payment to an employee or contractor is returned (most often from an invalid account or transit/institution number, or a frozen bank account), Nmbr marks that individual payment as failed and leaves the parent payroll in processing. There is no payroll-level “partially paid” signal. To find failures, check the child payment records for a failed status, then contact Nmbr to resolve one.

failed

The employer debit can also be returned, most often because the employer’s bank account had insufficient funds at the time of the request. When this happens, Nmbr sets the payroll’s status to failed and, where possible, pauses any in-flight employee and contractor payments for that payroll. Nmbr then works with you to wire the cash_requirement for the failed payroll, then releases the paused payments and delivers them.