curl --request GET \
--url https://api.getbreezyapp.com/v1/estimates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/estimates"
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/estimates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "11111111-1111-4111-8111-000000001201",
"number": "400",
"status": "ACCEPTED",
"account": {
"id": "11111111-1111-4111-8111-000000000101",
"name": "Example Household"
},
"job_id": "11111111-1111-4111-8111-000000000501",
"location_id": "11111111-1111-4111-8111-000000001107",
"job_appointment_id": "11111111-1111-4111-8111-000000001109",
"business_unit": {
"id": "11111111-1111-4111-8111-000000000201",
"name": "Service"
},
"job_type": {
"id": "11111111-1111-4111-8111-000000000301",
"name": "HVAC Service"
},
"job_class": "SERVICE",
"created_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"created_at": "2026-08-19T17:00:00Z",
"updated_at": "2026-09-08T19:00:00Z",
"accepted_at": "2026-08-20T14:00:00Z",
"accepted_on_behalf_by": null,
"last_sent_at": "2026-08-19T18:00:00Z",
"message": "Repair and replacement alternatives.",
"closed_lost_reason": {
"category": null,
"note": null
},
"currency": "USD",
"pricing_multiplier": 1,
"tax": {
"name": "Sales tax",
"rate": 0.1
},
"accepted_total_cents": 99000,
"invoice_ids": [
"11111111-1111-4111-8111-000000000601"
],
"options": [
{
"id": "11111111-1111-4111-8111-000000001202",
"position": 0,
"name": "Repair",
"description": "Restore the existing system.",
"selected": true,
"recommended": false,
"total_cents": 99000,
"tax_rounding": "round",
"line_items": [
{
"id": "11111111-1111-4111-8111-000000001203",
"position": 0,
"name": "HVAC repair",
"description": "Repair existing equipment",
"item_type": "SERVICE",
"code": "REPAIR",
"variant": null,
"pricebook_item_id": null,
"quantity": 1,
"unit_price_cents": 100000,
"taxable": true,
"discountable": true
}
],
"discounts": [
{
"id": "11111111-1111-4111-8111-000000001204",
"position": 0,
"name": "Service discount",
"description": null,
"type": "FLAT",
"amount_cents": 10000,
"rate": null
}
]
},
{
"id": "11111111-1111-4111-8111-000000001205",
"position": 1,
"name": "Replace",
"description": "Replace the system.",
"selected": false,
"recommended": true,
"total_cents": 880000,
"tax_rounding": "round",
"line_items": [
{
"id": "11111111-1111-4111-8111-000000001206",
"position": 0,
"name": "Replacement system",
"description": null,
"item_type": "EQUIPMENT",
"code": null,
"variant": null,
"pricebook_item_id": null,
"quantity": 1,
"unit_price_cents": 800000,
"taxable": true,
"discountable": true
}
],
"discounts": []
}
]
}
],
"pagination": {
"next_cursor": null
},
"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": []
}
}Page estimates
Proposals with complete options, lines, discounts, recorded totals, selection, current acceptance/loss information, and all resulting invoice IDs. Alternatives are not additive estimate value. Orders by created_at then id ascending. All statuses and complete embedded children are included by default.
curl --request GET \
--url https://api.getbreezyapp.com/v1/estimates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/estimates"
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/estimates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "11111111-1111-4111-8111-000000001201",
"number": "400",
"status": "ACCEPTED",
"account": {
"id": "11111111-1111-4111-8111-000000000101",
"name": "Example Household"
},
"job_id": "11111111-1111-4111-8111-000000000501",
"location_id": "11111111-1111-4111-8111-000000001107",
"job_appointment_id": "11111111-1111-4111-8111-000000001109",
"business_unit": {
"id": "11111111-1111-4111-8111-000000000201",
"name": "Service"
},
"job_type": {
"id": "11111111-1111-4111-8111-000000000301",
"name": "HVAC Service"
},
"job_class": "SERVICE",
"created_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"created_at": "2026-08-19T17:00:00Z",
"updated_at": "2026-09-08T19:00:00Z",
"accepted_at": "2026-08-20T14:00:00Z",
"accepted_on_behalf_by": null,
"last_sent_at": "2026-08-19T18:00:00Z",
"message": "Repair and replacement alternatives.",
"closed_lost_reason": {
"category": null,
"note": null
},
"currency": "USD",
"pricing_multiplier": 1,
"tax": {
"name": "Sales tax",
"rate": 0.1
},
"accepted_total_cents": 99000,
"invoice_ids": [
"11111111-1111-4111-8111-000000000601"
],
"options": [
{
"id": "11111111-1111-4111-8111-000000001202",
"position": 0,
"name": "Repair",
"description": "Restore the existing system.",
"selected": true,
"recommended": false,
"total_cents": 99000,
"tax_rounding": "round",
"line_items": [
{
"id": "11111111-1111-4111-8111-000000001203",
"position": 0,
"name": "HVAC repair",
"description": "Repair existing equipment",
"item_type": "SERVICE",
"code": "REPAIR",
"variant": null,
"pricebook_item_id": null,
"quantity": 1,
"unit_price_cents": 100000,
"taxable": true,
"discountable": true
}
],
"discounts": [
{
"id": "11111111-1111-4111-8111-000000001204",
"position": 0,
"name": "Service discount",
"description": null,
"type": "FLAT",
"amount_cents": 10000,
"rate": null
}
]
},
{
"id": "11111111-1111-4111-8111-000000001205",
"position": 1,
"name": "Replace",
"description": "Replace the system.",
"selected": false,
"recommended": true,
"total_cents": 880000,
"tax_rounding": "round",
"line_items": [
{
"id": "11111111-1111-4111-8111-000000001206",
"position": 0,
"name": "Replacement system",
"description": null,
"item_type": "EQUIPMENT",
"code": null,
"variant": null,
"pricebook_item_id": null,
"quantity": 1,
"unit_price_cents": 800000,
"taxable": true,
"discountable": true
}
],
"discounts": []
}
]
}
],
"pagination": {
"next_cursor": null
},
"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.
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.
1Repeat ids for a bounded ID set. Valid foreign or missing IDs contribute no list rows.
1 - 100 elementsInclusive creation instant.
Exclusive creation instant.
Inclusive parent-record updated_at filter only; not a complete change feed.
SERVICE, MAINTENANCE, ESTIMATE_REPAIR, ESTIMATE_REPLACE, INSTALL, WARRANTY, CALLBACK, SALES, UNKNOWN, null Original proposal job only.
1DRAFT, CREATED, SENT, REVIEWED, ACCEPTED, VOIDED, CLOSED, EXPIRED Inclusive company-local recorded acceptance date, regardless of current status.
Exclusive company-local recorded acceptance date, regardless of current status.