curl --request GET \
--url https://api.getbreezyapp.com/v1/form-responses \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/form-responses"
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/form-responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "11111111-1111-4111-8111-000000004103",
"form_id": "11111111-1111-4111-8111-000000004104",
"name": "Air conditioning inspection",
"instance_number": 2,
"label": "Downstairs condenser",
"ad_hoc": true,
"appointment_id": "11111111-1111-4111-8111-000000001109",
"job_id": "11111111-1111-4111-8111-000000000501",
"account_id": "11111111-1111-4111-8111-000000000101",
"location_id": "11111111-1111-4111-8111-000000001107",
"last_edited_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"created_at": "2026-08-20T14:00:00Z",
"updated_at": "2026-09-08T19:00:00Z",
"completed": false,
"questions": [
{
"question_id": "11111111-1111-4111-8111-000000004105",
"answer_path": "/items/1/response",
"section": "Outdoor equipment",
"label": "Equipment operates normally?",
"type": "YES_NO",
"required": true,
"helper_text": null,
"value": "No",
"photo_requirement": "NONE",
"attached_photo_url": null
},
{
"question_id": null,
"answer_path": "/items/2/left/0/response",
"section": "Outdoor equipment",
"label": "Condition",
"type": "PASS_FAIL_FLAG",
"required": true,
"helper_text": null,
"value": "Flag",
"photo_requirement": "OPTIONAL",
"attached_photo_url": "https://example.invalid/inspection-photo.png"
},
{
"question_id": null,
"answer_path": "/items/2/right/0/response",
"section": "Outdoor equipment",
"label": "Notes",
"type": "TEXT",
"required": true,
"helper_text": "Explain the finding",
"value": null,
"photo_requirement": "NONE",
"attached_photo_url": null
}
]
}
],
"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 form responses
Captured visit forms with complete questions, recorded answers, original work relationships, and current required-data completeness. Current templates do not replace captured content. Unsupported capture returns null questions and completeness while retaining safe metadata. Orders by id ascending. List and detail return the same complete representation. updated_since covers parent-row saves only.
curl --request GET \
--url https://api.getbreezyapp.com/v1/form-responses \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/form-responses"
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/form-responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "11111111-1111-4111-8111-000000004103",
"form_id": "11111111-1111-4111-8111-000000004104",
"name": "Air conditioning inspection",
"instance_number": 2,
"label": "Downstairs condenser",
"ad_hoc": true,
"appointment_id": "11111111-1111-4111-8111-000000001109",
"job_id": "11111111-1111-4111-8111-000000000501",
"account_id": "11111111-1111-4111-8111-000000000101",
"location_id": "11111111-1111-4111-8111-000000001107",
"last_edited_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"created_at": "2026-08-20T14:00:00Z",
"updated_at": "2026-09-08T19:00:00Z",
"completed": false,
"questions": [
{
"question_id": "11111111-1111-4111-8111-000000004105",
"answer_path": "/items/1/response",
"section": "Outdoor equipment",
"label": "Equipment operates normally?",
"type": "YES_NO",
"required": true,
"helper_text": null,
"value": "No",
"photo_requirement": "NONE",
"attached_photo_url": null
},
{
"question_id": null,
"answer_path": "/items/2/left/0/response",
"section": "Outdoor equipment",
"label": "Condition",
"type": "PASS_FAIL_FLAG",
"required": true,
"helper_text": null,
"value": "Flag",
"photo_requirement": "OPTIONAL",
"attached_photo_url": "https://example.invalid/inspection-photo.png"
},
{
"question_id": null,
"answer_path": "/items/2/right/0/response",
"section": "Outdoor equipment",
"label": "Notes",
"type": "TEXT",
"required": true,
"helper_text": "Explain the finding",
"value": null,
"photo_requirement": "NONE",
"attached_photo_url": null
}
]
}
],
"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 captured appointment’s job; follow-up reuse does not duplicate responses.