---
title: "Create overtime policy"
method: POST
path: "/v2/organizations/{organization_id}/overtime_policies"
tags: ["overtime_policies"]
---

# Create overtime policy

`POST /v2/organizations/{organization_id}/overtime_policies`

## Request

- Base URL: `https://api.hubstaff.com`
- URL: `https://api.hubstaff.com/v2/organizations/{organization_id}/overtime_policies`
- Auth: OAuth 2
  - Authorization code: `https://account.hubstaff.com/authorizations/new`
  - Token URL: `https://account.hubstaff.com/access_tokens` scopes: `hubstaff:read`, `hubstaff:write`
- TypeScript: <https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/docs/v2/organizations/:organization_id/overtime_policies/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new overtime policy for the given organization and assigns the given members.

`threshold` is the number of hours worked per period (week for `weekly`, day for `daily`)
before tracked time is considered overtime. `pay_rate_multiplier` is applied to the
member's pay rate after the threshold is reached.

At least one member (`user_ids`) is required, and every assigned member must have a pay
rate set. `daily` policies require the flexible overtime feature.

A member can only belong to one policy of a given type at a time. If any member in
`user_ids` is already assigned to another active policy of the same type, the request
fails unless `override` is `true`, in which case those members are moved into this policy.

Notifications are enabled by default but go to no one unless `notification_role_ids`
is provided.

The policy becomes effective at the start of the organization's next week (for `weekly`
policies) or the next day (for `daily` policies). Pass `starts_on` to schedule a later
start aligned to that boundary.

Only organization Owners and Managers may use this endpoint.

## Path parameters

- `organization_id` integer, required

## Request body

- PostV2OrganizationsOrganizationIdOvertimePolicies: Create overtime policy
  - `name` string, required: Policy name (2-50 characters)
  - `policy_type` 'daily' | 'weekly': How the threshold is evaluated
  - `threshold` number, float, required: Hours worked per period before overtime applies
  - `pay_rate_multiplier` number, float, required: Pay rate multiplier after the threshold
  - `user_ids` integer[], required: User IDs to assign to the policy
  - `auto_add_new_users` boolean: Automatically add new members to this policy
  - `notification_enabled` boolean: Whether overtime notifications are sent
  - `notification_role_ids` string[]: Roles notified about overtime
  - `starts_on` string, date: Scheduled start date (period-aligned)
  - `override` boolean: Move members already on another active policy of the same type into this one. Without it, the request fails if any assigned member is already on such a policy.

## Response `201`

An overtime policy

- object
  - `overtime_policy` OvertimePolicy: OvertimePolicy model
    - `id` integer, required: Overtime policy ID
    - `organization_id` integer, required: Organization ID
    - `created_at` string, date-time, required: When the record was created
    - `updated_at` string, date-time, required: When the record was last updated
    - `name` string, required: Policy name
    - `policy_type` string, required: How the threshold is evaluated: weekly or daily
    - `status` string, required: Policy status: active, pending, expiring or archived
    - `threshold` number, float, required: Hours per period before time counts as overtime
    - `pay_rate_multiplier` string, required: Pay rate multiplier after the threshold
    - `bill_rate_multiplier` string, required: Bill rate multiplier after the threshold
    - `since` string, date-time, required: When the policy becomes effective
    - `until` string, date-time, required: When the policy expires (null while open)
    - `auto_add_new_users` boolean, required: Automatically add new members to this policy
    - `notification_enabled` boolean, required: Whether overtime notifications are sent
    - `notification_role_ids` unknown, required
    - `superseded_by_id` integer: ID of the policy that replaced this one
    - `editable` boolean, required: Whether the policy can still be edited
    - `locked` boolean, required: Whether the policy is in use and read-only
    - `user_ids` unknown, required

## Other responses

- `400`: Invalid parameters
- `401`: Unauthorized
- `403`: API access is only for organizations on an active plan
- `404`: Could not find record
- `429`: Rate limit exceeded

## Changes

- **2026-11-06** `c6b90e4e4bdc`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/changes/v2/organizations/:organization_id/overtime_policies/post.md)

---

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