curl --request GET \
--url https://api.getbreezyapp.com/v1/time-entries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/time-entries"
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/time-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "b1000000-0000-4000-8000-000000000001",
"team_member": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"starts_at": "2026-09-08T19:30:00Z",
"ends_at": "2026-09-08T20:30:30Z",
"start_corrected": false,
"end_corrected": true,
"duration_minutes": 60.5,
"activity": {
"name": "ON-SITE",
"kind": "ON-SITE"
},
"payable": true,
"job_id": "11111111-1111-4111-8111-000000000501",
"appointment_id": "11111111-1111-4111-8111-000000001109",
"assignment_id": "11111111-1111-4111-8111-000000001113",
"attention_note": null,
"deleted_at": null,
"created_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"updated_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"deleted_by": null,
"created_at": "2026-09-08T19:30:00Z",
"updated_at": 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": "STALE_REVISION",
"message": "The visit changed; read it again before editing",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "Request body exceeds 64 KB",
"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 recorded time entries
Effective corrected intervals, including custom activities and validated work links. Orders by created_at then id ascending. Soft-deleted entries require include_deleted=true. No reliable updated_since filter; refresh known IDs and effective-start windows. Elapsed duration is distinct from capped timesheet minutes.
curl --request GET \
--url https://api.getbreezyapp.com/v1/time-entries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.getbreezyapp.com/v1/time-entries"
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/time-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "b1000000-0000-4000-8000-000000000001",
"team_member": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"starts_at": "2026-09-08T19:30:00Z",
"ends_at": "2026-09-08T20:30:30Z",
"start_corrected": false,
"end_corrected": true,
"duration_minutes": 60.5,
"activity": {
"name": "ON-SITE",
"kind": "ON-SITE"
},
"payable": true,
"job_id": "11111111-1111-4111-8111-000000000501",
"appointment_id": "11111111-1111-4111-8111-000000001109",
"assignment_id": "11111111-1111-4111-8111-000000001113",
"attention_note": null,
"deleted_at": null,
"created_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"updated_by": {
"id": "11111111-1111-4111-8111-000000000401",
"name": "Alex Example"
},
"deleted_by": null,
"created_at": "2026-09-08T19:30:00Z",
"updated_at": 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": "STALE_REVISION",
"message": "The visit changed; read it again before editing",
"request_id": "example-request",
"details": []
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "Request body exceeds 64 KB",
"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 and scheduling writes 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 effective start instant.
Exclusive effective start instant; this is not an overlap filter.
Exact, case-sensitive recorded activity name.
1True selects entries with no effective end; false selects closed entries.
Include retained soft-deleted entries; hard-deleted records are unavailable.