Read the recorded financials of one job
curl --request GET \
--url https://api.getbreezyapp.com/v1/job-financials/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/job-financials/{id}"
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/job-financials/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": {
"id": "11111111-1111-4111-8111-000000000501",
"number": "200",
"account": {
"id": "11111111-1111-4111-8111-000000000101",
"name": "Example Household"
},
"location_id": "11111111-1111-4111-8111-000000001107",
"business_unit": {
"id": "11111111-1111-4111-8111-000000000201",
"name": "Service"
},
"job_type": {
"id": "11111111-1111-4111-8111-000000000301",
"name": "HVAC Service"
},
"job_class": "SERVICE",
"participants": [
{
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
}
],
"created_at": "2026-08-19T16:00:00Z",
"report_date": "2026-08-20",
"report_date_basis": "INVOICE_ISSUED",
"costing": {
"enabled": true,
"tracking_status": "TRACKED",
"verification_status": "VERIFIED",
"job_type_included": true
},
"currency": "USD",
"totals": {
"revenue_cents": 130000,
"labor_cost_cents": 6000,
"parts_cost_cents": 24000,
"equipment_cost_cents": 0,
"misc_cost_cents": 0,
"other_cost_cents": 0,
"total_cost_cents": 30000,
"gross_profit_cents": 100000,
"gross_margin": 0.7692
},
"invoices": [
{
"id": "11111111-1111-4111-8111-000000000601",
"number": "1001",
"status": "OPEN",
"issued_at": "2026-08-20T16:00:00Z",
"subtotal_cents": 100000
},
{
"id": "11111111-1111-4111-8111-000000000602",
"number": "1002",
"status": "PAID",
"issued_at": "2026-09-02T16:00:00Z",
"subtotal_cents": 30000
}
],
"cost_entries": [
{
"id": "11111111-1111-4111-8111-000000001501",
"category": "labor",
"source": "manual",
"name": "Recorded service labor",
"quantity": 120,
"quantity_unit": "minute",
"unit_cost_cents": 3000,
"total_cents": 6000,
"labor_activity": "On Site",
"misc_category": null,
"pricebook_item_id": null,
"created_at": "2026-09-08T19:00:00Z",
"updated_at": "2026-09-08T19:00:00Z"
},
{
"id": "11111111-1111-4111-8111-000000001502",
"category": "parts",
"source": "invoice",
"name": "Recorded replacement part",
"quantity": 2,
"quantity_unit": "unit",
"unit_cost_cents": 12000,
"total_cents": 24000,
"labor_activity": null,
"misc_category": null,
"pricebook_item_id": null,
"created_at": "2026-09-08T19:00:00Z",
"updated_at": "2026-09-08T19:00:00Z"
}
]
},
"meta": {
"request_id": "11111111-1111-4111-8111-000000009999",
"generated_at": "2026-09-08T19:00:00Z",
"timezone": "America/Los_Angeles"
}
}{
"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": []
}
}JobFinancials
Read the recorded financials of one job
The same complete representation as collection pages, using the job ID. Reads saved costs without populating or synchronizing them from timekeeping, wages, invoices or pricebook data.
GET
/
job-financials
/
{id}
Read the recorded financials of one job
curl --request GET \
--url https://api.getbreezyapp.com/v1/job-financials/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/job-financials/{id}"
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/job-financials/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": {
"id": "11111111-1111-4111-8111-000000000501",
"number": "200",
"account": {
"id": "11111111-1111-4111-8111-000000000101",
"name": "Example Household"
},
"location_id": "11111111-1111-4111-8111-000000001107",
"business_unit": {
"id": "11111111-1111-4111-8111-000000000201",
"name": "Service"
},
"job_type": {
"id": "11111111-1111-4111-8111-000000000301",
"name": "HVAC Service"
},
"job_class": "SERVICE",
"participants": [
{
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
}
],
"created_at": "2026-08-19T16:00:00Z",
"report_date": "2026-08-20",
"report_date_basis": "INVOICE_ISSUED",
"costing": {
"enabled": true,
"tracking_status": "TRACKED",
"verification_status": "VERIFIED",
"job_type_included": true
},
"currency": "USD",
"totals": {
"revenue_cents": 130000,
"labor_cost_cents": 6000,
"parts_cost_cents": 24000,
"equipment_cost_cents": 0,
"misc_cost_cents": 0,
"other_cost_cents": 0,
"total_cost_cents": 30000,
"gross_profit_cents": 100000,
"gross_margin": 0.7692
},
"invoices": [
{
"id": "11111111-1111-4111-8111-000000000601",
"number": "1001",
"status": "OPEN",
"issued_at": "2026-08-20T16:00:00Z",
"subtotal_cents": 100000
},
{
"id": "11111111-1111-4111-8111-000000000602",
"number": "1002",
"status": "PAID",
"issued_at": "2026-09-02T16:00:00Z",
"subtotal_cents": 30000
}
],
"cost_entries": [
{
"id": "11111111-1111-4111-8111-000000001501",
"category": "labor",
"source": "manual",
"name": "Recorded service labor",
"quantity": 120,
"quantity_unit": "minute",
"unit_cost_cents": 3000,
"total_cents": 6000,
"labor_activity": "On Site",
"misc_category": null,
"pricebook_item_id": null,
"created_at": "2026-09-08T19:00:00Z",
"updated_at": "2026-09-08T19:00:00Z"
},
{
"id": "11111111-1111-4111-8111-000000001502",
"category": "parts",
"source": "invoice",
"name": "Recorded replacement part",
"quantity": 2,
"quantity_unit": "unit",
"unit_cost_cents": 12000,
"total_cents": 24000,
"labor_activity": null,
"misc_category": null,
"pricebook_item_id": null,
"created_at": "2026-09-08T19:00:00Z",
"updated_at": "2026-09-08T19:00:00Z"
}
]
},
"meta": {
"request_id": "11111111-1111-4111-8111-000000009999",
"generated_at": "2026-09-08T19:00:00Z",
"timezone": "America/Los_Angeles"
}
}{
"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.