---
category: [Administration & Integrations, Administration & Integrations/Workday API, Platform and Product Extensions, Platform and Product Extensions/Integration, Administration & Integrations/Product-Specific Integrations, Payroll, Payroll/Cloud Connect for Third Party Payroll, Payroll/Global Payroll Connect]
keyword: [effectiveChanges, Data Changes on Demand, DCoD, GPC, Global Payroll Connect]
nav: wcp_docs
parent_url: /wcp_docs/
title: Payroll Inputs REST API
layout: subsection
---

The `payrollInputs` REST API enables you to automate the flow of pay-related data from external systems into Workday Payroll by getting, creating, updating, and deleting payroll input data. This simplifies integrating external systems, such as time and attendance trackers, with Workday Payroll.

While the API provides a way to manage individual payroll inputs, the REST API doesn’t currently support the use of Batch IDs. For bulk administration and operations that rely on batch processing, the SOAP Import Payroll Input web service may be a more suitable option.

For reference documentation about the `payrollInputs` REST APIs, see payroll/payrollInputs in the [REST API Explorer on the Developer Site](https://developer.workday.com/rest-api-explorer) or [Workday REST Services Directory](https://community.workday.com/sites/default/files/file-hosting/restapi/index.html).

## URL Base Path

<b>Tenant Base Path</b>

`https://{tenantHostname}/api/{serviceName}/{version}/{tenantName}`

<b>Example</b>

`https://yourTenantHostName.com/api/payroll/v2/gms/payrollInputs`

<b>Workday Extend API Gateway Base Path</b>

For Workday Extend apps, use the regional API Gateway base URL for your company. See [Reference: Workday Extend API Gateways and Authorization Base URLs](https://developer.workday.com/documentation/dlh1653340161856) on the Developer Site. Note that the API Gateway base URL doesn’t include the tenant name.

## Equivalent Workday Tasks

<table><thead><tr><th>Workday Task</th><th>Endpoint</th></tr></thead><tbody><tr><td><b>View Payroll Input by Worker(s)</b></td><td><code>GET /payrollInputs</code></td></tr><tr><td><b>Add Payroll Input by Worker</b></td><td><code>POST /payrollInputs</code></td></tr><tr><td><b>View Payroll Input</b></td><td><code>GET /payrollInputs/{ID}</code></td></tr><tr><td><b>Delete Payroll Input</b></td><td><code>DELETE /payrollInputs/{ID}</code></td></tr><tr><td><b>Edit Payroll Input</b></td><td><code>PATCH /payrollInputs/{ID}</code></td></tr></tbody></table><br/>

## Security Considerations

These are the primary security domains that you must configure:

<table><thead><tr><th>Domain</th><th>Access</th></tr></thead><tbody><tr><td><i>Worker Data: Payroll Public API (Payroll Input)</i></td><td>This domain provides the necessary access to view, create, edit, delete payroll input through the REST API. This access is intended for integrations or users, such as Payroll Administrators, who are responsible for managing payroll inputs for the workforce.</td></tr><tr><td><i>Self-Service: Payroll Public API (Payroll Input)</i></td><td>This domain is for enabling workers to view, create, and edit their own payroll input through the REST API. It is typically used to support self-service interfaces where employees submit payroll-related information through the API. <p><b>Note:</b> If you only have access to this domain, additional Pay Component Segment Security configuration is required.</p></td></tr></tbody></table><br/>

## Prerequisites

Before using the `payrollInputs` API, ensure that pay components are configured to allow payroll input and that the worker is eligible for the specific pay component. On the <b>Edit Earning</b> or <b>Edit Deduction</b> task for the pay component you want to add pay input for, review the <b>Worker Eligibility</b> grid and select these check boxes on the <b>Effective Dated</b> tab:

-   <b>Input Amount Allowed?</b>
-   <b>Input Allowed?</b> (if you need to allow input for related calculations, such as hours or rate.)


## Integration Touchpoints

Consider the following dependencies and touch points when integrating with the `payrollInput` API:

<table><thead><tr><th>Feature</th><th>Description</th></tr></thead><tbody><tr><td>Gross-up Calculations</td><td>Gross-ups are only possible for pay components with a related calculation type that supports gross-up. If the required calculation type is missing from the pay component, you can’t use this API to gross up the amount. <p>Not all pay components support gross-up.</p></td></tr><tr><td>On-Demand Payments</td><td>When a pay input you created with the API is active for the relevant period and worker, Workday automatically picks it up when an on-demand payment calculation runs.</td></tr><tr><td>Pay Components</td><td>A worker's eligibility and the pay component's configuration determine if you can process a payroll input. <p>When you add a one-time, override payroll input, Workday considers this an intentional entry and ignores the standard worker eligibility rules configured on the pay component.</p> <p>Example: A "Car Allowance" is configured with an eligibility rule for only Directors. However, a Manager needs extensive one-month travel for a project, and leadership approves a one-time Car Allowance exception. A payroll administrator can add an override payroll input for this period. Workday processes the Car Allowance for the Manager, overriding the standard "Director" eligibility rule, as the manual input is honored as a deliberate exception.</p></td></tr><tr><td>Payroll Run Categories</td><td>The run category determines which type of payroll run processes a pay input. If you don’t specify the run category when creating a pay input through the API, Workday defaults to the regular run category, excluding it from off-cycle runs.</td></tr><tr><td>Retroactive Processing</td><td>To process retroactive pay, submit a standard pay input with dates corresponding to a prior, completed period. Workday automatically calculates the differences. Since you can't modify the original locked pay input, there is no "retro" endpoint or parameter. A retro calculation requires the creation of a new pay input.</td></tr><tr><td>Staffing</td><td>When you're managing pay inputs through the REST API and a worker is terminated, those ongoing inputs will keep getting picked up by future payroll runs until you explicitly set an end date for them. <p><b>Note:</b> We highly recommend that an integration using this API actively monitors for terminations and runs PATCH requests to set end dates on all ongoing inputs for terminated workers.</p></td></tr><tr><td>Workers with Multiple Positions</td><td>The <code>position</code> field is required on inputs for position-based pay components (those configured with the Position worktag). For these components, the API doesn't default to the worker's primary position. Integrations must resolve the applicable position before submitting a pay input. Omitting this field for position-based pay components will throw an error. For worker-based pay components (those without the Position worktag), the position field has no functional effect and can be omitted.</td></tr></tbody></table><br/>

## Example: Creating a New Payroll Input

`POST /payrollInputs`

<b>Note:</b> To create a new input, don't provide a `payrollInputId`.

Initially, you can use the <b>Integration IDs</b> report to find the required id's, such as worker, `inputDetails` type and `payComponent`. In the <b>Business Object</b> prompt, you can search for the object you need IDs for. For:

-   Workers: Select the <i>Worker</i> business object.
-   Pay Components (Earnings or Deductions): Select the <i>Deduction</i> or <i>Earning</i> business object. We recommend also selecting the <i>Deduction (Workday Owned)</i> and <i>Earning (Workday Owned)</i> to see the full list of available codes. The report displays a list of all components and the various reference IDs associated with them.
-   Input Details (Type): The type often corresponds to a pay component related calculation. Select the <i>ay Component Related Calculation</i> and <i>Pay Component Related Calculation (Workday Owned)</i> business objects. This provides valid IDs you can use in the type field of the `inputDetails` block. Ensure the related calculation allows input for the pay component you specify. You can check by either:

    -   Ensuring the <b>Input Allowed?</b> check box is selected on the <b>Related Calculations</b> grid on the <b>Edit Earning</b> or <b>Edit Deduction</b> tasks.
    -   Requesting a `GET /payrollInputs` request for an existing valid payroll input.



For ongoing integrations, you can retrieve IDs from the `GET /payrollInputs/{ID}` endpoint (or a list filtered by worker or pay component) and use the worker, pay component, and `inputDetails` type values from that response.

<b>Sample Request:</b>

Example Request Details:

-   Worker: Logan McNeil
-   Pay Component: Bonus
-   Input Details Type: Amount


You can enter amount-based inputs by passing a pay component ID as an input type.

```
{
  "endDate": "2024-01-31",
  "inputDetails": [{
    "type": {
      "id": "da8353189a5e472f8176d86b925acb03"
    },
    "value": 500
  }],
  "payComponent": {
    "id": "da8353189a5e472f8176d86b925acb03"
  },
  "position": {
    "id": "ae5982654df8420dacc5f530e096215b"
  },
  "startDate": "2024-01-01",
  "worker": {
    "id": "3aa5550b7fe348b98d7b5741afc65534"
  }
}
```

<b>Sample Response:</b>

```
{
  "endDate": "2024-01-31",
  "descriptor": "Logan McNeil - Bonus - 01/01/2024 - 01/31/2024",
  "adjustment": false,
  "inputDetails": [
    {
      "id": "ccae4fe971089001fc1a074ae79f0000",
      "type": {
        "descriptor": "Bonus",
        "id": "da8353189a5e472f8176d86b925acb03",
        "name": "Amount"
      },
      "value": "500"
    }
  ],
  "id": "ccae4fe971089001fc1a06b0fdb50000",
  "ongoing": false,
  "position": {
    "descriptor": "P-00004 Vice President, Human Resources - Logan McNeil",
    "id": "ae5982654df8420dacc5f530e096215b"
  },
  "payComponent": {
    "code": "BONUS",
    "descriptor": "Bonus",
    "id": "da8353189a5e472f8176d86b925acb03"
  },
  "fieldEditability": "all",
  "startDate": "2024-01-01",
  "Payroll_Input_ID": "PAYROLL_INPUT-17-5092",
  "worker": {
    "Employee_ID": "21001",
    "descriptor": "Logan McNeil",
    "id": "3aa5550b7fe348b98d7b5741afc65534"
  }
}
```

## Example: Updating Ongoing Inputs

You can’t directly update a payroll input that has already been processed in a completed payroll. Instead, you must set the end date on the existing payroll input and submit a new one with the updated details. Update an already-processed input to maintain the integrity and audit trail of completed payroll calculations.

Example: You set an end date on an existing $100 input for Jake Lee (Exe VP, Mgr 7000) for the sample `payComponent` United Way Deduction and created a new $200 input starting the day after the end date of the existing input.

Query for the active input by using a `GET` request to find the `id` of the ongoing payroll input for the worker and pay component:

```
<b>GET </b> /payrollInputs?worker=2290cf186cf64d029027c64c4df7815a&payComponent=c23dcf7062d54aaea4c0564400132acb
```

```
{
  "total": 1,
  "data": [
    {
      "id": "786d2aab7c284761ab4b330400bc2054",
      "descriptor": "Jake Lee (Exe VP, Mgr 7000) - United Way Deduction - 01/01/2024 -",
      "Payroll_Input_ID": "1505.2",
      "adjustment": false,
      "fieldEditability": "endDateOnly",
      "payComponent": {
        "id": "c23dcf7062d54aaea4c0564400132acb",
        "descriptor": "United Way Deduction",
        "code": "UWAY"
      },
      "inputDetails": [
        {
          "id": "8f95f69491b84203b48edbd1d90b3f06",
          "value": "100",
          "type": {
            "id": "c23dcf7062d54aaea4c0564400132acb",
            "descriptor": "United Way Deduction",
            "name": "Amount"
          }
        }
      ],
      "worker": {
        "id": "2290cf186cf64d029027c64c4df7815a",
        "descriptor": "Jake Lee (Exe VP, Mgr 7000)",
        "Employee_ID": "21053"
      },
      "ongoing": true,
      "startDate": "2024-01-01"
    }
  ]
}
```

Update the end date of the existing payroll input by using a `PATCH` request. Set the `endDate` to the last day of the pay period before the change takes effect.

`<b>PATCH</b> /payrollInputs/{inputId}`

This sample request updates the `endDate` of the existing payroll input, using the Workday ID of the payroll input response from the `GET /payrollInputs` endpoint:

```
<b>PATCH</b> /payrollInputs/786d2aab7c284761ab4b330400bc2054
```

<b>Request Body:</b>

```
{ "endDate": "2025-01-31" }
```

<b>Response:</b>

```
{
  "id": "786d2aab7c284761ab4b330400bc2054",
  "descriptor": "Jake Lee (Exe VP, Mgr 7000) - United Way Deduction - 01/01/2024 - 01/31/2025",
  "Payroll_Input_ID": "PAYROLL_INPUT-15-2",
  "worker": {
    "id": "2290cf186cf64d029027c64c4df7815a",
    "descriptor": "Jake Lee (Exe VP, Mgr 7000)",
    "Employee_ID": "21053"
  },
  "ongoing": true,
  "inputDetails": [
    {
      "id": "8f95f69491b84203b48edbd1d90b3f06",
      "value": "100",
      "type": {
        "id": "c23dcf7062d54aaea4c0564400132acb",
        "descriptor": "United Way Deduction",
        "name": "Amount"
      }
    }
  ],
  "payComponent": {
    "id": "c23dcf7062d54aaea4c0564400132acb",
    "descriptor": "United Way Deduction",
    "code": "UWAY"
  },
  "fieldEditability": "endDateOnly",
  "adjustment": false,
  "startDate": "2024-01-01",
  "endDate": "2025-01-31"
}
```

Create the new input by using a `POST` request with the updated amount or details. Set its `startDate` to the first day the new input is effective.

```
<b>POST</b> /payrollInputs
```

<b>Request Body:</b>

```
{
  "inputDetails": [{
    "type": {
      "id": "c23dcf7062d54aaea4c0564400132acb"
    },
    "value": "200"
  }],
  "ongoing": true,
  "payComponent": {
    "id": "c23dcf7062d54aaea4c0564400132acb"
  },
  "startDate": "2025-02-01",
  "worker": {
    "id": "2290cf186cf64d029027c64c4df7815a"
  }
}
```

<b>Response Body:</b>

```
{
  "id": "7fc94699371a810011a3803d00800000",
  "descriptor": "Jake Lee (Exe VP, Mgr 7000) - United Way Deduction - 02/01/2025 -",
  "Payroll_Input_ID": "PAYROLL_INPUT-15-643",
  "ongoing": true,
  "adjustment": false,
  "worker": {
    "id": "2290cf186cf64d029027c64c4df7815a",
    "descriptor": "Jake Lee (Exe VP, Mgr 7000)",
    "Employee_ID": "21053"
  },
  "inputDetails": [
    {
      "id": "7fc94699371a810011a3803d00800001",
      "value": "200",
      "type": {
        "id": "c23dcf7062d54aaea4c0564400132acb",
        "descriptor": "United Way Deduction",
        "name": "Amount"
      }
    }
  ],
  "fieldEditability": "all",
  "startDate": "2025-02-01",
  "payComponent": {
    "id": "c23dcf7062d54aaea4c0564400132acb",
    "descriptor": "United Way Deduction",
    "code": "UWAY"
  }
}
```

## Considerations

<b>Overrides and Adjustments Input Types</b>

The `payrollInput` REST API allows for 2 distinct methods of input:

-   Override: This input replaces any existing calculated amounts for a specific pay component, including one-time payments from compensation plans, for the entire pay period.
-   Adjustment: This input, which defaults to false, adds a separate entry to the payroll results.


This control ensures that external payroll inputs interact with existing compensation as intended, preventing unintended data loss or that all payments are processed concurrently. To achieve the override behavior, you must explicitly set the `adjustment` parameter as false.

<b>Recommendation for Correcting Data</b>

Because the REST API doesn’t utilize Batch IDs, corrections must be managed for each individual record. It is highly recommended that you record the Workday ID returned when creating a payroll input, as this ID is critical for subsequent `PATCH` or `DELETE` operations required to correct any errors. Before executing a `PATCH` request, review the `fieldEditability` parameter to confirm the input isn’t already locked.

<b>Ongoing Input</b>

An ongoing input will continue to apply to every future pay period indefinitely until it is manually stopped. There is no automatic expiry, warning, or system check. Consequently, creating an ongoing input when a one-time input was intended constitutes an often difficult-to-detect error.

## Checking Validations

These are the most frequently encountered errors:

<table><thead><tr><th>Endpoints</th><th>Error Code</th><th>Cause</th></tr></thead><tbody><tr><td><code>PATCH /payrollInputs/{inputId}</code>, <code>DELETE /payrollInputs/{inputId}</code></td><td>A140</td><td>You can't delete or edit an input used in a completed payroll result. You must specify an end date on the existing input and then create a new one, as you can’t delete or edit the original input.</td></tr><tr><td><code>PATCH /payrollInputs/{inputId}</code>, <code>DELETE /payrollInputs/{inputId}</code></td><td>A553 / A557</td><td>You can only edit the end date. Before attempting a <code>PATCH</code> request, verify the <code>fieldEditability</code> parameter.</td></tr><tr><td><code>PATCH /payrollInputs/{inputId}</code>, <code>DELETE /payrollInputs/{inputId}</code></td><td>A556</td><td>You can't create, update, or delete inputs that were created as external payroll inputs.</td></tr><tr><td><code>PATCH /payrollInputs/{inputId}</code>, <code>DELETE /payrollInputs/{inputId}</code></td><td>A121</td><td>The end date corresponds to a completed pay period end date or a locked result period end date.</td></tr><tr><td><code>POST /payrollInputs</code></td><td>A116</td><td>The pay component is missing required worktags.</td></tr></tbody></table><br/>

For a full list of error codes, see the non-successful status code in the Response section of the OpenAPI specification on the [REST API Explorer on the Developer Site](https://developer.workday.com/rest-api-explorer).

## Limitations

The REST API doesn’t support:

-   The association of a Batch ID with payroll inputs. For bulk loading with batch management, consider using the `Import_Payroll_Input` SOAP web service.
-   Payroll tax location mapping or pay components that require special entry.
-   Creating, updating, or deleting inputs that were created as external payroll inputs.
-   Automatically end-dating ongoing pay inputs when a worker is terminated. Integrations must handle this explicitly.
-   Defaulting the worker’s primary position when they have multiple jobs. You must specify the position.


You can’t update or delete:

-   An existing payroll input that has been included in a completed payroll run. You must set an end date on the existing input and create a new one.
-   A pay input that’s been used in an off-cycle payment.


When a tenant has an approval business process configured for pay input creation, the API doesn’t indicate whether the input is pending approval or is active. Therefore, a successful `POST` run doesn’t guarantee that the pay input is ready for subsequent processing.

The `fieldEditability` parameter is read-only and can’t be overridden.

## REST and SOAP API Comparison

<table><thead><tr><th>Feature / Use Case</th><th><code>payrollInputs</code> REST API</th><th><code>Import_Payroll_Input</code> SOAP API</th><th>Recommendation</th></tr></thead><tbody><tr><td>Transaction Type</td><td>Synchronous (Real-Time).</td><td>Asynchronous (Batch).</td><td>REST for single, immediate transactions.</td></tr><tr><td>Batch ID Support</td><td>Not Supported.</td><td>Supported and Required.</td><td>Use SOAP for any process requiring bulk validation, administration, or deletion with a Batch ID.</td></tr><tr><td>Payload Flexibility</td><td>Supported.</td><td>Not Supported.</td><td>Use REST when you need to submit detailed input types like Units that are not available in the SOAP service.</td></tr><tr><td>Error Handling</td><td>Per-transaction.</td><td>Batch-level.</td><td>REST requires record-by-record error handling. SOAP allows for easier management of load errors at the batch level.</td></tr></tbody></table><br/>

## Common Errors

<table><thead><tr><th>Error</th><th>Error Code</th><th>Cause and Solution</th></tr></thead><tbody><tr><td>Authorization Error</td><td>HTTP 403 Forbidden</td><td>Cause: The Integration System User (ISU) making the API call lacks the necessary security permissions. <p>Solution: Grant the ISU Get and Put access to the <i>Worker Data: Payroll Public API (Payroll Input)</i> security domain in the Core Payroll functional area. Ensure the security policy changes are activated.</p></td></tr><tr><td>Validation Error on Pay Component</td><td>Varies (Application Validation Error)</td><td>Cause: The specified pay component (Earning or Deduction) isn’t configured to accept an external input. <p>Solution: In the Workday UI, verify the pay component's configuration. Ensure the <b>Input Amount Allowed?</b> checkbox is selected on the <b>Edit Earning</b> or <b>Edit Deduction</b> task for the pay component you want to add pay input for. Also confirm that the worker meets the eligibility criteria for the pay component for the specified dates.</p></td></tr><tr><td>Duplicate Payroll Input Created</td><td>N/A (Successful POST)</td><td>Cause: An attempt to update an existing record was made using a <code>POST</code> request instead of a <code>PATCH</code> request to the specific record's URL. The API successfully creates a new record as instructed, leading to duplicates. <p>Solution: To update an existing payroll input, you must use a <code>PATCH</code> request and target the unique <code>id</code> of the record (<code>/api/payroll/v2/{tenant}/payrollInputs/{id}</code>). Always store the <code>id</code> returned by Workday upon creation to use for future updates.</p></td></tr><tr><td><code>fieldEditability</code></td><td> </td><td>Cause: Attempting to <code>PATCH</code> a field that isn't editable. <p>Solution: Check <code>fieldEditability</code> before attempting a <code>PATCH</code> request.</p></td></tr><tr><td>Delete Blocked by Completed Result</td><td> </td><td>Cause: You can’t <code>DELETE</code> an input that's been used in a completed result. <p>Solution: You must end date the existing input and create a new pay input.</p></td></tr><tr><td>Off-Cycle Payment Lock</td><td> </td><td>Cause: You can’t update or delete an input tied to an off-cycle payment. <p>Solution: You must set an end date on the existing input and create a new pay input.</p></td></tr><tr><td>Worktags</td><td>422</td><td>Cause: There are missing or invalid worktags. <p>Solution: Specify the missing worktags or update invalid worktags. The pay component has worktag requirements.</p></td></tr><tr><td>Worker Country Mismatch</td><td> </td><td>Cause: You run a <code>POST</code> request and the pay component is configured for a different country than the worker's. <p>Solution: Update the pay component with the <b>Country</b> field on the <b>Edit Earning</b> or <b>Edit Deduction</b> task.</p></td></tr></tbody></table><br/>

### Related Information

[Administrator Guide: Setup Considerations: Payroll Input](https://doc.workday.com/admin-guide/en-us/payroll/payroll-input/log1547820027674.html)

