---
title: "Action a Holiday"
method: POST
path: "/api/holidays/{id}"
tags: ["Holidays"]
---

# Action a Holiday

`POST /api/holidays/{id}`

## Request

- Base URL: `https://app.timetastic.co.uk` (the document declares no server; this is the origin it was published from)
- URL: `https://app.timetastic.co.uk/api/holidays/{id}`
- Auth: none declared

Update a holiday. You can use this to :
1) Approve a pending holiday
2) Decline a pending holiday
3) Cancel a holiday

<strong>Note:</strong> This will raise a Webhook event if you have Webhooks configured.
            
<strong>Important:</strong> an action that is refused still returns <strong>200</strong>. Check
`approvalResult` in the response body rather than relying on the status code. Its values are:
            
- `Success` — the action was applied.
- `AlreadyActioned` — the holiday has already been approved, declined or cancelled.
- `DoesntExist` — the holiday could not be found when the action was applied.
- `NotAllowed` — you are not allowed to perform that action on this holiday.
- `UnknownError` — the action failed, or no recognised `holidayUpdateAction` was supplied.
            
`message` carries a human readable version of the same thing.

## Path parameters

- `id` string, required

## Query parameters

- `holidayUpdateAction` 'Approve' | 'Decline' | 'Delete' | 'DeleteGroup': - `Approve` - `Decline` - `Delete` - `DeleteGroup`

## Request body

- TimetasticCoreModelsApiModelsActionHolidayModel
  - `reason` string, nullable: An optional reason for rejecting a leave request.
  - `suppressEmails` boolean: Set to true to suppress notifications and emails to users when actioning holiday requests.

## Response `200`

The request was processed. Check `approvalResult` in the body — this is also returned when the action was refused.

- TimetasticWebApiResourceModelsHolidayActionResult: Contains the results of updating a holiday request
  - `approvalResult` 'Success' | 'AlreadyActioned' | 'DoesntExist' | 'UnknownError' | 'NotAllowed': - `Success` - `AlreadyActioned` - `DoesntExist` - `UnknownError` - `NotAllowed`
  - `message` string, nullable

## Other responses

- `400`: The body is a plain string. `"Holiday not found"` when no holiday matches the ID or token, and `"You don't have permission"` when you cannot manage that user. You may cancel your own holiday without managing rights, but only while it is still in the future.
- `401`: The request was not authenticated — the API token is missing or invalid.
- `429`: The overall API rate limit was exceeded.

---

[API](https://skmtc.dev/timetastic/apis/timetastic-api.md) · [All operations](https://skmtc.dev/timetastic/apis/timetastic-api/llms.txt) · [OpenAPI document](https://skmtc.dev/timetastic/apis/timetastic-api/revisions/709ccb0412c3?raw)
