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

# Clock Out

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

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/time-tracking/clock-outs`
- 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-outs/post.ts> (a function with typed inputs; its response is checked against the schema)

Clocks an employee out at the current server time, closing the employee's open clock entry (`end` set, `endSource: USER`). Proxy clock-out for a different employee requires `time_tracking:timesheets.write` scope plus permission to manage the target employee's time.

OAuth Scopes: time_tracking:timesheets.write

## Request body

- TimeTrackingCreateClockOutV1: Request body for the clock-out process resource.
  - `employeeId` integer, required: The employee to clock out.
  - `clockOutLocation` object, nullable: Optional geolocation captured at clock-out.
    - `latitude` number, float, required
    - `longitude` number, float, required
    - `accuracy` number, float, nullable: GPS accuracy radius in meters. Maximum 10000.
    - `address` string, nullable

## Response `200`

Successfully clocked out. Returns the closed clock entry.

- 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.
- `403`: Insufficient permissions.
- `404`: No active clock entry found for the employee.
- `409`: The employee is already clocked out, or the resolved timesheet type is not CLOCK.
- `422`: Validation error (accuracy > 10000 meters, or missing required fields).
- `500`: Internal server error.

## Changes

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

[Operation history](https://skmtc.dev/bamboohr/apis/bamboohr-api/changes/api/v1/time-tracking/clock-outs/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)
