---
title: "Request time off"
method: POST
path: "/v1/org/{orgId}/timeoff/request"
tags: ["timeoff"]
---

# Request time off

`POST /v1/org/{orgId}/timeoff/request`

## Path parameters

- `orgId` string, required

## Request body

- TimeOffRequest
  - `startDate` string, date, required
  - `startDatePartialDay` number
  - `startDatePartialDayPeriod` 'AM' | 'PM'
  - `endDate` string, date, required
  - `endDatePartialDay` number
  - `endDatePartialDayPeriod` 'AM' | 'PM'
  - `personId` string
  - `typeDescription` string
  - `timeOffPolicyId` string
  - `note` string

## Response `201`

time off created

- TimeOffEntity
  - `id` string, required — globally unique id of time off
  - `orgId` string, required — org that the time off belongs to
  - `personId` string, required — person taking the time off
  - `externalId` string — external identifier, if time off synced from external system
  - `startDate` string, date, required — start date of time off, inclusive
  - `startDatePartialDay` number — portion of the start date to take
  - `startDatePartialDayPeriod` 'AM' | 'PM' — Portion of the start day requested (e.g. AM or PM)
  - `endDate` string, date, required — end date of time off, inclusive
  - `endDatePartialDay` number — portion of the end date to take
  - `endDatePartialDayPeriod` 'AM' | 'PM' — Portion of the end day requested (e.g. AM or PM)
  - `days` number — number of days used
  - `hours` number — number of hours used
  - `typeDescription` string — type of time off
  - `timeOffPolicyId` string — policy id to pull the balance from
  - `note` string — notes on the time off
  - `approval` 'APPROVED' | 'PENDING' | 'CANCELLED' | 'REJECTED' | 'SUPERSEDED' — approval status of the time off
  - `approvalAt` string — timestamp of approval
  - `approvalUserId` string — user who either is the next one requesting approval, or the user who did the final approval or rejection
  - `createId` string — created by user id
  - `createBehalfId` string — created on behalf of user id
  - `createAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `createAt` string — created timestamp
  - `updateAt` string — updated timestamp
  - `updateId` string — updated by user id
  - `updateBehalfId` string — last updated on behalf of user id
  - `updateAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `deleteId` string — deleted by user id
  - `deleteBehalfId` string — deleted on behalf of user id
  - `deleteAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `deleteAt` string — deleted timestamp
  - `requestAt` string — requested at timestamp -- often the same as createAt

## Other responses

- `400` — bad request
- `401` — not authorized
- `404` — not found
- `500` — Not Implemented

---

[API](https://skmtc.net/charthop/apis/charthop-api.md) · [All operations](https://skmtc.net/charthop/apis/charthop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/charthop/charthop-api/revisions/2de21f45f447/schema)
