Returns recognized (mapped) expense transactions by default.amount is an object: value/currency are the original transaction amount; convertedValue is that amount in the organization display currency. Values are in minor currency units (e.g., cents).
Cursor-paginated: pass size for the page size and the returned nextCursor as cursor for the next page.
Sort with sort=<field>:asc|desc; sorting by amount uses the display-currency converted value. See transactionSortSchema for the sortable fields.
Bound a period with filters on transactionDate, using the dayOnOrAfter / dayOnOrBefore operators — they match whole days, so a time component in the value is ignored rather than cutting that day short.
Use aggs for spend totals and breakdowns instead of paging through transactions and summing them client-side. Pair it with a transactionDate filter to bound the period and size=1 to keep the response compact — the numbers come back in aggregations.
Example — spend per app for 2026 year-to-date (aggs and filters are JSON and must be URL-encoded; shown decoded here for readability):GET /transactions?size=1&filters=[{"key":"transactionDate","op":"dayOnOrAfter","value":"2026-01-01"},{"key":"transactionDate","op":"dayOnOrBefore","value":"2026-08-31"}]&aggs={"field":"appName","aggregationType":"groupBy","options":{"size":100,"sort":{"order":"desc","aggFunc":"sum","field":"amount"}},"aggs":[{"field":"amount","aggregationType":"metric","options":{"metricFunction":"sum"}}]}
Reading the result — in a groupBy bucket, value is the transaction count, not the amount. The metric you asked for is in the bucket's own aggregations: [{"key":"slack","value":37,"aggregations":{"amount":106414875}}] means 37 transactions totalling 1064148.75 in display currency. Reading value as money is the most common way to get this wrong.
A trailing {"key":"Other"} bucket rolls up everything past options.size (max 100) and carries no aggregations — skip it or widen the window.
Aggregated amounts are in the organization display currency, in minor units (cents). appName group keys are lower-cased (the field is indexed with a lowercase normalizer); group by idApp instead when you need the exact name casing.
- Rate limit: 100 requests per minute
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||