approve_absence
ChatGPTApprove a pending absence request by id. Admin/HR/supervisor only. Requires OAuth scope absences:approve.
approve_modification
ChatGPTApprove a pending employee time-entry correction by id, as the company/HR reviewer. Admin/HR only. Requires OAuth scope modifications:write.
approve_retrospective_entry
ChatGPTApprove a pending retrospective (forgotten-day) time-entry creation request by id. This is the company/approver decision on a worker-initiated request; on approval the time entry is created. Admin/HR only. Requires OAuth scope modifications:write.
assign_kiosk_pins
ChatGPTADMIN ONLY. Generate a 6-digit kiosk PIN for each of up to 200 existing, active employees and return each PIN in clear ONCE (only a hash is stored: it can never be shown again). Employees that already have a PIN are skipped unless replaceExisting=true, which INVALIDATES their current PIN immediately — confirm with the user first. Use it for employees created before an import, or for import_employees rows that came back with pinError. Write the PINs where the user keeps them (e.g. their spreadsheet) and do not repeat them in the chat. Requires OAuth scope setup:write.
cancel_absence
ChatGPTCancel one of the authenticated employee's own absence requests. requestId comes from my_absences. Only the owner can cancel, and not after it has started. Requires OAuth scope absences:write.
clock_in
ChatGPTClock in the authenticated employee (start a work period). Requires OAuth scope clock:write.
clock_out
ChatGPTClock out the authenticated employee (end the active work period). Requires OAuth scope clock:write.
compensate_overtime
ChatGPTCompensates an employee's pending overtime with days of rest: days = hours × company ratio ÷ hoursPerDay, added to the balance of an absence policy. Call get_overtime_compensation first for the pending hours and the policies that can receive the days. Confirm with the user before calling. HR/admins only. Requires OAuth scope absences:approve.
create_work_centers
ChatGPTADMIN ONLY. Create up to 50 work centers at once, e.g. the centers a customer's employee spreadsheet refers to that list_work_centers does not show yet. ALWAYS call first with dryRun=true (default), show the user the result and only then call again with dryRun=false. A center whose name (ignoring case/accents/spacing) or street + postal code matches an existing one — active or not — or another row is skipped and the existing id is returned: never duplicated; an inactive match must be reactivated in the app. Geolocation is not set here (configure it later in the app); national holiday calendars are assigned automatically. Requires OAuth scope setup:write.
end_break
ChatGPTEnds the open break (pausa) on the authenticated employee active time entry — automatically finds the break in progress. Requires OAuth scope clock:write.
find_employee
ChatGPTResolves a name or email to an employee, returning id, name, email, role, status and department so other admin tools can use the employeeId. Searches the whole organisation roster; HR/admin only (cannot be scoped to a single team). Read-only. Requires OAuth scope presence:read.
get_active_entry
ChatGPTTHE tool for the caller's OWN current clock status. Answers first-person questions like "¿estoy fichado?", "¿cuál es mi estado de fichaje?", "¿he fichado (hoy)?", "mi entrada/fichaje activo", "¿estoy en pausa?", "¿a qué hora entré/empecé?". Returns the caller's CURRENT open (uncompleted) time entry — which may have started on a PREVIOUS day and still be running — including status (working / on break / clocked out), clock-in time, minutes worked and whether they can start a break or clock out; returns clocked_out only when there is genuinely no open entry. Do NOT use whos_in for the caller's own status. Read-only. Requires OAuth scope clock:read.
get_employee_balance
ChatGPTAbsence/vacation balance for a target employee (entitled, available, used, reserved, plus a per-policy breakdown), to check entitlement before approving leave. HR/admins only. Read-only. Requires OAuth scope absences:read.
get_import_batch
ChatGPTADMIN ONLY. Read the audit record of a historical-data import batch: source system, who imported it and when, how many time entries and absences it brought in and how many are still active (not reverted). Omit batchId to list the latest batches. Requires OAuth scope import:write.
get_migration_guide
ChatGPTADMIN ONLY. Returns the mandatory step-by-step protocol for migrating historical clock records and absences from another time-tracking system into Cleverfy. CALL THIS FIRST, before import_time_entries or import_absences, whenever the user wants to migrate or import history from another vendor, and follow it to the letter: it starts by finding out which system and what the export files look like (ask for a sample), then how to match people safely, the row format, dry-run and reconciliation, confirmation, batching and undo. Call it again with source set once you know the system (e.g. "factorial", "sesame"): known systems come with their file quirks. Read-only. Requires OAuth scope import:write.
get_overtime_compensation
ChatGPTAn employee's legal overtime (netted per month or flexible-bucket period, as in the hours report: a long day alone is not overtime) over all recorded dates (not only this year; compensations take the oldest pending hours first): worked, compensated with rest and pending hours, whether the company allows compensating with rest, the rest ratio, the default hours per day, the absence policies that can receive the days (use their id in compensate_overtime) and the latest compensations (id, can_revert). HR/admins only. Read-only. Requires OAuth scope absences:read.
invite_employees
ChatGPTADMIN ONLY. SENDS EMAILS. Invite up to 200 existing employees (e.g. the kiosk employees just created with import_employees) to create their account in the Cleverfy app: each one receives an invitation email linked to their employee record, so accepting it takes no new seat and keeps their kiosk PIN. Uses the email on the employee record unless the row gives another, and keeps the role the employee already has unless the row gives one. ALWAYS call first with dryRun=true (default) and show the user who would get an email and who is skipped and why (no email, already has an account, email of another person, invitation already pending); only after the user explicitly approves sending emails call again with dryRun=false. A pending or expired invitation is only re-sent with resendPending=true, and only exactly as it was created: a row asking for another email or role is refused. Requires OAuth scope setup:write.
list_absence_types
ChatGPTReturns the available absence types and their policies (each policy carries its absence_type_id). Use this to obtain the absence_type_id and policy_id needed by request_absence. Read-only. Requires OAuth scope absences:read.
list_break_types
ChatGPTReturns this tenant's available break types (pausas) — each with its code, name, and whether it requires a comment. Call this BEFORE start_break so the user can choose a type (never assume one): use the returned code as the breakType for start_break, or as the policyCode in request_time_correction. Read-only. Requires OAuth scope clock:read.
list_pending_absence_approvals
ChatGPTReturns pending absence requests to review: the whole organisation for HR/admins, or only the caller own team for a supervisor. Admin/HR/supervisor only. Read-only. Requires OAuth scope absences:approve.
list_pending_modifications
ChatGPTReturns employee-initiated time-entry correction requests pending company approval, each with its modificationRequestId for approve/reject. Org-wide for HR/admins; a plain supervisor is refused (the backing query cannot be safely scoped to a single team). Admin/HR only. Read-only. Requires OAuth scope modifications:write.
list_work_centers
ChatGPTADMIN ONLY. List the organization's work centers with their id, name, code, city, type and whether they are active, plus how many active employees each has. Use it to map the work center codes or names of a spreadsheet to ids BEFORE calling import_employees — match by code or name and ask the user when a match is ambiguous or missing; never invent ids. Centers that do not exist yet can be created with create_work_centers. Active centers only unless includeInactive=true. Read-only. Requires OAuth scope setup:write.
my_absences
ChatGPTReturns the authenticated employee own absence requests and their vacation/absence balance for a year. Read-only. Requires OAuth scope absences:read.
my_hours_summary
ChatGPTReturns the authenticated employee's own monthly worked-hours TOTALS (total hours, number of entries, on-site vs remote split, daily totals) for a given year/month (defaults to the current month). Use for aggregate "¿cuántas horas llevo este mes?" reporting. NOT for the caller's current/live clock status — for "¿estoy fichado?" or the active entry use get_active_entry. Self-service and read-only — always scoped to the caller. Requires OAuth scope reports:read.
my_time_entries
ChatGPTReturns the authenticated employee's own PAST time entries (a historical list/log), optionally filtered by a date range. Use it to review previous shifts or to find the timeEntryId and current times to pass to request_time_correction. NOT for the caller's current/live clock status — for "¿estoy fichado?" or the active entry use get_active_entry. Read-only. Requires OAuth scope clock:read.
reject_absence
ChatGPTReject a pending absence request by id, with a mandatory reason. The rejection reason must come from the user — ask for it, do not fabricate. Admin/HR/supervisor only. Requires OAuth scope absences:approve.
reject_modification
ChatGPTReject an employee time-entry correction request by id, with a mandatory reason. The rejection reason must come from the user — ask for it, do not fabricate. Admin/HR only. Requires OAuth scope modifications:write.
reject_retrospective_entry
ChatGPTReject a pending retrospective time-entry request by id, with a mandatory reason. The rejection reason must come from the user — ask for it, do not fabricate. Admin/HR only. Requires OAuth scope modifications:write.
request_absence
ChatGPTRequest an absence/vacation for the authenticated employee (kicks off approval). absenceTypeId and policyId come from list_absence_types; dates are YYYY-MM-DD. Requires OAuth scope absences:write.
request_retrospective_entry
ChatGPTRequest creation of a time entry for a PAST day that has no record yet (e.g. "I worked last Tuesday 09:00-17:00 but forgot to clock in"). Queues for company approval. Provide date (YYYY-MM-DD), clockInTime and clockOutTime (ISO 8601 with a timezone offset), workMode ("on_site" or "remote") and a reason. The reason must come from the user — ask for it, do not fabricate. Optionally pass breaks (each NEW: startTime, endTime, policyCode from list_break_types; no breakId). For TODAY use clock_in; to fix an EXISTING entry use request_time_correction. Requires OAuth scope modifications:write.
request_time_correction
ChatGPTRequest a correction to one of the authenticated employee time entries (queues for company approval) — works for past/completed entries AND for the still-open ACTIVE entry. Provide the timeEntryId (from my_time_entries, or get_active_entry for the active one) and the corrected clock-in as ISO 8601 with a timezone offset, plus a reason. The corrected clock-out is OPTIONAL: omit it to correct ONLY the clock-in of an ACTIVE entry that has not been clocked out yet — never fabricate a clock-out for an open entry. The reason must come from the user — ask for it, do not fabricate. Optionally pass breaks to also set the day's breaks (e.g. a lunch break): this REPLACES the entry's current breaks, so send the FULL desired set — if the day already has breaks, FIRST read them with my_time_entries and re-include each one (with its breakId) or it will be removed. Each break needs startTime, endTime and a policyCode from list_break_types; include a breakId (from my_time_entries) to keep an existing break, omit it for a new one. Requires OAuth scope modifications:write.
revert_import
ChatGPTADMIN ONLY, DESTRUCTIVE. Undo a historical-data import batch: removes the time entries and cancels the absences that batch brought in, and nothing else. Confirm with the user before calling. Works in chunks: if the result has remaining > blocked, call again with the same batchId; stop when remaining equals blocked — the blocked count is imported entries with a correction pending, left untouched until a person resolves it. A reverted batch cannot be reused; import again to get a new one. Requires OAuth scope import:write.
revert_overtime_compensation
ChatGPTReverts an overtime compensation: its days leave the balance and the hours become pending again. Only while none of its days is requested or taken (can_revert in get_overtime_compensation). Confirm with the user before calling. HR/admins only. Requires OAuth scope absences:approve.
start_break
ChatGPTStarts a break (pausa) on the authenticated employee active time entry. The break type is the USER's choice and is legally meaningful — do NOT guess or default it. If the user has not explicitly stated which type of break, FIRST call list_break_types to fetch this tenant's available break types, present them to the user, and ask which one; then pass the chosen code as breakType. Requires an active clock-in. Requires OAuth scope clock:write.
team_dashboard
ChatGPTReal-time dashboard for a team today: per-employee status (working, on break, completed, not started), anomaly flags, aggregate counts and overtime. Admins/HR target any team (teamId required); a supervisor always sees only their own team. Read-only. Requires OAuth scope presence:read.
team_hours_summary
ChatGPTSummary of worked hours by employee and by department over a date range (defaults to the current month). Admins/HR see the whole organisation; a supervisor sees only their own team. Read-only. Requires OAuth scope reports:read.
team_records
ChatGPTRaw clock-records grid for a team over a date range: clock in/out, breaks, worked hours, modification count and verification metadata. A supervisor sees only their own team; HR/admin must target an explicit teamId. Read-only. Requires OAuth scope reports:read.
whos_in
ChatGPTTeam/presence overview: who ELSE is currently clocked in right now (working on-site/remote, on break, on leave), scoped to the caller's visibility (admins see the whole organization). Use for questions about OTHERS or the team like "¿quién está fichado?", "¿quién hay en la oficina?", "¿quién está trabajando ahora?". NOT for the caller's own clock status ("¿estoy fichado?", "mi fichaje activo") — use get_active_entry for that. Read-only. Requires OAuth scope presence:read.