Summarize successful payments and refunds
curl --request GET \
--url https://api.getbreezyapp.com/v1/reports/collections \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/reports/collections"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.getbreezyapp.com/v1/reports/collections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"period_start": "2026-09-01",
"period_end": "2026-10-01",
"group": null,
"currency": "USD",
"payment_count": 1,
"refund_count": 1,
"received_cents": 80000,
"refunded_cents": 5000,
"net_collections_cents": 75000
}
],
"pagination": {
"next_cursor": null
},
"meta": {
"request_id": "example-request",
"generated_at": "2026-09-08T19:00:00Z",
"timezone": "America/Los_Angeles"
},
"report": {
"start_date": "2026-09-01",
"end_date": "2026-10-01",
"bucket": "month",
"group_by": null
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "end_date must be later than start_date",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "A valid API key is required",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "METHOD_NOT_ALLOWED",
"message": "This resource supports GET",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Request limit exceeded",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Unable to complete request",
"request_id": "example-request",
"details": []
}
}Reports
Summarize successful payments and refunds
PAID payments minus SUCCEEDED refunds; each uses its own occurrence date and is counted once. No proportional refund allocation to invoices, jobs or business units. One optional grouping plus time; rows order by period_start then group value (null first). Empty groups/buckets are omitted.
GET
/
reports
/
collections
Summarize successful payments and refunds
curl --request GET \
--url https://api.getbreezyapp.com/v1/reports/collections \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/reports/collections"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.getbreezyapp.com/v1/reports/collections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"period_start": "2026-09-01",
"period_end": "2026-10-01",
"group": null,
"currency": "USD",
"payment_count": 1,
"refund_count": 1,
"received_cents": 80000,
"refunded_cents": 5000,
"net_collections_cents": 75000
}
],
"pagination": {
"next_cursor": null
},
"meta": {
"request_id": "example-request",
"generated_at": "2026-09-08T19:00:00Z",
"timezone": "America/Los_Angeles"
},
"report": {
"start_date": "2026-09-01",
"end_date": "2026-10-01",
"bucket": "month",
"group_by": null
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "end_date must be later than start_date",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "A valid API key is required",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "METHOD_NOT_ALLOWED",
"message": "This resource supports GET",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Request limit exceeded",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Unable to complete request",
"request_id": "example-request",
"details": []
}
}Authorizations
Existing Breezy API key. Grants all published reads in its associated company. No app permission scopes.
Query Parameters
Maximum parent records or report rows. Complete children are always included.
Required range:
1 <= x <= 100Repeat the original filters; any valid page size may continue. Foreign-company, tampered or mismatched cursors return INVALID_CURSOR.
Minimum string length:
1Inclusive company-local date.
Exclusive company-local date; must be after start_date.
Available options:
day, week, month, quarter, year Available options:
CARD, ACH, CASH, CHECK, PAYPAL, VENMO, CASHAPP, OTHER, WISETACK_LOAN, null Available options:
account, payment_method, collector, null Response
Successful read. Clients ignore unrecognized response fields.