Get returns and disputes
Returns the tenant payments from the last 30 days that came back — bank-returned ACH payments and card chargebacks — with the unit and property behind each one.
Authorization
AuthorizationstringrequiredQuery parameters
skipCachebooleanSet true to recompute instead of reading the cached figure. The fresh result is still written back to the cache, which holds for an hour.
Response
200 · The two groups, each newest first. The numeric ids are left out of this example — the code block above shows how they appear on the wire.
returnsobjectACH payments the bank sent back.
disputesobjectCard payments under or past a chargeback. Same shape as returns, with paymentMethod of creditCard or debitCard and status of disputing or disputed.
401 · The access token is missing, expired, or not for this company.
403 · The access token is not for a property manager.
| Group | What lands in it |
|---|---|
returns | Incoming ACH payments in the last 30 days whose status is returned — the bank rejected the transfer. |
disputes | Incoming card payments, credit or debit, in the last 30 days whose status is disputing or disputed — a chargeback in progress or already settled. |
transactionId, linkedTransactionId, leaseId, unitId and propertyId are serialised as numbers here, unlike every other endpoint in this API where ids are decimal strings. They are 19-digit Snowflakes, which is more precision than a JavaScript number holds, so JSON.parse silently rounds them and hands you an id that does not exist. Read this response with a big-integer-aware parser, or match the rows up by amount and date and take the ids from another endpoint.
{
"transactionId": 1830472847398412103,
"amount": 1850.00,
"transactionDate": "2026-08-12T00:00:00+00:00",
"status": "returned",
"paymentMethod": "ach",
"linkedTransactionId": 1830472847398412047,
"leaseId": 1830472847398404503,
"unitId": 1830472847398404502,
"unitName": "4B",
"propertyId": 1830472847398404501,
"propertyName": "Sunset Apartments"
}The response example below leaves the numeric ids out, because writing them into this page's own JSON would round them exactly the way your parser will. The block above shows them as the server actually sends them.
The answer is cached per company for an hour, so it can lag activity by that much. Pass skipCache=true to force a recompute.