---
title: "Approve an overtime entry"
method: POST
path: "/overtime-entries/{id}/approve"
tags: ["Overtime"]
---

# Approve an overtime entry

`POST /overtime-entries/{id}/approve`

## Request

- Base URL: `https://api.absentify.com/api/v1`
- URL: `https://api.absentify.com/api/v1/overtime-entries/{id}/approve`
- Auth: API key in header `X-API-KEY`

Approves one approval step of a pending entry on behalf of the API key's member: their own step first if they are an approver, otherwise the next pending one (an admin key can approve for any approver). In chains that need more than one approval the entry stays pending until the last step is approved and is credited then, so call it once per step and read the entry before retrying after a lost response. Send a lower `recognized_amount` to approve less than was logged; a `reason` is then required.

## Path parameters

- `id` integer, required: The id of the overtime entry.

## Request body

- object
  - `recognized_amount` number: Approve less than was logged. Never more than the current recognized amount. Days (0.5 or 1) when `allowance_unit` is `days`, whole MINUTES when it is `hours` (for example 90 = 1 hour 30 minutes).
  - `reason` string: Required when `recognized_amount` is lower.

## Response `200`

Successful response

- object
  - `id` integer, required
  - `member` object, required: The member the overtime was worked by.
    - `id` string, required
    - `custom_id` string, nullable, required
    - `name` string, nullable, required
    - `email` string, nullable, required
  - `allowance_type_id` string, required
  - `allowance_unit` 'days' | 'hours', required: The unit of the allowance type. Amounts are in days for `days` and in MINUTES for `hours`.
  - `date` string, required: The day the overtime was worked, `YYYY-MM-DD`.
  - `amount` number, required: The amount that was logged. Days (0.5 or 1) when `allowance_unit` is `days`, whole MINUTES when it is `hours` (for example 90 = 1 hour 30 minutes).
  - `recognized_amount` number, required: The amount an approver recognized, never more than `amount`. Equal to `amount` until someone lowers it. Days (0.5 or 1) when `allowance_unit` is `days`, whole MINUTES when it is `hours` (for example 90 = 1 hour 30 minutes).
  - `day_kind` 'WORKDAY' | 'DAY_OFF' | 'PUBLIC_HOLIDAY', required: What kind of day it was when the entry was logged.
  - `factor` number, required: The multiplier applied to the recognized amount, fixed when the entry was logged.
  - `credit_expiry_date` string, nullable, required: The LAST day (inclusive, `YYYY-MM-DD`) the credit can still be used, or null when the credit has no expiry of its own; it then follows the allowance's carry-over at the end of the year.
  - `comment` string, nullable, required
  - `status` 'PENDING' | 'APPROVED' | 'DECLINED' | 'CANCELED', required
  - `decided_by` object, nullable, required: Who made the final decision. Null while the entry is open.
    - `id` string, required
    - `custom_id` string, nullable, required
    - `name` string, nullable, required
    - `email` string, nullable, required
  - `decided_at` string, nullable, required
  - `created_by` object, nullable, required: Who logged the entry. It differs from `member` when an admin logged it for someone else. Null for entries from before this was recorded and once that member has been deleted.
    - `id` string, required
    - `custom_id` string, nullable, required
    - `name` string, nullable, required
    - `email` string, nullable, required
  - `created_at` string, required
  - `canceled_at` string, nullable, required
  - `canceled_by` object, nullable, required: Who withdrew the entry. It differs from `member` when the member who logged it for them withdrew it. Null unless the status is CANCELED.
    - `id` string, required
    - `custom_id` string, nullable, required
    - `name` string, nullable, required
    - `email` string, nullable, required
  - `decline_reason` string, nullable, required: The reason given when the entry was declined, also when an admin declined for the approver.
  - `credited_amount` number, nullable, required: What was credited to the allowance: the recognized amount times `factor`, as booked. Null while there is no credit. Days (rounded to two decimals, for example 0.75 or 1.5) when `allowance_unit` is `days`, whole MINUTES when it is `hours`.
  - `credit_removed` boolean, required: True when the entry is approved but its credit was deleted from the allowance afterwards.

## Other responses

- `400`: Invalid input data
- `401`: Authorization not provided
- `403`: Insufficient access
- `500`: Internal server error

## Changes

- **2026-10-15** `d32b5ab6fd15`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/absentify/apis/absentify-crud-api/changes/overtime-entries/:id/approve/post.md)

---

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