---
title: "Create Clock Entry"
method: POST
path: "/api/v1/time-tracking/clock-entries"
tags: ["Time Tracking", "Public API"]
---

# Create Clock Entry

`POST /api/v1/time-tracking/clock-entries`

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/time-tracking/clock-entries`
- Auth: one of:
  - HTTP basic
  - OAuth 2
    - Authorization code: `/authorize.php`
    - Token URL: `/token.php` scopes: `time_tracking:timesheets.write`
- TypeScript: <https://skmtc.dev/bamboohr/apis/bamboohr-api/docs/api/v1/time-tracking/clock-entries/post.ts> (a function with typed inputs; its response is checked against the schema)

Manually creates a time tracking clock entry (corrections, retroactive entry). Distinct from the real-time clock-in process resource. The parent daily entry and timesheet are resolved (and created if needed) from `start` + `timezone`; the entry is rejected with 409 when the resolved timesheet's type does not accept clock entries. `start` and `end` must fall on the same calendar day in the given `timezone`; an entry that would cross local midnight, including one ending at exactly 00:00 the next day, is rejected with 422. Submit one entry per day instead. Geolocation is persisted only when the employee's configuration has it enabled.

OAuth Scopes: time_tracking:timesheets.write

## Request body

- ClockEntryCreateClockEntryV1: Request body for manually creating a time tracking clock entry (corrections, retroactive entry). `timesheetId` and `date` are derived server-side from `start` + `timezone`.
  - `employeeId` integer, required: The employee the clock entry belongs to.
  - `start` string, date-time, required: Clock-in timestamp (ISO 8601).
  - `end` string, date-time, required: Clock-out timestamp (ISO 8601). Must be after start and on the same calendar day as start in the given timezone; an end of exactly 00:00 the next day is rejected.
  - `timezone` string, required: IANA timezone identifier the times are recorded under.
  - `note` string, nullable: Free-text note attached to the entry.
  - `projectId` integer, nullable: Project the time was logged against.
  - `taskId` integer, nullable: Task within the project.
  - `clockInLocation` ClockEntryClockEntryLocationInputV1: Geolocation captured for a clock action. Persisted only when the configuration has geolocation enabled.
    - `latitude` number, float, required: Latitude in decimal degrees.
    - `longitude` number, float, required: Longitude in decimal degrees.
    - `accuracy` number, float, nullable: GPS accuracy radius in meters. Must not exceed 10000.
    - `address` string, nullable: Client-supplied human-readable address. Not server-canonical.
  - `clockOutLocation` ClockEntryClockEntryLocationInputV1: Geolocation captured for a clock action. Persisted only when the configuration has geolocation enabled.
    - `latitude` number, float, required: Latitude in decimal degrees.
    - `longitude` number, float, required: Longitude in decimal degrees.
    - `accuracy` number, float, nullable: GPS accuracy radius in meters. Must not exceed 10000.
    - `address` string, nullable: Client-supplied human-readable address. Not server-canonical.

## Response `201`

Clock entry created successfully.

- TimeTrackingClockEntryV1: A clock in/out record with start/end timestamps, timezone, and optional geolocation.
  - `id` integer: Identifier for the clock entry.
  - `employeeId` integer: The employee who owns the entry.
  - `timesheetId` integer: The timesheet (pay period) this entry rolls up to.
  - `date` string, date: Calendar date the entry is attributed to (in the entry's timezone).
  - `start` string, date-time: Clock-in timestamp, ISO 8601 with the offset of the entry's timezone.
  - `end` string, date-time, nullable: Clock-out timestamp. Null while the employee is actively clocked in.
  - `timezone` string: IANA timezone name under which start / end were recorded.
  - `hours` number, float: Computed elapsed hours between start and end. Zero while the entry is open.
  - `note` string, nullable: Free-text note attached to the entry.
  - `projectId` integer, nullable: Project the time was logged against.
  - `taskId` integer, nullable: Task within the project.
  - `clockInLocation` TimeTrackingClockEntryLocationV1: Geolocation captured for a clock action.
    - `latitude` number, float: Latitude in decimal degrees.
    - `longitude` number, float: Longitude in decimal degrees.
    - `accuracy` number, float, nullable: GPS accuracy radius in meters.
    - `address` string, nullable: Client-supplied human-readable address. Not server-canonical.
  - `clockOutLocation` TimeTrackingClockEntryLocationV1: Geolocation captured for a clock action.
    - `latitude` number, float: Latitude in decimal degrees.
    - `longitude` number, float: Longitude in decimal degrees.
    - `accuracy` number, float, nullable: GPS accuracy radius in meters.
    - `address` string, nullable: Client-supplied human-readable address. Not server-canonical.
  - `schedulingShiftId` string, uuid, nullable: The scheduled shift this entry was worked against.
  - `startSource` 'USER' | 'SYSTEM', nullable: How start was set: USER or SYSTEM. Read-only; server-set.
  - `endSource` 'USER' | 'SYSTEM', nullable: How end was set: USER or SYSTEM. Read-only; server-set.
  - `clockedInBy` integer, nullable: The employee id of the actor who recorded clock-in. Differs from employeeId on proxy clock-in. Null when the actor is not an employee.
  - `clockedOutBy` integer, nullable: The employee id of the actor who recorded clock-out. Null when the actor is not an employee.
  - `createdAt` string, date-time: When the entry was created.
  - `updatedAt` string, date-time: When the entry was last modified.

## Other responses

- `400`: Malformed request body.
- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `404`: No timesheet covering the requested date exists for the employee, or the employee does not exist.
- `409`: Conflict. An overlapping entry exists, or the resolved timesheet's type is SINGLE or HOUR (clock entries not accepted).
- `422`: Validation error (e.g., missing required fields, end before start, start and end on different calendar days in the given timezone, invalid timezone, accuracy greater than 10000).

## Changes

- **2026-11-03** `922fc15f43a7`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bamboohr/apis/bamboohr-api/changes/api/v1/time-tracking/clock-entries/post.md)

---

[API](https://skmtc.dev/bamboohr/apis/bamboohr-api.md) - [All operations](https://skmtc.dev/bamboohr/apis/bamboohr-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bamboohr/apis/bamboohr-api/revisions/922fc15f43a7?raw)
