# Schedule and manage job assignments

> Schedule future job assignment changes, view pending changes, and cancel scheduled job assignments using the Organizational Data API.

Schedule future job assignment changes, view pending changes, and cancel scheduled job assignments using the Organizational Data API.

## Overview

Job assignments manage which job codes workers are assigned to in Rippling. They use two distinct types of assignments depending on whether you are modifying an active job roster (active assignements) or scheduling a future change (scheduled assignments).

Common use cases for job assignments include:

-   **Auditing and visibility**: View scheduled changes for a worker or dimension to see what's pending before it hits payroll or time tracking.
-   **Rescheduling dates**: A start date moves from Dec 1 to Dec 15. Cancel the old scheduled change and create a new one.
-   **Preventing unintended changes**: A project is cancelled before it starts. Cancel the pending assignment so it never takes effect.

_Key terms:_

-   **Active assignments**: Reflect the worker's live, current roster state. Modifying an active assignment changes their assignment immediately.
-   **Scheduled assignments**: Reflect pending changes scheduled to take effect at a future date.

### Available endpoints

| Endpoint | Description |
| --- | --- |
| [GET List job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-job-assignments) | View the current active roster for all workers. |
| [GET Retrieve a specific job assignment](https://developer.rippling.com/documentation/rest-api/reference/get-job-assignments) | View details for one active assignment. |
| [POST Create a new job assignment](https://developer.rippling.com/documentation/rest-api/reference/create-job-assignments) | Assign a job code immediately or schedule a future assignment. |
| [PATCH Update a job assignment](https://developer.rippling.com/documentation/rest-api/reference/update-job-assignments) | Update fields on an active assignment (e.g., pay rate). |
| [DELETE Delete a job assignment](https://developer.rippling.com/documentation/rest-api/reference/delete-job-assignments) | Unassign a job code immediately or schedule a future unassignment. |
| [GET List scheduled job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-scheduled-job-assignments) | View pending scheduled changes before they take effect. |
| [GET Retrieve a specific scheduled job assignment](https://developer.rippling.com/documentation/rest-api/reference/get-scheduled-job-assignments) | View details for one pending scheduled change. |
| [DELETE Delete a scheduled job assignment](https://developer.rippling.com/documentation/rest-api/reference/delete-scheduled-job-assignments) | Cancel a pending scheduled change before it takes effect. |

### Suggested workflow

1.  [List job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-job-assignments) to see the worker’s current roster.
2.  [Create a job assignment](https://developer.rippling.com/documentation/rest-api/reference/create-job-assignments). Omit `effective_from` to assign the job code immediately, or send a future `effective_from` to schedule the change.
3.  When `effective_from` is in the future, Rippling creates a pending scheduled change. Until that date, the worker’s active roster stays unchanged. [List scheduled job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-scheduled-job-assignments) to get the pending change ID.
4.  On the `effective_from` date, Rippling applies the change to the active roster. [List job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-job-assignments) again to confirm.
5.  To stop a pending change before `effective_from`, [delete the scheduled job assignment](https://developer.rippling.com/documentation/rest-api/reference/delete-scheduled-job-assignments) using the scheduled change ID, not the job assignment ID. A cancelled change does not apply.
6.  To remove a job code later, [delete the job assignment](https://developer.rippling.com/documentation/rest-api/reference/delete-job-assignments) with a future `effective_from`. That also creates a pending scheduled change, which can be cancelled as well.

### Scheduled assignments UI

When a worker has active scheduled job assignment changes, a **Scheduled assignments** tab appears in Rippling. You can find it by navigating to either:

1.  The employee's profile > **Job Assignments** > **Scheduled assignments**.
2.  **Job Dimension** > **Job Code**.

This tab shows pending scheduled assignments and unassignment changes for that particular worker. Only future, non-cancelled `PENDING` changes are displayed. In addition to the API, admins can cancel pending changes directly from this tab.

* * *

## Requirements

-   Jobs configured with a `PER_JOB_CODE` [roster type](https://help.rippling.com/article?articleId=908156554855) on the target job dimension.
-   An API token with the following scopes:
    -   `job-assignments.read` and `scheduled-job-assignments.read` to list and retrieve assignments
    -   `job-assignments.read-write` and `scheduled-job-assignments.read-write` to fetch and manage changes

* * *

## Fetch

### Active job assignments

Use [GET List job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-job-assignments) when you need to check the current roster and see who is assigned to which job codes right now.

_Request:_

```json
curl -L -X GET 'https://rest.ripplingapis.com/job-assignments' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer REDACTED'
```

_Response:_

```json
{
  "results": [
    {
      "id": "66d74bc3e0d1070b2ce8324d",
      "created_at": "2024-09-03T17:47:47.182000+00:00",
      "updated_at": "2025-11-15T10:22:30.456000+00:00",
      "worker_id": "66a42f06d80b34a7fc92d971",
      "worker": null,
      "base_pay_rate": 65.64,
      "job_code_id": "66b2512c4ad1db34abae1e82",
      "job_code": null,
      "job_pay_rate": 30.00,
      "job_pay_rate_exceptions_id": null,
      "job_pay_rate_exceptions": null
    }
  ],
  "next_link": null
}
```

Use [GET Retrieve a specific job assignment](https://developer.rippling.com/documentation/rest-api/reference/get-job-assignments) when you have a job assignment `id` and need the full details of one active assignment.

_Request:_

```json
curl -L -X GET 'https://rest.ripplingapis.com/job-assignments/66d74bc3e0d1070b2ce8324d' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer REDACTED'
```

_Response:_

```json
{
  "id": "66d74bc3e0d1070b2ce8324d",
  "created_at": "2024-09-03T17:47:47.182000+00:00",
  "updated_at": "2025-11-15T10:22:30.456000+00:00",
  "worker_id": "66a42f06d80b34a7fc92d971",
  "worker": null,
  "base_pay_rate": 65.64,
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "job_code": null,
  "job_pay_rate": 30.00,
  "job_pay_rate_exceptions_id": null,
  "job_pay_rate_exceptions": null
}
```

### Scheduled job assignments

Use [GET List scheduled job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-scheduled-job-assignments) when you need to see pending changes.

_Request:_

```json
curl -L -X GET 'https://rest.ripplingapis.com/scheduled-job-assignments' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer REDACTED'
```

_Response:_

```json
{
  "results": [
    {
      "id": "67a1b2c3d4e5f6789012345a",
      "created_at": "2025-10-15T14:30:00.000000+00:00",
      "updated_at": "2025-10-15T14:30:00.000000+00:00",
      "worker_id": "66a42f06d80b34a7fc92d971",
      "job_code_id": "66b2512c4ad1db34abae1e82",
      "job_dimension_id": "66b25055891aca1dfb199246",
      "job_code_name": "Barista",
      "job_dimension_name": "Task",
      "change_type": "ASSIGN",
      "effective_from": "2026-11-01T09:00:00.000000+00:00",
      "reason": "New job start date",
      "changed_by_id": "66a430b4d80b34a7fc931ab9",
      "pay_rate": 25.00
    }
  ],
  "next_link": null
}
```

Use [GET Retrieve a scheduled job assignment](https://developer.rippling.com/documentation/rest-api/reference/get-scheduled-job-assignments) when you have a scheduled change `id` and need the full details of one pending change.

_Request:_

```json
curl -L -X GET 'https://rest.ripplingapis.com/scheduled-job-assignments/67a1b2c3d4e5f6789012345a' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer REDACTED'
```

_Response:_

```json
{
  "id": "67a1b2c3d4e5f6789012345a",
  "created_at": "2025-10-15T14:30:00.000000+00:00",
  "updated_at": "2025-10-15T14:30:00.000000+00:00",
  "worker_id": "66a42f06d80b34a7fc92d971",
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "job_dimension_id": "66b25055891aca1dfb199246",
  "job_code_name": "Barista",
  "job_dimension_name": "Task",
  "change_type": "ASSIGN",
  "effective_from": "2026-11-01T09:00:00.000000+00:00",
  "reason": "New job start date",
  "changed_by_id": "66a430b4d80b34a7fc931ab9",
  "pay_rate": 25.00
}
```

* * *

## Create

Use [POST Create a new job assignment](https://developer.rippling.com/documentation/rest-api/reference/create-job-assignments) to assign a worker to a job code immediately or schedule a future assignment using `effective_from`.

These endpoints require a valid [worker ID](https://developer.rippling.com/documentation/rest-api/reference/list-workers) and [job code ID](https://developer.rippling.com/documentation/rest-api/reference/list-job-codes). The job code's dimension must also have the **Pay rate** organizational attribute enabled.

### Immediate assignment

Omit `effective_from` to assign the worker to the job code immediately.

_Request:_

```json
curl -L -X POST 'https://rest.ripplingapis.com/job-assignments/'
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-H 'Authorization: Bearer REDACTED'
```

_Request body:_

```json
{
  "worker_id": "66a42f06d80b34a7fc92d971",
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "job_pay_rate": 25.00
}
```

_Response:_

```json
{
  "id": "66d74bc3e0d1070b2ce8324d",
  "created_at": "2024-09-03T17:47:47.182000+00:00",
  "updated_at": "2024-09-03T17:47:47.182000+00:00",
  "worker_id": "66a42f06d80b34a7fc92d971",
  "worker": null,
  "base_pay_rate": 65.64,
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "job_code": null,
  "job_pay_rate": 25.00,
  "job_pay_rate_exceptions_id": null,
  "job_pay_rate_exceptions": null
}
```

### Future assignment

_Request:_

```json
curl -L -X POST 'https://rest.ripplingapis.com/job-assignments/'
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-H 'Authorization: Bearer REDACTED'
```

_Request body:_

```json
{
  "worker_id": "66a42f06d80b34a7fc92d971",
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "effective_from": "2026-11-01T09:00:00.000Z",
  "change_reason": "New job start date",
  "job_pay_rate": 25.00
}
```

A successful response returns `200 OK`.

When `effective_from` is a future date, the response body will be empty. Use [GET List scheduled job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-scheduled-job-assignments) to retrieve the pending change.

* * *

## Update

### Job assignment

Use [PATCH Update a job assignment](https://developer.rippling.com/documentation/rest-api/reference/update-job-assignments) to modify an already-active assignment (e.g., pay rate). This endpoint does not schedule new changes.

_Request:_

```json
curl -L -X PATCH 'https://rest.ripplingapis.com/job-assignments/66d74bc3e0d1070b2ce8324d'
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-H 'Authorization: Bearer REDACTED'
```

_Request body:_

```json
{
  "worker_id": "66a42f06d80b34a7fc92d971",
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "job_pay_rate": 30.00
}
```

_Response:_

```json
{
  "id": "66d74bc3e0d1070b2ce8324d",
  "created_at": "2024-09-03T17:47:47.182000+00:00",
  "updated_at": "2025-11-15T10:22:30.456000+00:00",
  "worker_id": "66a42f06d80b34a7fc92d971",
  "worker": null,
  "base_pay_rate": 65.64,
  "job_code_id": "66b2512c4ad1db34abae1e82",
  "job_code": null,
  "job_pay_rate": 30.00,
  "job_pay_rate_exceptions_id": null,
  "job_pay_rate_exceptions": null
}
```

* * *

## Delete

### Job assignment

Use [DEL Delete a job assignment](https://developer.rippling.com/documentation/rest-api/reference/delete-job-assignments) to remove a worker from a job code immediately or schedule a future unassignment. To remove the assignment right away, send no request body.

_Request:_

```json
curl -L -X DELETE 'https://rest.ripplingapis.com/job-assignments/66d74bc3e0d1070b2ce8324d' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer REDACTED'
```

A successful delete returns `200` and no body.

Include a JSON body with a future `effective_from` to schedule a future unassignment. You must send `Content-Type: application/json`.

_Request:_

```json
curl -L -X DELETE 'https://rest.ripplingapis.com/job-assignments/66d74bc3e0d1070b2ce8324d' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer REDACTED' \
-d '{
  "effective_from": "2025-11-30T23:59:00.000Z",
  "change_reason": "Role ending"
}'
```

A successful delete returns `200` and no body.

### Scheduled change

Use [DEL Delete a scheduled job assignment](https://developer.rippling.com/documentation/rest-api/reference/delete-scheduled-job-assignments) to cancel a pending scheduled change before it takes effect. Use the scheduled change `id` from [GET List scheduled job assignments](https://developer.rippling.com/documentation/rest-api/reference/list-scheduled-job-assignments) as opposed to the job assignment `id`.

_Request:_

```json
curl -L -X DELETE 'https://rest.ripplingapis.com/scheduled-job-assignments/67a1b2c3d4e5f6789012345a' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer REDACTED'
```

A successful delete returns `200` and no body.

* * *

## See also

-   [Create and manage dimensions and jobs](https://developer.rippling.com/documentation/rest-api/guides/managing-job-rosters)
-   [How to set up Jobs in Rippling: Dimensions](https://help.rippling.com/article?articleId=360056300673)
-   [Jobs overview](https://help.rippling.com/article?articleId=360054483214)
-   [Job rosters: Overview & how to use](https://help.rippling.com/article?articleId=908156554855)
-   [API tokens and permissions](https://developer.rippling.com/documentation/rest-api/essentials/api-tokens)
-   [Get started with the Organizational Data API](https://developer.rippling.com/documentation/rest-api/guides/org-data-getting-started)

Source: https://developer.rippling.com/documentation/rest-api/guides/job-assignments

> For the complete documentation index, see [llms.txt](https://developer.rippling.com/llms.txt). Public pages have a Markdown version at the same URL with .md added.
