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.
Query Parameters
  • page[number]
    Type: integer
    min:  
    1

    Page to return, starting at 1.

  • page[size]
    Type: integer
    min:  
    1
    max:  
    100

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

  • filter[date_from]
    Type: string Format: date

    Return entries dated on or after this day.

  • filter[date_to]
    Type: string Format: date

    Return entries dated on or before this day.

  • filter[owner_member_id]
    Type: 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]
    Type: string

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

  • filter[company_id]
    Type: string

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

  • filter[billing_status]
    Type: string enum

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

    values
    • billed
    • unbilled
    • non_billable
  • filter[currency]
    Type: string

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

Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/public-api/v1/time_entries
curl https://app.hellobonsai.com/public-api/v1/time_entries \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "key": "01JTR8Z9K5QW3M7VX4YB2NC6HD",
      "seconds": 3600,
      "date": "2026-06-17",
      "notes": "Homepage build",
      "rate": "150.0",
      "non_billable": false,
      "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
    }
  }
}