curl --request GET \
--url https://api.getbreezyapp.com/v1/reports/revenue-attribution \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/reports/revenue-attribution"
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/revenue-attribution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"period_start": "2026-08-01",
"period_end": "2026-09-01",
"currency": "USD",
"group": {
"dimension": "team_member",
"value": null,
"label": null
},
"job_count": 1,
"sold_credit_count": 1,
"earned_credit_count": 0,
"sold_revenue_cents": 0,
"earned_revenue_cents": 0
},
{
"period_start": "2026-08-01",
"period_end": "2026-09-01",
"currency": "USD",
"group": {
"dimension": "team_member",
"value": "11111111-1111-4111-8111-000000000401",
"label": "Alex Example"
},
"job_count": 1,
"sold_credit_count": 1,
"earned_credit_count": 1,
"sold_revenue_cents": 100000,
"earned_revenue_cents": 100000
}
],
"pagination": {
"next_cursor": null
},
"meta": {
"request_id": "11111111-1111-4111-8111-000000009999",
"generated_at": "2026-09-08T19:00:00Z",
"timezone": "America/Los_Angeles"
},
"report": {
"start_date": "2026-08-01",
"end_date": "2026-09-01",
"bucket": "month",
"group_by": "team_member",
"date_basis": "WORK_COMPLETED"
}
}{
"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": []
}
}Summarize recorded sold and earned credits by member
Company-local work-completion date with no fallback. Fixed credited-member grouping; unavailable members share a null group. Separate saved sold/earned cents and credit counts, plus distinct contributing job count. Filters select credits. No invoice-payment, assignment or costing eligibility requirement. Member credits overlap; sold and earned are separate measures, not additive company revenue. Rows order by period_start then member ID, null first; empty buckets omitted and periods clipped to the request.
curl --request GET \
--url https://api.getbreezyapp.com/v1/reports/revenue-attribution \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/reports/revenue-attribution"
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/revenue-attribution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"period_start": "2026-08-01",
"period_end": "2026-09-01",
"currency": "USD",
"group": {
"dimension": "team_member",
"value": null,
"label": null
},
"job_count": 1,
"sold_credit_count": 1,
"earned_credit_count": 0,
"sold_revenue_cents": 0,
"earned_revenue_cents": 0
},
{
"period_start": "2026-08-01",
"period_end": "2026-09-01",
"currency": "USD",
"group": {
"dimension": "team_member",
"value": "11111111-1111-4111-8111-000000000401",
"label": "Alex Example"
},
"job_count": 1,
"sold_credit_count": 1,
"earned_credit_count": 1,
"sold_revenue_cents": 100000,
"earned_revenue_cents": 100000
}
],
"pagination": {
"next_cursor": null
},
"meta": {
"request_id": "11111111-1111-4111-8111-000000009999",
"generated_at": "2026-09-08T19:00:00Z",
"timezone": "America/Los_Angeles"
},
"report": {
"start_date": "2026-08-01",
"end_date": "2026-09-01",
"bucket": "month",
"group_by": "team_member",
"date_basis": "WORK_COMPLETED"
}
}{
"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.
1 <= x <= 100Repeat the original filters; any valid page size may continue. Foreign-company, tampered or mismatched cursors return INVALID_CURSOR.
1Inclusive company-local date.
Exclusive company-local date; must be after start_date.
day, week, month, quarter, year SERVICE, MAINTENANCE, ESTIMATE_REPAIR, ESTIMATE_REPLACE, INSTALL, WARRANTY, CALLBACK, SALES, UNKNOWN, null A currently validated credited company member.
SOLD, EARNED, null Response
Successful read. Clients ignore unrecognized response fields.