Time Entries

List time entries

Lists logged time, newest first, a page at a time.

What comes back depends on the token: without permission to see the whole team's time, you only get your own entries, and filter[owner_member_id] cannot reach anyone else's.

The money fields — rate, billable_amount, non_billable and billing_status — are left out entirely for a token that is not allowed to see billing. Treat them as optional keys rather than assuming they are always there. The same token cannot filter on filter[billing_status] either: that would hand back the value the field is hiding, so it returns 403 instead.

Filtering

  • filter[date_from] and filter[date_to] — a date range over the day the work was done. Both bounds are inclusive, and either works alone.
  • filter[owner_member_id] — one or more team member ids, or me for whoever the token belongs to.
  • filter[project_id] — one or more project ids.
  • filter[company_id] — one or more client company ids, matched through each entry's project.
  • filter[billing_status] — billed, unbilled or non_billable, or several at once. Needs permission to see billing.
  • filter[currency] — one or more three-letter ISO 4217 currency codes.
get/public-api/v1/time_entries

Request

  • Base URL
    https://app.hellobonsai.com
  • URL
    https://app.hellobonsai.com/public-api/v1/time_entries
  • Auth
    • OAuth 2
      Authorization code: https://app.hellobonsai.com/oauth/authorize
      Token URL: https://app.hellobonsai.com/oauth/token
    • or HTTP bearer

Query parameters

page[number]integer

Page to return, starting at 1.

page[size]integer

Records per page. Defaults to 25; anything above 100 is reduced to 100.

filter[date_from]string date

Return entries dated on or after this day.

filter[date_to]string date

Return entries dated on or before this day.

filter[owner_member_id]string

One or more team member ids, comma-separated or repeated. Pass me for whoever the token belongs to. Reaching another member's time needs permission to see the whole team's time.

filter[project_id]string

One or more project ids, comma-separated or repeated.

filter[company_id]string

One or more client company ids, comma-separated or repeated. Matched through each entry's project.

filter[billing_status]'billed' | 'unbilled' | 'non_billable'

Return entries in one or more billing states, comma-separated or repeated. Needs permission to see billing; without it this filter returns 403.

filter[currency]string

One or more three-letter ISO 4217 currency codes, comma-separated or repeated.

Response

A page of time entries, newest first.

Example response

{
  "data": [
    {
      "key": "01JTR8Z9K5QW3M7VX4YB2NC6HD",
      "seconds": 3600,
      "date": "2026-06-17",
      "notes": "Homepage build",
      "rate": "150.0",
      "billable_amount": "150.0",
      "status": "unbilled",
      "project_id": 51,
      "owner_member_id": 314,
      "created_at": "2026-04-14T09:12:04.000Z",
      "billing_status": "unbilled",
      "currency": "USD",
      "formatted_time": "01:00:00",
      "task_uuid": "ad3fdad8-5072-46df-8800-bb57299179df"
    }
  ],
  "meta": {
    "request_id": "b1f0d2c4-7a9e-4c3b-8d5f-1e2a3b4c5d6e",
    "pagination": {
      "page": 1,
      "page_size": 25,
      "has_more": true
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.