Search payroll payments
Operation ID: searchPayrollPayment
Group: Accounting › Payroll Payments
Open in the interactive reference
POST /accounting/payroll-payments/search
Read-only: A read that takes its filters in the body. Changes nothing, and ignores Idempotency-Key.
Searches payroll payments, with their applications. Only outbound payments that pay payroll details are searched, so the results are a subset of what POST accounting/outbound-payments/search returns.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Api-Version |
header | string · v1 | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version v1. |
Request body
Required, application/json: searchPayrollPaymentInput.
| Field | Type | Required | Description |
|---|---|---|---|
filters |
object | no | The filters to apply. A payroll payment must match every filter you send. Omit to return all payroll payments. Example: {"status":"successful"}. |
filters.id |
string | no | Limits results to the payroll payment with this identifier. |
filters.payrollPaymentNumber |
string | no | Limits results to the payroll payment with this number. |
filters.entityId |
string | no | Limits results to payments made by this legal entity. See id on GET base/entities. |
filters.entityName |
string | no | Limits results to payments made by a legal entity with this name. The match is exact and case-sensitive. |
filters.paymentAccountId |
string | no | Limits results to payments booked against this general ledger account. See id on GET accounting/accounts/:id. |
filters.paymentType |
string | no | Limits results to payments made this way. Values include 'manual' and 'bank'. Any other value matches no payment. |
filters.paymentCurrency |
string | no | Limits results to payments in this currency. Format ISO 4217, for example 'USD'. |
filters.status |
string | no | Limits results to payments in this status. Values include 'successful', 'rejected', 'cancelled', 'processing', 'partiallySuccessful', 'unknown', 'unsigned', 'manuallyRecorded', 'scheduled' and 'voided'. Any other value matches no payment. |
filters.approvalStatus |
string | no | Limits results to payments in this approval status. |
filters.externalId |
string | no | Limits results to payments with this upstream identifier. It is not unique, so this can match several payments. |
page |
object | no | Pagination controls. Omit for the first page. Example: {"size":50}. |
page.cursor |
string | no | The cursor from the previous response's pagination.nextCursor. Omit for the first request. |
page.size |
number | no | The number of payroll payments per page. Defaults to 50. A value above 200 is treated as 200, not rejected. |
{
"filters": {
"status": "successful"
},
"page": {
"size": 50
}
}
Response
200 Success
Under data (searchPayrollPaymentOutput):
| Field | Type | Required | Description |
|---|---|---|---|
items |
array<object> | yes | The payroll payments that match, most recently created first. An empty array when nothing matches. |
items[].id |
string | yes | The unique identifier for the payroll payment. |
items[].payrollPaymentNumber |
string | no | The payment number. Absent until a number has been assigned. |
items[].paymentDate |
date | yes | The date the payment is made. Format YYYY-MM-DD. |
items[].paymentCurrency |
string | yes | The currency the payment is made in. Format ISO 4217, for example 'USD'. Governs totalPaid and every application amount. |
items[].paymentType |
string | yes | How the payment was made: the instrument, not the origin. Values include 'manual' and 'bank'. |
items[].status |
string | yes | The status of the payment. Values include 'successful', 'rejected', 'cancelled', 'processing', 'partiallySuccessful', 'unknown', 'unsigned', 'manuallyRecorded', 'scheduled' and 'voided'. |
items[].approvalStatus |
string | no | The approval status of the payment. |
items[].description |
string | no | A description recorded on the payment. |
items[].totalPaid |
decimal | no | The total amount paid, in paymentCurrency. |
items[].externalId |
string | no | The identifier this payment has in the upstream system that produced it. It is not unique. |
items[].paymentAccountId |
string | no | The general ledger account the payment is booked against. See id on GET accounting/accounts/:id. |
items[].paymentAccountName |
string | no | The name of the general ledger account the payment is booked against. |
items[].entityId |
string | no | The legal entity that made the payment. See id on GET base/entities. |
items[].entityName |
string | no | The name of the legal entity that made the payment. |
items[].lastModifiedDate |
date-time | yes | The date and time the payroll payment last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
items[].origin |
string | no | The source system this record came from, as free-form text. Absent when none was supplied. |
items[].applications |
array<object> | no | The payroll payment applications, each tying part of this payment to one payroll detail and one payee. An empty array when the payment has none. |
items[].applications[].id |
string | yes | The unique identifier for the payroll payment application. |
items[].applications[].applicationNumber |
string | no | The application number. |
items[].applications[].description |
string | no | A description of the application. |
items[].applications[].amountPaid |
decimal | no | The amount paid by this application, as a decimal in currency. |
items[].applications[].currency |
string | no | The currency governing amountPaid, the payroll run's currency. Format ISO 4217, for example 'USD'. |
items[].applications[].paymentStatus |
string | no | The status of the paying payment item, mirrored onto the application. It uses the same values as the payment's status. |
items[].applications[].payrollDetailId |
string | no | The payroll detail this application settles. See id on GET accounting/payroll-details/:id. |
items[].applications[].accountId |
string | no | The general ledger account this application is booked against. See id on GET accounting/accounts/:id. |
items[].applications[].accountName |
string | no | The name of the general ledger account this application is booked against. |
items[].applications[].accountNumber |
string | no | The number of the general ledger account this application is booked against. |
items[].applications[].payeeCode |
string | no | The payee, as a payroll-payee code from your tenant's configuration, for example 'employee' or 'taxOffice'. |
items[].applications[].payeeLabel |
string | no | The display label for the payee. |
items[].applications[].vendorId |
string | no | The vendor being paid, when the payee is a vendor. See id on GET accounting/vendors/:id. |
items[].applications[].vendorName |
string | no | The name of the vendor being paid. |
items[].applications[].employeeId |
string | no | The employee being paid, when the payee is an employee. There is no endpoint for it. |
items[].applications[].employeeName |
string | no | The name of the employee being paid. |
pagination |
object | yes | The pagination cursor for this page. |
pagination.nextCursor |
string | no | The cursor for the next page. Pass it as page.cursor. Absent on the last page. |
pagination.hasMore |
boolean | yes | True when more payments remain beyond this page. |
{
"data": {
"items": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"payrollPaymentNumber": "<payrollPaymentNumber>",
"paymentDate": "2026-01-15",
"paymentCurrency": "<paymentCurrency>",
"paymentType": "<paymentType>",
"status": "<status>",
"approvalStatus": "<approvalStatus>",
"description": "<description>",
"totalPaid": "19.99",
"externalId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"paymentAccountId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"paymentAccountName": "<paymentAccountName>",
"entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entityName": "<entityName>",
"lastModifiedDate": "2026-01-15T09:30:00.000Z",
"origin": "<origin>",
"applications": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"applicationNumber": "<applicationNumber>",
"description": "<description>",
"amountPaid": "19.99",
"currency": "<currency>",
"paymentStatus": "<paymentStatus>",
"payrollDetailId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"accountId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"accountName": "<accountName>",
"accountNumber": "<accountNumber>",
"payeeCode": "<payeeCode>",
"payeeLabel": "<payeeLabel>",
"vendorId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"vendorName": "<vendorName>",
"employeeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"employeeName": "<employeeName>"
}
]
}
],
"pagination": {
"nextCursor": "<nextCursor>",
"hasMore": true
}
},
"diagnostics": [
{
"code": "<code>",
"message": "<message>",
"severity": "error",
"path": [
"<path>"
],
"details": "<details>"
}
]
}
Statuses
400— Invalid request or business failure401— The request carries no valid access token.403— Not authorized404— Not found429— Too many requests from this client address. The response has no body and noRetry-Afterheader.500— Internal server error