---
title: "Create Configuration"
method: POST
path: "/api/v1/time-tracking/configurations"
tags: ["Time Tracking", "Public API"]
---

# Create Configuration

`POST /api/v1/time-tracking/configurations`

## Request

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

Creates a new GROUP time tracking configuration together with its approval workflow. The type is forced to GROUP server-side; the GLOBAL configuration is auto-managed and cannot be created via this endpoint. Accepts an optional Idempotency-Key header for safe retries.

OAuth Scopes: time_tracking:configurations.write

## Headers

- `Idempotency-Key` string

## Request body

- TimeTrackingCreateTimeTrackingConfigurationV1: Request body for creating a GROUP time tracking configuration. The GLOBAL configuration is auto-managed and cannot be created here.
  - `name` string, required: The configuration name. Unique per company.
  - `timesheetType` 'CLOCK' | 'SINGLE' | 'MULTIPLE' | 'HOUR', required: How time is logged.
  - `workWeekStartsOn` 'SUNDAY' | 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY', required: Day of week the work week starts.
  - `approverType` 'REPORTS_TO' | 'SPECIFIC_PERSON', required: Who approves timesheets.
  - `approverUserId` integer, nullable: The user ID of the approver. Required when approverType is SPECIFIC_PERSON; must be omitted otherwise.
  - `approvalCutoff` string, required: Time of day by which timesheets must be approved, in 24-hour HH:MM format.
  - `approvalCutoffDays` integer, required: Number of days before the pay date the cutoff applies.
  - `clockInSchedulePolicy` 'ANYTIME' | 'SHIFT_REQUIRED': When scheduled employees can clock in.
  - `restrictWebClockActions` boolean: When true, removes the time clock from bamboohr.com for employees in this configuration.
  - `mobileEnabled` boolean: When true, employees can log time using the BambooHR mobile app.
  - `geolocationEnabled` boolean: When true, employee location is required when clocking in/out via mobile. Stored but has no effect while mobileEnabled is false.
  - `customOvertimeEnabled` boolean: When true, the overtime threshold fields are honored. When false, they must be omitted.
  - `overtimeDailyHours` string, nullable: Daily overtime threshold in hours. Only allowed when customOvertimeEnabled is true. Decimal string with at most 2 decimals, at least 1 and less than 24.
  - `overtimeDailyDoubleHours` string, nullable: Daily double-overtime threshold in hours. Only allowed when customOvertimeEnabled is true. Decimal string with at most 2 decimals, at least 1 and less than 24.
  - `overtimeWeeklyHours` string, nullable: Weekly overtime threshold in hours. Only allowed when customOvertimeEnabled is true. Decimal string with at most 2 decimals, at least 1 and less than 169.

## Response `201`

Configuration created successfully.

- TimeTrackingTimeTrackingConfigurationV1: A time tracking configuration. Groups of employees with shared time tracking settings are configurations with type GROUP; each company has a single GLOBAL configuration that acts as the default.
  - `id` integer: The ID of the configuration.
  - `name` string: The configuration name. Unique per company.
  - `type` 'GLOBAL' | 'GROUP': The configuration type. Read-only. Exactly one GLOBAL configuration exists per company; all customer-created configurations are GROUP.
  - `timesheetType` 'CLOCK' | 'SINGLE' | 'MULTIPLE' | 'HOUR': How time is logged.
  - `workWeekStartsOn` 'SUNDAY' | 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY': Day of week the work week starts.
  - `approverType` 'REPORTS_TO' | 'SPECIFIC_PERSON', nullable: Who approves timesheets. REPORTS_TO is the employee's manager; SPECIFIC_PERSON is a designated user. Null when no valid approver is configured and the settings need to be re-saved.
  - `approverUserId` integer, nullable: The user ID of the approver. Populated when approverType is SPECIFIC_PERSON; null otherwise.
  - `approvalCutoff` string: Time of day by which timesheets must be approved, in 24-hour HH:MM format.
  - `approvalCutoffDays` integer: Number of days before the pay date the cutoff applies.
  - `clockInSchedulePolicy` 'ANYTIME' | 'SHIFT_REQUIRED': When scheduled employees can clock in.
  - `restrictWebClockActions` boolean: When true, removes the time clock from bamboohr.com for employees in this configuration.
  - `mobileEnabled` boolean: When true, employees can log time using the BambooHR mobile app.
  - `geolocationEnabled` boolean: When true, employee location is required when clocking in/out via mobile. Only meaningful when mobileEnabled is true.
  - `customOvertimeEnabled` boolean: When false, standard U.S. and Canada overtime rules apply. When true, the daily/weekly overtime fields are honored.
  - `overtimeDailyHours` string, nullable: Daily overtime threshold in hours as a decimal string. Honored only when customOvertimeEnabled is true; null otherwise.
  - `overtimeDailyDoubleHours` string, nullable: Daily double-overtime threshold in hours as a decimal string. Honored only when customOvertimeEnabled is true; null otherwise.
  - `overtimeWeeklyHours` string, nullable: Weekly overtime threshold in hours as a decimal string. Honored only when customOvertimeEnabled is true; null otherwise.
  - `employeeIds` integer[]: Read-only array of employee IDs currently enrolled in this configuration.
  - `createdAt` string, date-time: ISO 8601 timestamp when the configuration was created.
  - `updatedAt` string, date-time, nullable: ISO 8601 timestamp when the configuration was last updated.
  - `deletedAt` string, date-time, nullable: ISO 8601 timestamp when the configuration was soft-deleted. Null for active configurations.

## Other responses

- `400`: Malformed request body.
- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `409`: Conflict. A configuration with this name already exists, or the Idempotency-Key was reused with a different body.
- `422`: Validation error (e.g., missing required field, missing approverUserId when required, overtime fields set while customOvertimeEnabled is false, an overtime threshold outside its allowed range, or attempting to create a GLOBAL configuration).

## Changes

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

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