Log a time entry

Logs time. Only seconds and date are required: the account comes from the token, and the client is taken from the project, so neither is something you send.

Attach the entry to work with project_id or task_uuid. Sending task_uuid also settles the project — it is taken from the task, and any project_id you send is ignored.

Two fields depend on permissions rather than on what you send. rate and non_billable are only honoured for a token allowed to set billing; for anyone else Bonsai derives them from the project or member rate and the project's billing type. Logging time against someone else's name with owner_member_id needs permission to manage the whole team's time; it defaults to whoever the token belongs to.

Body
required
application/json

Time entry attributes, wrapped in a time_entry key.

  • time_entry
    Type: object
    required
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/public-api/v1/time_entries
curl https://app.hellobonsai.com/public-api/v1/time_entries \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "time_entry": {
    "seconds": 3600,
    "date": "2026-06-17",
    "project_id": 51,
    "task_uuid": "ad3fdad8-5072-46df-8800-bb57299179df",
    "notes": "Homepage build",
    "rate": "150.00",
    "non_billable": false,
    "owner_member_id": "me"
  }
}'
{
  "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"
  }
}