- Create selects payees (employees and contractors) and creates one work assignment per payee on a pay schedule.
- Update selects work assignments directly, within a single business entity.
Asynchronous Execution
Bulk work assignment operations are asynchronous. Every bulk endpoint returns anasync_task handle that you use to track completion and retrieve the affected entities.
The task may or may not have completed by the time you receive the response. data.status could be processing or completed. Partners must always check data.status and not assume the work has finished.
You have two ways to observe completion:
- Poll the URL in
links.selfon the response untildata.statusiscompleted(orerror). - Subscribe to the
async_task_completedwebhook event, which fires when the task finishes.
data.results contains one entry per affected work assignment, with only the id and object. To retrieve full work assignment bodies, follow up with a list query (filtered by the returned IDs) or fetch individual work assignments by ID.
Note: scope endpoints (/bulk/*/scope) are previews with no side effects and are synchronous - they return 200 OK with the inline list of matched entities.
Bulk Create Work Assignments
Nmbr’s API allows you to create a work assignment for select payees on a single pay schedule. This endpoint is useful when you need to add a group of employees or contractors to a pay schedule in one API call, such as onboarding a new team onto a bi-weekly schedule.Endpoint
POST /work_assignments/bulk/create
Request
Request Properties
| Property | Type | Required | Description |
|---|---|---|---|
payees.include | criteria object or "all" | Yes | Criteria for selecting payees to include |
payees.exclude | criteria object | No | Criteria for selecting payees to exclude |
data | object | Yes | The properties of the work assignment to create, including pay_schedule_id |
business_entity_id on create.
Payee Criteria Objects
include and exclude can be objects with one or more of the following properties:
ids: Array of employee/contractor IDs to include or excludepayee_type:"employee"or"contractor"payee_names: Name search (partial match)archived:trueto select archived payees,false(default) to select active payees
{ "payee_type": "employee", "archived": false } selects active employees only.
include can also be the string "all" to include all payees.
Data Properties
Thedata object contains the work assignment properties to apply to each created work assignment. For example:
| Property | Description |
|---|---|
pay_schedule_id | (Required) The pay schedule to create the work assignment on. Sets the work assignment’s business entity. |
title | Label for the work assignment |
is_primary | Whether this is the payee’s primary work assignment |
pay_split_id | ID of a pay split to apply to the work assignment |
external_ref | Your external identifier for the work assignment |
archived_at | Date to archive the work assignment (YYYY-MM-DD) |
tax_properties | Inline tax properties to set on the work assignment |
tag_assignment | Tag allocations for the work assignment |
employee_id or contractor_id in data. These properties are documented in more detail in the API reference for work assignments.
Response
On success, the operation returns202 Accepted with an async_task handle. See Asynchronous Execution for how to track completion. ⚠️ Partners must treat any 200-level response as success. ⚠️
For example, the response might look like:
data.results will contain one entry per created work assignment:
422 Unprocessable Entity with standard validation messages.
Notes
- The same work assignment properties (other than the payee) are applied to every created work assignment.
- The business entity is taken from the pay schedule. You don’t pass a
business_entity_id. - Payees that already have a work assignment on that pay schedule are skipped. There is one work assignment per pay schedule per payee. Skipped payees won’t appear in
data.results. - Each new work assignment generates its draft pay stubs on upcoming draft payrolls for that pay schedule, the same as creating a single work assignment.
- Validation runs against every selected payee before any work assignment is created. If validation fails, no work assignments are created.
- Invalid payee IDs in the
include.idsorexclude.idsarrays are silently ignored and won’t cause an error. - When both
includeandexcludecriteria are provided, exclusions are applied after inclusions.
Examples
Create work assignments for all employees on a pay schedule
POST /work_assignments/bulk/create
Create work assignments for specific payees
POST /work_assignments/bulk/create
Create work assignments for all payees, excluding specific payees
POST /work_assignments/bulk/create
Create work assignments with a pay split for all contractors
POST /work_assignments/bulk/create
Bulk Create Work Assignments Scope
The create scope endpoint previews which payees will receive a new work assignment from a bulk create operation. It accepts the same request body as the bulk create endpoint, but instead of creating work assignments, it returns the payees that match the criteria. Because the work assignments don’t exist yet, this endpoint returns payees, not work assignments. Payees that already have a work assignment on the target pay schedule are excluded, matching the create behavior. This is useful for confirming which payees a bulk create will affect before executing it.Endpoint
POST /work_assignments/bulk/create/scope
Request
The request body is the same as the bulk create endpoint.Response
On success, the operation will return200 OK with an array of the payees that the bulk create would create work assignments for. The array can contain both employees and contractors:
Bulk Update Work Assignments
Nmbr’s API allows you to update select work assignments within a single business entity. This endpoint is useful when you need to update the same property on a group of work assignments in one API call, such as moving a team onto a pay split or archiving a set of work assignments.Endpoint
POST /work_assignments/bulk/update
Request
Request Properties
| Property | Type | Required | Description |
|---|---|---|---|
business_entity_id | ULID | Yes | ID of the business entity containing the work assignments |
work_assignments.include | criteria object or "all" | Yes | Criteria for selecting work assignments to include |
work_assignments.exclude | criteria object | No | Criteria for selecting work assignments to exclude |
data | object | Yes | The properties to update on the matching work assignments |
Work Assignment Criteria Objects
include and exclude can be objects with one or more of the following properties:
ids: Array of work assignment IDs to include or excludepayee_type:"employee"or"contractor"pay_schedule_id: ID of the pay schedule to include or excludearchived:trueto select archived work assignments,false(default) to select active onespayee_names: Name search (partial match)
include can also be the string "all" to include all work assignments.
Data Properties
Thedata object contains the work assignment properties to update. For example:
| Property | Description |
|---|---|
title | Label for the work assignment |
is_primary | Whether this is the payee’s primary work assignment |
pay_split_id | ID of a pay split to apply to the work assignment |
external_ref | Your external identifier for the work assignment |
archived_at | Date to archive the work assignment (YYYY-MM-DD) |
tag_assignment | Replaces the work assignment’s tag allocations |
tag_assignment_patch | Additively modifies the existing tag allocations. Mutually exclusive with tag_assignment. |
business_entity_id, pay_schedule_id, employee_id, or contractor_id in data fails validation. These properties are documented in more detail in the API reference for work assignments.
Response
On success, the operation returns202 Accepted with an async_task handle whose data.results enumerates the updated work assignments. See Asynchronous Execution for how to track completion and Bulk Create Work Assignments › Response for an example response shape. data.type will be bulk_update. ⚠️ Partners must treat any 200-level response as success. ⚠️
On failure, the operation will return 422 Unprocessable Entity with standard validation messages. If any matched work assignment fails per-model validation, the entire request fails and no work assignments are updated.
Notes
- The same update properties are applied to all selected work assignments.
- The operation only affects work assignments within the specified business entity.
- You cannot change a work assignment’s business entity, pay schedule, or payee.
- Validation is all-or-nothing. If any matched work assignment fails validation, the entire request fails and no work assignments are updated.
- Invalid work assignment IDs in the
include.idsorexclude.idsarrays are silently ignored and won’t cause an error. - When both
includeandexcludecriteria are provided, exclusions are applied after inclusions.
Examples
Update the title on all work assignments
POST /work_assignments/bulk/update
Archive work assignments on a specific pay schedule
POST /work_assignments/bulk/update
Update a pay split for all employees, excluding specific work assignments
POST /work_assignments/bulk/update
Add a tag to all work assignments without replacing existing allocations
POST /work_assignments/bulk/update
Bulk Update Work Assignments Scope
The update scope endpoint previews which work assignments will be updated by a bulk update operation. It accepts the same request body as the bulk update endpoint, but instead of updating work assignments, it returns the work assignments that match the criteria.Endpoint
POST /work_assignments/bulk/update/scope
Request
The request body is the same as the bulk update endpoint.Response
On success, the operation will return200 OK with an array of the work assignments that would be updated:

