List refunds
Operation ID: listRefunds
Group: Accounting › Refunds
Open in the interactive reference
GET /accounting/refunds
Read-only: Reads and returns; changes nothing.
Lists refunds. Each refund has the same fields as on GET accounting/refunds/:id.
This endpoint doesn't follow the standard rules in Pagination and querying. Page with pageSize and cursor, not page[size] and page[cursor]. The records are in data.items, and the next page's cursor is in data.pagination.nextCursor.
Filter with the plain query parameters listed below, such as status, not filter[field][op]. There is no sort or fields. Any query parameter the endpoint doesn't declare is ignored without an error, so a request that follows the standard rules gets the first page, unfiltered, every time.
To filter by several approval statuses at once, or by the refund's id, use POST accounting/refunds/search.
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. |
status |
query | string | no | Limits results to refunds in this approval state. Possible values: 'draft', 'pendingApproval', 'revise', 'approved', 'rejected'. Omit to return every state. Example: "approved". |
paymentId |
query | string | no | Limits results to refunds against this source payment. Omit to return every payment. See id on GET accounting/payments/:id. |
customerId |
query | string | no | Limits results to refunds for this customer. Omit to return every customer. See id on GET accounting/customers/:id. Example: "9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7". |
refundDateFrom |
query | string | no | Limits results to refunds issued on or after this date, inclusive. Format YYYY-MM-DD. |
refundDateTo |
query | string | no | Limits results to refunds issued on or before this date, inclusive. Format YYYY-MM-DD. |
modifiedFrom |
query | string | no | Limits results to refunds changed at or after this time, inclusive. In UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
modifiedTo |
query | string | no | Limits results to refunds changed at or before this time, inclusive. In UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
cursor |
query | string | no | The cursor from the previous response's data.pagination.nextCursor. Omit for the first page. |
pageSize |
query | number | no | The number of refunds per page. Defaults to 50. A value above 200 is treated as 200, not rejected. Example: 50. |
Response
200 Success
Under data (listRefundsOutput):
| Field | Type | Required | Description |
|---|---|---|---|
items |
array<object> | yes | The refunds that match, most recently created first. An empty array when nothing matches. Example: [{"id":"3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45","refundNumber":"REF-1042","refundDate":"2026-08-01","approvalStatus":"approved","refundType":"ach","currency":"USD","amount":"150.00","unappliedAmount":"0.00","customerId":"9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7","customerName":"Northwind Traders","entityId":"1a24d5e9-3b7d-4f80-9c6d-2e8f70b13a45","paymentId":"5a0f3e6d-81b7-4c8e-9b21-9c2a6a107d34","paymentNumber":"PMT-7781","lastModifiedDate":"2026-08-01T09:12:44.000Z"}]. |
items[].id |
string | yes | The unique identifier for the refund. |
items[].refundNumber |
string | no | The refund number, unique within the tenant, for example 'REF-1042'. |
items[].refundDate |
date | yes | The date the refund was issued. Format YYYY-MM-DD. |
items[].approvalStatus |
string | no | The approval status. Possible values: 'draft', 'pendingApproval', 'revise', 'approved', 'rejected'. |
items[].refundType |
string | yes | The payment method used for the refund. Possible values: 'check', 'ach', 'wire', 'creditCard', 'directDebit', 'sepaCreditTransfer'. |
items[].currency |
string | yes | The currency of the refund. Every amount on it is in this currency. Format ISO 4217, for example 'USD'. |
items[].amount |
decimal | yes | The refund amount, in the refund currency. |
items[].unappliedAmount |
decimal | no | The unapplied balance remaining on the source payment, in the refund currency. |
items[].refundNote |
string | no | A free-form note attached to the refund. Absent when none was set. |
items[].customerId |
string | yes | The customer receiving the refund. See id on GET accounting/customers/:id. |
items[].customerName |
string | no | The name of the customer receiving the refund. |
items[].entityId |
string | yes | The legal entity issuing the refund. See id on GET base/entities. |
items[].paymentId |
string | yes | The source payment being refunded. See id on GET accounting/payments/:id. |
items[].paymentNumber |
string | no | The number of the source payment being refunded. |
items[].lastModifiedDate |
date-time | yes | The date and time the refund last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
pagination |
object | yes | The pagination cursor for this page. Example: {"hasMore":false}. |
pagination.nextCursor |
string | no | The cursor for the next page. Pass it as the cursor input. Absent on the last page. |
pagination.hasMore |
boolean | yes | True when more refunds remain beyond this page. |
{
"data": {
"items": [
{
"id": "3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45",
"refundNumber": "REF-1042",
"refundDate": "2026-08-01",
"approvalStatus": "approved",
"refundType": "ach",
"currency": "USD",
"amount": "150.00",
"unappliedAmount": "0.00",
"customerId": "9c2a6a10-7d34-4c8e-9b21-5a0f3e6d81b7",
"customerName": "Northwind Traders",
"entityId": "1a24d5e9-3b7d-4f80-9c6d-2e8f70b13a45",
"paymentId": "5a0f3e6d-81b7-4c8e-9b21-9c2a6a107d34",
"paymentNumber": "PMT-7781",
"lastModifiedDate": "2026-08-01T09:12:44.000Z"
}
],
"pagination": {
"hasMore": false
}
},
"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