Time Off / PTO Tools
See Time Off Requests workflow for the full step-by-step process.
setup_protected_projects
Create (or verify) the protected internal PTO, Sick, and Leave projects for the tenant. Owner only.
Console-only — not reachable from Slack; use the web console.
Writes to: 02. Projects (creates any of PTO, Sick, Leave that don't already exist)
Parameters: requesting_user_slack_id
Idempotent — safe to call again; existing protected projects are left untouched. Run once during tenant onboarding, before any time off tool is used — every time off tool errors if its project hasn't been created yet.
request_time_off
Submit a time off request. Creates a pending record and DMs all Managers and Owners. Time is not logged until approved.
Writes to: 10. Pending_PTO, 11. Unresolved_Items
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | Must be the user making the request — self only |
date | ✅ | YYYY-MM-DD |
time_off_type | ✅ | "PTO" | "Sick" | "Leave" |
hours | Defaults to tenant's hours-per-day (usually 8) | |
notes | Reason for the request |
Response: "Your PTO request for March 20 has been submitted. Your manager has been notified and will confirm."
Use
request_time_off— notrequest_pto— for all new time off requests.
request_pto
Submit a PTO request directly (used by the console self-service /console/my-time-off page). Creates a pending record and DMs all Managers and Owners. Time is not logged until approved.
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | Must be the user making the request — self only |
date | ✅ | YYYY-MM-DD |
hours | Hours to request. When omitted or blank, defaults to the tenant's standard working-day length (work_week.hours_per_day, default 8) | |
notes | Reason for the request |
Response: { success: true, request_id, date, hours, status: "pending" }
update_time_off_request
Edit a pending PTO request — the date, hours, or notes.
Console-only — not reachable from Slack; use the web console.
Updates: 10. Pending_PTO
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | Must be the person who made the request — self only |
pending_id | ✅ | |
date | YYYY-MM-DD | |
hours | Positive number | |
notes |
Only the requester can edit their own request, and only while it's still pending — an already-approved or rejected request can't be changed here. The same minimum-notice rule request_pto enforces applies to a date change too.
cancel_time_off_request
Withdraw a pending PTO request before it's been acted on.
Console-only — not reachable from Slack; use the web console.
Deletes from: 10. Pending_PTO
Parameters: requesting_user_slack_id, pending_id
Only the requester can cancel their own request, and only while it's still pending.
approve_time_off
Approve a pending time off request. Logs the time entry and notifies the user via DM. Manager/Owner only.
Updates: 10. Pending_PTO (status → "approved") Writes to: 01. Time Entries (logs hours to Out of Office project)
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
request_id | ✅ | The pending PTO record ID |
get_my_time_off
View own time off history (pending, approved, rejected).
Reads from: 10. Pending_PTO
Parameters:
| Param | Description |
|---|---|
requesting_user_slack_id | |
time_off_type | Optional filter: "PTO" | "Sick" | "Leave" |
start_date | Optional range filter |
end_date | Optional range filter |
get_team_time_off
View team-wide Out of Office history across all users. Owner only.
Reads from: 01. Time Entries, 02. Projects, 03. Users
Parameters:
| Param | Description |
|---|---|
requesting_user_slack_id | |
user_id | Optional — filter to one user by internal ID |
time_off_type | Optional filter: "PTO" | "Sick" | "Leave" |
start_date | Optional range filter |
end_date | Optional range filter |
Each entry includes user_name so the Owner can see who took what time off.
list_pending_pto
All unresolved time off requests. Manager/Owner only.
Reads from: 10. Pending_PTO, 03. Users
Managers see requests for users on their projects. Owners see all.
log_sick_day
Log a sick day directly for a user. Does not require the request/approval flow. Manager/Owner only (Managers cannot log for themselves — only Owners can).
Writes to: 01. Time Entries, 11. Unresolved_Items (flags conflict if user had active allocations that day)
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
user_name or slack_user_id | ✅ | |
date | Defaults to today | |
hours | Defaults to 8 |
Use case: When a team member is unexpectedly sick, a Manager can log it directly without a pending/approval cycle.
log_leave
Log leave (unpaid or extended) for a user over a date range. Automatically skips weekends and company holidays. Manager/Owner only.
Writes to: 01. Time Entries (one entry per working day), 11. Unresolved_Items
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
user_name or slack_user_id | ✅ | |
start_date | ✅ | YYYY-MM-DD |
end_date | ✅ | YYYY-MM-DD |
hours_per_day | Defaults to 8 | |
notes |
set_pto_notice
Set the tenant's minimum PTO notice period, in weeks. Owner only.
Console-only — not reachable from Slack; use the web console.
Updates: tenant config (minimum_pto_notice_weeks)
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
minimum_pto_notice_weeks | ✅ | Whole number, 0–52 |
Unresolved items from time off
When a sick day or leave is logged, VERA automatically checks if the user had active allocations on the affected dates. If so, it creates an Unresolved Item flagging the conflict:
sick_conflict— user is sick on a day with active allocationsleave_conflict— leave logged over dates with active allocationspto_conflict— PTO approved for a date with active allocations
Managers are shown these conflicts in morning summaries as 🔴 blocks and can resolve or dismiss them via resolve_item / dismiss_item.