Gokaizen Suite AI actions 0.1.0 · 37 actions

What an AI assistant can do in the Gokaizen Suite

Every action this server offers, with what it takes and a worked example. Generated from the server itself, so it is always what is actually running.

Connect to
https://mcp.suite.internal.gokaizen.cloud/mcp
Sign-in
your Gokaizen account, on the suite's own sign-in page
Version
0.1.0, 37 actions
For people
How to connect, and what it means for privacy

An assistant acts as you: it signs in as you, can do only what your role allows, and everything it does is recorded under your name. A refusal from the suite is final. Actions marked changes data write something; your assistant asks you before running one, and anything that would write many rows shows you a plan first.

Who you are

What the suite knows about the person asking.

whoamireads only

Who am I

The signed-in person: name, employee record and what their role lets them do here. Call this first, and whenever a request is refused, to say what is and is not possible.

Takes no input.

Someone asks: “Who am I in the suite?”

Input

{}

What comes back

Ana Reyes <ana.reyes@gokaizen.online>
Employee record: Reyes, Ana (EMP-014)
Roles: timekeeping-clerk, time-leave-approver
May: read timesheets; log time for people; approve overtime; approve leave; look people up; look projects and cost centers up.

Structured content

Show the structured answer
{
  "name": "Ana Reyes",
  "email": "ana.reyes@gokaizen.online",
  "employeePublicId": "9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b",
  "employee": {
    "displayName": "Reyes, Ana",
    "employeeNumber": "EMP-014"
  },
  "roles": [
    "timekeeping-clerk",
    "time-leave-approver"
  ],
  "can": [
    "read timesheets",
    "log time for people",
    "approve overtime",
    "approve leave",
    "look people up",
    "look projects and cost centers up"
  ]
}

People and the directory

The roster, the jobs people hold, and who the company works with.

find_peoplereads only

Find people

Employees matching a name or employee number. Returns ids for the other tools — never guess an employee id. An empty search lists the first page of everybody.

InputTypeMeaning
searchstringoptionalPart of a name or an employee number.
limitintegeroptional, default 30

Someone asks: “Find Juan dela Cruz and Maria Santos.”

Input

{
  "search": "dela cruz"
}

What comes back

1 person:
Dela Cruz, Juan (EMP-001) · id 5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60

Structured content

Show the structured answer
{
  "people": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "name": "Dela Cruz, Juan",
      "employeeNumber": "EMP-001"
    }
  ]
}

employeereads only

An employee's record

One person's record: names, contact details, their current position and employment, and their salary rates where the caller may see them. Government identifiers and bank details come back only to a caller allowed to see them — do not repeat them unless asked for that field.

InputTypeMeaning
employeePublicIdstringoptionalLeave out for the signed-in person's own record.
includeRatesbooleanoptional, default falseAlso the salary rates in force today.

Someone asks: “What is Juan's position and when did he start?”

Input

{
  "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60"
}

What comes back

Dela Cruz, Juan (EMP-001)
Position: Steel Fitter · Project-based · since 2024-03-04
Contact: juan.delacruz@example.com · +63 917 000 0001

Structured content

Show the structured answer
{
  "employee": {
    "publicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
    "name": "Dela Cruz, Juan",
    "employeeNumber": "EMP-001",
    "…": "…"
  },
  "employment": {
    "position": "Steel Fitter",
    "employmentType": "Project-based",
    "startDate": "2024-03-04"
  },
  "rates": null
}

headcountreads only

Headcount

How many employees there are, how many are currently employed, and how many are on payroll.

Takes no input.

Someone asks: “How many people do we have?”

Input

{}

What comes back

214 employee record(s): 198 currently employed, 191 on payroll.

Structured content

Show the structured answer
{
  "headcount": {
    "total": 214,
    "active": 198,
    "onPayroll": 191
  }
}

find_jobsreads only

Find projects and cost centers

Projects (read as "Customer - Project") and cost centers (by name) that hours may be charged to now. Matches the customer, the project or cost center name, or its code. Returns the ids plan_time_entries takes.

InputTypeMeaning
searchstringoptional
kindproject | cost_center | anyoptional, default "any"
limitintegeroptional, default 50

Someone asks: “Which Acme projects can I charge to?”

Input

{
  "search": "acme",
  "kind": "project"
}

What comes back

2 matches:
project · Acme Steel - Bridge retrofit (ALPHA) · id 0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f
project · Acme Steel - Warehouse fit-out (BRAVO) · id 1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e

Structured content

Show the structured answer
{
  "jobs": [
    {
      "kind": "project",
      "publicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "label": "Acme Steel - Bridge retrofit",
      "code": "ALPHA"
    },
    {
      "kind": "project",
      "publicId": "1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
      "label": "Acme Steel - Warehouse fit-out",
      "code": "BRAVO"
    }
  ]
}

customersreads only

Customers

Customers with their code, contact person and whether they are active or archived.

InputTypeMeaning
searchstringoptional
includeArchivedbooleanoptional, default false
limitintegeroptional, default 50

Someone asks: “Who are our customers?”

Input

{
  "search": "acme"
}

What comes back

1 customer:
Acme Steel Corporation (ACME) · Ana Reyes · ana@acme.test · +63 2 8555 0101 · id 2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e

Structured content

Show the structured answer
{
  "customers": [
    {
      "publicId": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
      "name": "Acme Steel Corporation",
      "code": "ACME",
      "contactName": "Ana Reyes",
      "…": "…"
    }
  ]
}

suppliersreads only

Suppliers

Suppliers with what they supply, their contact person and payment terms. The catalogue of items and prices is in the suite itself.

InputTypeMeaning
searchstringoptional
includeArchivedbooleanoptional, default false
limitintegeroptional, default 50

Someone asks: “Which suppliers do we buy steel from?”

Input

{
  "search": "steel"
}

What comes back

1 supplier:
Northgate Steel Supply (NGS) · Structural steel and fabrication · Ben Cruz · terms 30 days net · id 3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f

Structured content

Show the structured answer
{
  "suppliers": [
    {
      "publicId": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
      "name": "Northgate Steel Supply",
      "code": "NGS",
      "description": "Structural steel and fabrication",
      "…": "…"
    }
  ]
}

Time and attendance

Timesheets, the time clock, and what has not been encoded yet.

timesheetreads only

Read a timesheet

One person's timesheet days over a date range: status, hours per project or cost center, overtime claimed, remarks, and whether the day is draft, submitted, approved or locked for payroll. Leave employeePublicId out for the signed-in person's own.

InputTypeMeaning
employeePublicIdstringoptional
fromstringrequired
tostringrequired

Someone asks: “Show me Juan's timesheet for the first cutoff of October.”

Input

{
  "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
  "from": "2026-10-01",
  "to": "2026-10-15"
}

What comes back

Dela Cruz, Juan (EMP-001), 2026-10-01 to 2026-10-15: 3 days, 24.00h
2026-10-13 · Present · Acme Steel - Bridge retrofit 8.00h · approved
2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+2.00 OT) · submitted · from the time clock
2026-10-15 · Present · Administration 8.00h · yard day · draft

Structured content

Show the structured answer
{
  "employee": {
    "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
    "name": "Dela Cruz, Juan",
    "employeeNumber": "EMP-001"
  },
  "days": [
    {
      "publicId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
      "date": "2026-10-14",
      "dayStatus": "present",
      "dayStatusLabel": "Present",
      "status": "submitted",
      "source": "punches",
      "totalHours": "8.00",
      "totalOvertimeHours": "2.00",
      "remarks": null,
      "allocations": [
        {
          "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
          "costCenterPublicId": null,
          "label": "Acme Steel - Bridge retrofit",
          "hours": "8.00",
          "overtimeHours": "2.00"
        }
      ]
    },
    "…"
  ]
}

plan_time_entriesreads only

Plan time entries

Step one of logging time for people. Resolves every employee, date and project or cost center, says which days already exist and would be replaced, and returns a planId. Show the plan to the person; call commit_time_entries with the planId only after they agree. One entry is one line of a day; several entries on the same employee and date become one day with several lines. A day that already exists is replaced whole by the lines given here.

InputTypeMeaning
entriesarray of objectrequired
entries[].employeePublicIdstringrequired
entries[].datestringrequired
entries[].projectPublicIdstringoptional
entries[].costCenterPublicIdstringoptional
entries[].hoursnumberoptional, default 0Decimal hours, e.g. 7.5
entries[].overtimeHoursnumberoptional, default 0Claimed overtime. Approval is a separate request.
entries[].statuspresent | absent | rest_day | holiday | on_leave | suspendedoptional, default "present"
entries[].remarksstringoptional

Someone asks: “Log 8 hours on the bridge for Juan and Maria yesterday, Juan did 1 hour overtime.”

Input

{
  "entries": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "date": "2026-10-14",
      "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "hours": 8,
      "overtimeHours": 1
    },
    {
      "employeePublicId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
      "date": "2026-10-14",
      "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "hours": 8
    }
  ]
}

What comes back

Plan kQ3x9Lm2pA: 2 days for 2 people, 1 replacing a day already encoded.
Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there (8.00h, from the time clock)
Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h
Show this to the person. If they agree, call commit_time_entries with planId "kQ3x9Lm2pA".

Structured content

Show the structured answer
{
  "planId": "kQ3x9Lm2pA",
  "days": [
    "Dela Cruz, Juan (EMP-001) · 2026-10-14 · …",
    "Santos, Maria (EMP-007) · 2026-10-14 · …"
  ],
  "replacing": 1
}

commit_time_entrieschanges data

Commit time entries

Step two: writes the days exactly as plan_time_entries showed them. Takes the planId from that plan. A plan can be committed once and expires after fifteen minutes.

InputTypeMeaning
planIdstringrequired

Someone asks: “Yes, go ahead.”

Input

{
  "planId": "kQ3x9Lm2pA"
}

What comes back

2 days saved.
saved · Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there (8.00h, from the time clock)
saved · Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h

Structured content

Show the structured answer
{
  "saved": 2,
  "refused": []
}

attendancereads only

Attendance

Who worked which day over a range, with hours, overtime claimed and approved, the day's status and any leave on it. Narrow by people, project or cost center. Totals come back with the rows.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdsarray of stringoptional
projectPublicIdstringoptional
costCenterPublicIdstringoptional
limitintegeroptional, default 20How many rows to show, at most 50; the totals cover everything matched.

Someone asks: “Who worked on the bridge last week?”

Input

{
  "from": "2026-10-06",
  "to": "2026-10-10",
  "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
  "limit": 3
}

What comes back

Attendance 2026-10-06 to 2026-10-10: 3 days.
2026-10-06 · Dela Cruz, Juan (EMP-001) · Present · 8.00h · ALPHA
2026-10-07 · Dela Cruz, Juan (EMP-001) · Present · 8.00h (+2.00 OT, 2.00 approved) · ALPHA
2026-10-07 · Santos, Maria (EMP-007) · Present · 4.00h · ALPHA · on leave: Vacation leave

Structured content

Show the structured answer
{
  "rows": [
    "…three AttendanceRow rows…"
  ],
  "summary": {
    "…": "hours, overtime and head counts for everything matched"
  },
  "totalRows": 3
}

unfiled_overtimereads only

Overtime claimed but not filed

Overtime hours sitting on timesheets with no overtime request covering them, so nobody has approved them and payroll will not pay them. One row per person, day and job.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdstringoptional

Someone asks: “Is there overtime nobody has filed a request for?”

Input

{
  "from": "2026-10-01",
  "to": "2026-10-15"
}

What comes back

1 row of overtime with no request:
2026-10-14 · Dela Cruz, Juan (EMP-001) · Acme Steel - Bridge retrofit · claimed 2.00h, filed 0.00h, unfiled 2.00h

Structured content

Show the structured answer
{
  "rows": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "employeeName": "Dela Cruz, Juan",
      "employeeNumber": "EMP-001",
      "recordDate": "2026-10-14",
      "targetLabel": "Acme Steel - Bridge retrofit",
      "claimedHours": "2.00",
      "requestedHours": "0.00",
      "unfiledHours": "2.00",
      "isLocked": false
    }
  ]
}

timesheet_gapsreads only

Timesheet completeness

How much of a pay period is encoded: who has days missing, so the period can be closed. Name the period, or any date inside it.

InputTypeMeaning
payPeriodPublicIdsarray of stringrequired
asOfstringoptionalJudge completeness up to this date rather than the period's end.

Someone asks: “Is the current cutoff fully encoded?”

Input

{
  "payPeriodPublicIds": [
    "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c"
  ]
}

What comes back

2026-10-01 → 2026-10-15 (Semi-monthly) · encoded up to 2026-10-13 · 198 person(s) on the roster

Structured content

Show the structured answer
{
  "periods": [
    {
      "payPeriodPublicId": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
      "scheduleName": "Semi-monthly",
      "startDate": "2026-10-01",
      "endDate": "2026-10-15",
      "throughDate": "2026-10-13",
      "hasStarted": true,
      "people": 198
    }
  ]
}

clock_daysreads only

Time clock days

Days built from people's own clock-in and clock-out punches: first in, last out, hours worked and on break, whether the day is still open, how it was verified, and whether a timekeeper has approved it. `flaggedOnly` narrows to days the suite has flagged for review.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdstringoptional
statuspending | approved | rejectedoptional
flaggedOnlybooleanoptional, default false
limitintegeroptional, default 30

Someone asks: “Show me the clock days waiting for approval.”

Input

{
  "from": "2026-10-13",
  "to": "2026-10-15",
  "status": "pending"
}

What comes back

1 of 1 clock day:
2026-10-14 · Dela Cruz, Juan (EMP-001) · 07:58 to 17:04 · worked 8.10h, break 1.00h · pending · passkey, selfie

Structured content

Show the structured answer
{
  "days": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "employeeName": "Dela Cruz, Juan",
      "recordDate": "2026-10-14",
      "firstIn": "07:58",
      "lastOut": "17:04",
      "workedHours": 8.1,
      "breakHours": 1,
      "approval": {
        "status": "pending"
      },
      "verifications": [
        "passkey",
        "selfie"
      ],
      "flags": []
    }
  ],
  "total": 1
}

my_clockreads only

My clock

Whether the signed-in person may clock in or out right now, which it would be, and the company's current time and date. Clocking itself is done in the app, which can read the device's location.

Takes no input.

Someone asks: “Can I clock out yet?”

Input

{}

What comes back

2026-10-15 17:12 (Asia/Manila).
You may clock: the next punch would be out.
Clocking in or out is done in the suite itself, which checks where you are.

Structured content

Show the structured answer
{
  "clock": {
    "canClock": true,
    "unavailableReason": null,
    "today": "2026-10-15",
    "localTime": "17:12",
    "timeZone": "Asia/Manila",
    "nextKind": "out",
    "anyLocation": false,
    "…": "…"
  }
}

The calendar

Holidays, cutoffs, and who is away.

holidaysreads only

Holidays

The holiday calendar: the date, the name, which kind of holiday it is and the pay multipliers that apply when it is worked and when it is not.

InputTypeMeaning
yearintegeroptional
fromstringoptional
tostringoptional
searchstringoptional

Someone asks: “What holidays are left this year?”

Input

{
  "from": "2026-11-01",
  "to": "2026-12-31"
}

What comes back

2 holidays:
2026-11-01 · All Saints' Day · Special Non-Working Day · worked ×1.3000, not worked ×0.0000
2026-12-25 · Christmas Day · Regular Holiday · worked ×2.0000, not worked ×1.0000

Structured content

Show the structured answer
{
  "holidays": [
    "…two HolidayDto rows…"
  ]
}

pay_periodsreads only

Pay periods

Pay periods with their dates, pay date and status, so a period can be named by id elsewhere. Use `onDate` to find the period that covers a day.

InputTypeMeaning
yearintegeroptional
onDatestringoptionalOnly periods covering this date.
statusstringoptionalopen, closed, or whatever the suite uses
limitintegeroptional, default 30

Someone asks: “Which cutoff covers the 10th?”

Input

{
  "onDate": "2026-10-10"
}

What comes back

1 pay period:
2026-10-01 → 2026-10-15 · Semi-monthly (semi_monthly) · pays 2026-10-20 · open · id 6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c

Structured content

Show the structured answer
{
  "periods": [
    {
      "publicId": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
      "scheduleName": "Semi-monthly",
      "startDate": "2026-10-01",
      "endDate": "2026-10-15",
      "payDate": "2026-10-20",
      "status": "open",
      "…": "…"
    }
  ]
}

who_is_outreads only

Who is on leave

Approved and pending leave over a range, day by day, with a summary of how many people are out and how many days are approved or waiting. The planning question before assigning work.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdstringoptional

Someone asks: “Who is on leave next week?”

Input

{
  "from": "2026-10-19",
  "to": "2026-10-23"
}

What comes back

2026-10-19 to 2026-10-23: 2 person(s) out, 3.00 day(s) approved, 2 waiting on 1 request.
By type: Vacation leave 1.00, Sick leave 2.00.
2026-10-20 · Santos, Maria (EMP-007) · Sick leave · Whole day · pending
2026-10-21 · Santos, Maria (EMP-007) · Sick leave · Whole day · pending
2026-10-22 · Dela Cruz, Juan (EMP-001) · Vacation leave · Whole day · approved

Structured content

Show the structured answer
{
  "days": [
    "…three LeaveCalendarDay rows…"
  ],
  "summary": {
    "peopleOut": 2,
    "daysApproved": "3.00",
    "daysPending": 2,
    "requestsPending": 1,
    "byType": [
      {
        "leaveType": "Vacation leave",
        "days": "1.00"
      },
      {
        "leaveType": "Sick leave",
        "days": "2.00"
      }
    ]
  }
}

Requests and approvals

Filing leave and overtime, and deciding on what others filed.

leave_requestsreads only

Leave requests

Leave requests over a range, with who, which type, how many days, the status and the reason. Leave the employee out for everybody the caller may see.

InputTypeMeaning
employeePublicIdstringoptional
statuspending | approved | rejected | cancelledoptional
fromstringoptional
tostringoptional
pageintegeroptional, default 1
pageSizenumber | number | numberoptional, default 50

Someone asks: “Show me the pending leave requests.”

Input

{
  "status": "pending"
}

What comes back

1 of 1 leave request:
2026-10-20 → 2026-10-21 · Santos, Maria (EMP-007) · 2.00 day(s) Sick leave · pending · "Flu" · id 8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f

Structured content

Show the structured answer
{
  "requests": [
    "…one LeaveRequestDto…"
  ],
  "total": 1
}

overtime_requestsreads only

Overtime requests

Overtime requests over a range: the day worked, hours requested and approved, the job they are charged to, the status and the reason.

InputTypeMeaning
employeePublicIdstringoptional
statuspending | approved | partially_approved | rejected | cancelledoptional
fromstringoptional
tostringoptional
projectPublicIdstringoptional
pageintegeroptional, default 1
pageSizenumber | number | numberoptional, default 50

Someone asks: “What overtime has Juan filed this month?”

Input

{
  "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
  "from": "2026-10-01",
  "to": "2026-10-31"
}

What comes back

1 of 1 overtime request:
2026-10-14 · Dela Cruz, Juan (EMP-001) · 1.00h requested, 1.00h approved · Acme Steel - Bridge retrofit · approved · "Finishing the deck pour" · id 4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b

Structured content

Show the structured answer
{
  "requests": [
    "…one OvertimeRequestDto…"
  ],
  "total": 1
}

my_requestsreads only

My requests

The signed-in person's own leave and overtime requests, whatever their status.

Takes no input.

Someone asks: “What have I filed?”

Input

{}

What comes back

Leave:
  2026-10-22 · Reyes, Ana (EMP-014) · 1.00 day(s) Vacation leave · approved · "Family matter" · id 9d0e1f2a-3b4c-4d5e-8f6a-7b8c9d0e1f2a

Structured content

Show the structured answer
{
  "leave": [
    "…one LeaveRequestDto…"
  ],
  "overtime": []
}

leave_typesreads only

Leave types and day values

The leave types that may be filed and whether each is paid, plus the day values (a whole day, a half day). file_leave needs ids from here.

Takes no input.

Someone asks: “What kinds of leave can I file?”

Input

{}

What comes back

Leave types:
  Vacation leave (paid) · id a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d
  Sick leave (paid) · id b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e
  Leave without pay (unpaid) · id c3d4e5f6-7a8b-4c9d-8e0f-1a2b3c4d5e6f
Day values:
  Whole day = 1.00 of a day · id d4e5f6a7-8b9c-4d0e-9f1a-2b3c4d5e6f7a
  Half day = 0.50 of a day · id e5f6a7b8-9c0d-4e1f-8a2b-3c4d5e6f7a8b

Structured content

Show the structured answer
{
  "leaveTypes": [
    "…LeaveTypeOption rows…"
  ],
  "dayValues": [
    "…LeaveValueOption rows…"
  ]
}

file_leavechanges data

File a leave request

Files a leave request for approval. With no employeePublicId it files for the signed-in person; with one it files on their behalf, which needs the right to file for others. Get the type and day-value ids from leave_types. One day entry per calendar day of leave.

InputTypeMeaning
employeePublicIdstringoptionalLeave out to file for yourself.
leaveTypePublicIdstringrequired
startDatestringrequired
endDatestringrequired
reasonstringrequired
daysarray of objectrequiredOne per calendar day, each with how much of the day it covers.
days[].leaveDatestringrequired
days[].leaveValuePublicIdstringrequired

Someone asks: “File two days of sick leave for Maria, the 20th and 21st, she has the flu.”

Input

{
  "employeePublicId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
  "leaveTypePublicId": "b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "startDate": "2026-10-20",
  "endDate": "2026-10-21",
  "reason": "Flu",
  "days": [
    {
      "leaveDate": "2026-10-20",
      "leaveValuePublicId": "d4e5f6a7-8b9c-4d0e-9f1a-2b3c4d5e6f7a"
    },
    {
      "leaveDate": "2026-10-21",
      "leaveValuePublicId": "d4e5f6a7-8b9c-4d0e-9f1a-2b3c4d5e6f7a"
    }
  ]
}

What comes back

Filed. 2026-10-20 → 2026-10-21 · Santos, Maria (EMP-007) · 2.00 day(s) Sick leave · pending · "Flu" · id 8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f

Structured content

Show the structured answer
{
  "request": {
    "publicId": "8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f",
    "status": "pending",
    "totalDays": "2.00",
    "…": "…"
  }
}

file_overtimechanges data

File an overtime request

Files an overtime request for approval, with the hours split across the projects or cost centers they were worked on. With no employeePublicId it files for the signed-in person. Each line is charged to exactly one project or cost center.

InputTypeMeaning
employeePublicIdstringoptionalLeave out to file for yourself.
requestDatestringrequiredThe day the overtime was or will be worked.
reasonstringrequired
linesarray of objectrequired
lines[].projectPublicIdstringoptional
lines[].costCenterPublicIdstringoptional
lines[].requestedHoursnumberrequired

Someone asks: “File 2 hours of overtime for myself yesterday on the bridge, we were finishing the pour.”

Input

{
  "requestDate": "2026-10-14",
  "reason": "Finishing the deck pour",
  "lines": [
    {
      "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "requestedHours": 2
    }
  ]
}

What comes back

Filed. 2026-10-14 · Reyes, Ana (EMP-014) · 2.00h requested · Acme Steel - Bridge retrofit · pending · "Finishing the deck pour" · id 0e1f2a3b-4c5d-4e6f-8a7b-8c9d0e1f2a3b

Structured content

Show the structured answer
{
  "request": {
    "publicId": "0e1f2a3b-4c5d-4e6f-8a7b-8c9d0e1f2a3b",
    "status": "pending",
    "requestedHours": "2.00",
    "targetsLabel": "Acme Steel - Bridge retrofit",
    "…": "…"
  }
}

cancel_requestchanges data

Cancel a request

Withdraws a leave or overtime request that has not been decided, or one the person is allowed to withdraw after approval. The suite refuses anything else and says why.

InputTypeMeaning
kindleave | overtimerequired
publicIdstringrequired

Someone asks: “Withdraw that leave request, she is coming in after all.”

Input

{
  "kind": "leave",
  "publicId": "8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f"
}

What comes back

Cancelled the leave for Santos, Maria. It is now cancelled.

Structured content

Show the structured answer
{
  "request": {
    "publicId": "8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f",
    "status": "cancelled",
    "…": "…"
  }
}

my_approvalsreads only

My approvals

Everything waiting on the signed-in person's decision, oldest first: overtime, leave, deduction requests and advances, incentive grants, quotations and invoices — each kind only if their role may approve it. A BLOCKED item cannot be decided yet; a note is context, not a block.

InputTypeMeaning
kindsarray of overtime | leave | deduction | incentive | quotation | invoiceoptional, default ["overtime","leave","deduction","incentive","quotation","invoice"]Narrow to some kinds.

Someone asks: “What is waiting for me?”

Input

{
  "kinds": [
    "overtime",
    "leave"
  ]
}

What comes back

2 requests waiting, oldest first; 1 cannot be decided yet.
#1 overtime · Dela Cruz, Juan (EMP-001) · 2026-10-14 · 1.00h overtime · on Acme Steel - Bridge retrofit · "Finishing the deck pour" · filed 2026-10-14 · id 4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b
#2 leave · Santos, Maria (EMP-007) · 2026-10-20 · 2 days sick leave · "Flu" · filed 2026-10-15 · id 8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f
    BLOCKED: No sick leave balance left for 2026.

Structured content

Show the structured answer
{
  "items": [
    {
      "kind": "overtime",
      "publicId": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b",
      "who": "Dela Cruz, Juan",
      "whoDetail": "EMP-001",
      "summary": "1.00h overtime",
      "subjectDate": "2026-10-14",
      "target": "Acme Steel - Bridge retrofit",
      "reason": "Finishing the deck pour",
      "filedAt": "2026-10-14T09:12:00.000Z"
    },
    {
      "kind": "leave",
      "publicId": "8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f",
      "who": "Santos, Maria",
      "whoDetail": "EMP-007",
      "summary": "2 days sick leave",
      "subjectDate": "2026-10-20",
      "reason": "Flu",
      "filedAt": "2026-10-15T01:30:00.000Z",
      "blocked": "No sick leave balance left for 2026."
    }
  ]
}

decide_requestchanges data

Approve or reject a request

Decides one item from my_approvals, as filed: overtime is approved for the hours claimed, an advance on the terms the service works out. Approving for different figures is done in the suite. Rejecting a quotation or invoice needs a reason. Read the item back to the person before calling this.

InputTypeMeaning
kindovertime | leave | deduction | incentive | quotation | invoicerequired
publicIdstringrequired
decisionapprove | rejectrequired
remarksstringoptionalWhy — required when rejecting a quotation or invoice.

Someone asks: “Approve Juan's overtime.”

Input

{
  "kind": "overtime",
  "publicId": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b",
  "decision": "approve"
}

What comes back

Approved the overtime for Dela Cruz, Juan. It is now approved.

Structured content

Show the structured answer
{
  "kind": "overtime",
  "publicId": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b",
  "decision": "approve",
  "status": "approved",
  "who": "Dela Cruz, Juan"
}

Pay

Payslips, runs and what a job cost. Read and simulate only — nothing here pays anybody.

my_payslipsreads only

My payslips

The signed-in person's released payslips: period, pay date, gross, deductions and net. With a payslipPublicId, one payslip in full — days and hours, every earning and deduction line. Only ever the person's own.

InputTypeMeaning
fromstringoptional
tostringoptional
payslipPublicIdstringoptional

Someone asks: “How much was my last payslip?”

Input

{
  "from": "2026-09-01"
}

What comes back

2 payslips:
2026-09-16 → 2026-09-30 · paid 2026-10-05 · gross 14250.00 · deductions 1893.75 · net 12356.25 · PR-2026-0930-01 · id a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
2026-09-01 → 2026-09-15 · paid 2026-09-20 · gross 13500.00 · deductions 1793.75 · net 11706.25 · PR-2026-0915-01 · id b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e

Structured content

Show the structured answer
{
  "payslips": [
    {
      "publicId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "referenceNo": "PR-2026-0930-01",
      "periodLabel": "2026-09-16 → 2026-09-30",
      "payDate": "2026-10-05",
      "grossPay": "14250.00",
      "totalDeductions": "1893.75",
      "netPay": "12356.25"
    },
    "…"
  ]
}

payroll_runsreads only

Payroll runs

Payroll runs, newest first: period, type, status, pay date and totals. Simulations are left out unless asked for.

InputTypeMeaning
yearintegeroptional
statusstringoptionaldraft, calculated, approved, paid or cancelled
includeSimulationsbooleanoptional, default false
limitintegeroptional, default 25

Someone asks: “List this year's payroll runs.”

Input

{
  "year": 2026,
  "limit": 2
}

What comes back

2 of 19 runs:
PR-2026-0930-01 · 2026-09-16 → 2026-09-30 (Semi-monthly) · regular · paid · pays 2026-10-05 · gross 812450.00 · net 701233.10 · id d4e5f6a7-b8c9-4d0e-9f1a-2b3c4d5e6f7a
PR-2026-0915-01 · 2026-09-01 → 2026-09-15 (Semi-monthly) · regular · paid · pays 2026-09-20 · gross 798120.00 · net 689410.55 · id e5f6a7b8-c9d0-4e1f-8a2b-3c4d5e6f7a8b

Structured content

Show the structured answer
{
  "runs": [
    "…two PayrollRunDto rows…"
  ],
  "total": 19
}

simulate_payrollchanges data

Simulate payroll

Runs the payroll engine for one pay period as a simulation: the payslips can be read, but nothing is paid, no balance, accrual or grant moves, and a simulation can never be approved. Name the period by id, or give any date inside it. Reports totals, who could not be paid and why.

InputTypeMeaning
payPeriodPublicIdstringoptional
datestringoptionalAny date inside the period, when the id is not known.
runTyperegular | thirteenth_month | adjustment | final_payoptional, default "regular"

Someone asks: “Simulate payroll for the first half of October.”

Input

{
  "date": "2026-10-10"
}

What comes back

Simulation SIM-2026-1015-03 for 2026-10-01 → 2026-10-15 (Semi-monthly), regular: calculated.
Gross 804310.00 = basic 702000.00 + overtime 41310.00 + holiday 0.00 + incentives 61000.00; deductions 109870.20; net 694439.80.
1 person could not be paid:
  Villanueva, Rico (EMP-031): no salary rate on 2026-10-01.
This is a simulation: nothing was paid and no balance moved. The payslips are under Payroll › Simulations in the suite.

Structured content

Show the structured answer
{
  "run": {
    "referenceNo": "SIM-2026-1015-03",
    "status": "calculated",
    "isSimulation": true,
    "totalGross": "804310.00",
    "totalNet": "694439.80",
    "…": "…"
  },
  "skipped": [
    {
      "employeePublicId": "f6a7b8c9-d0e1-4f2a-9b3c-4d5e6f7a8b9c",
      "employeeName": "Villanueva, Rico",
      "employeeNumber": "EMP-031",
      "reason": "no salary rate on 2026-10-01."
    }
  ],
  "notes": []
}

job_costsreads only

Labor cost by project or cost center

What each project or cost center cost in labor over a span, from approved payroll: basic, overtime, holiday, incentives, employer contributions and the total. Highest first.

InputTypeMeaning
fromstringrequired
tostringrequired
byproject | cost_centeroptional, default "project"

Someone asks: “What did each project cost us in labor last month?”

Input

{
  "from": "2026-09-01",
  "to": "2026-09-30",
  "by": "project"
}

What comes back

Labor cost 2026-09-01 to 2026-09-30, by project:
Acme Steel - Bridge retrofit · total 412330.50 · basic 350000.00 · overtime 22330.50 · holiday 0.00 · incentives 15000.00 · employer 25000.00
Acme Steel - Warehouse fit-out · total 198745.00 · basic 170000.00 · overtime 8745.00 · holiday 0.00 · incentives 5000.00 · employer 15000.00
No project · total 61200.00 · basic 52000.00 · overtime 0.00 · holiday 0.00 · incentives 4200.00 · employer 5000.00

Structured content

Show the structured answer
{
  "from": "2026-09-01",
  "to": "2026-09-30",
  "by": "project",
  "rows": [
    {
      "publicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "code": "ALPHA",
      "name": "Acme Steel - Bridge retrofit",
      "totals": {
        "basic": "350000.00",
        "overtime": "22330.50",
        "holiday": "0.00",
        "incentive": "15000.00",
        "employer": "25000.00",
        "total": "412330.50",
        "…": "…"
      }
    },
    "…"
  ]
}

deduction_requestsreads only

Deduction requests and advances

Deduction requests: the kind, the amount, how many instalments, which period it starts in and its status. `includeCompleted` adds the ones already paid off.

InputTypeMeaning
employeePublicIdstringoptional
statuspending | approved | rejected | cancelled | disbursedoptional
fromstringoptional
tostringoptional
includeCompletedbooleanoptional, default false
pageintegeroptional, default 1
pageSizenumber | number | numberoptional, default 50

Someone asks: “Are there advances waiting for approval?”

Input

{
  "status": "pending"
}

What comes back

1 of 1 deduction request:
2026-10-14 · Dela Cruz, Juan (EMP-001) · Cash advance · 6000.00 over 3 instalments · from 2026-10-16 → 2026-10-31 · pending · id 3b4c5d6e-7f8a-4b9c-8d0e-1f2a3b4c5d6e

Structured content

Show the structured answer
{
  "requests": [
    "…one DeductionRequestDto…"
  ],
  "total": 1
}

incentive_grantsreads only

Incentive grants

Incentive grants: who, which incentive, the value, the period it is paid in, the project or cost center it is charged to where it names one, and its status.

InputTypeMeaning
employeePublicIdstringoptional
statuspending | approved | paid | cancelledoptional
payPeriodPublicIdstringoptional
fromstringoptional
tostringoptional
pageintegeroptional, default 1
pageSizenumber | number | numberoptional, default 50

Someone asks: “What incentives are going out this cutoff?”

Input

{
  "payPeriodPublicId": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
  "status": "approved"
}

What comes back

1 of 1 incentive grant:
2026-10-12 · Santos, Maria (EMP-007) · Site allowance · 1500.00 (Fixed amount) · 2026-10-01 → 2026-10-15 · on Acme Steel - Bridge retrofit · approved · id 4c5d6e7f-8a9b-4c0d-9e1f-2a3b4c5d6e7f

Structured content

Show the structured answer
{
  "grants": [
    "…one IncentiveGrantDto…"
  ],
  "total": 1
}

owed_balancesreads only

What people still owe

Outstanding deduction balances, largest first: who owes what, broken down by kind of deduction, and over how many schedules.

InputTypeMeaning
limitintegeroptional, default 25

Someone asks: “Who still owes the company money?”

Input

{
  "limit": 2
}

What comes back

2 people with a balance:
Dela Cruz, Juan (EMP-001) · 4000.00 over 1 schedule · Cash advance 4000.00
Villanueva, Rico (EMP-031) · 1250.00 over 2 schedules · Cash advance 1000.00, Uniform 250.00

Structured content

Show the structured answer
{
  "rows": [
    "…two OwedBalanceRowDto rows…"
  ]
}

Sales

Quotations through to what customers still owe.

sales_documentsreads only

Sales documents

Quotations, sales orders, invoices or delivery receipts, newest first: the number, the customer, the project, the status and the amount. `overdueOnly` and `expiredOnly` narrow to what needs chasing.

InputTypeMeaning
kindquotation | sales_order | invoice | delivery_receiptrequired
searchstringoptional
customerPublicIdstringoptional
projectPublicIdstringoptional
statusarray of stringoptionalStatus names, as the suite shows them.
fromstringoptional
tostringoptional
overdueOnlybooleanoptional, default falseInvoices only.
expiredOnlybooleanoptional, default falseQuotations only.
pageintegeroptional, default 1
pageSizenumber | number | numberoptional, default 20

Someone asks: “Which invoices are overdue?”

Input

{
  "kind": "invoice",
  "overdueOnly": true
}

What comes back

2 of 2 invoices:
INV-2026-0912-03 · Acme Steel Corporation · Acme Steel - Bridge retrofit · sent · PHP 248000.00 (balance 248000.00) · overdue · id 1f2a3b4c-5d6e-4f7a-8b8c-9d0e1f2a3b4c
INV-2026-0820-01 · Northwind Builders · — · sent · PHP 96500.00 (balance 46500.00) · overdue · id 2a3b4c5d-6e7f-4a8b-9c9d-0e1f2a3b4c5d

Structured content

Show the structured answer
{
  "documents": [
    "…two InvoiceSummaryDto rows…"
  ],
  "total": 2
}

receivablesreads only

Receivables

What customers owe: the total outstanding, how much is overdue and how much falls due soon, with the ageing buckets. Pass customers to get each one's balance instead.

InputTypeMeaning
customerPublicIdsarray of stringoptional

Someone asks: “How much are we owed?”

Input

{}

What comes back

As of 2026-10-15, in PHP:
outstanding 1294500.00 across 14 invoice(s)
overdue 294500.00 across 2
due within 7 days: 180000.00 across 3
Ageing buckets:
  {"label":"Current","count":9,"value":"1000000.00"}
  {"label":"1–30 days","count":2,"value":"248000.00"}
  {"label":"31–60 days","count":1,"value":"46500.00"}

Structured content

Show the structured answer
{
  "aging": {
    "today": "2026-10-15",
    "currency": "PHP",
    "outstanding": {
      "count": 14,
      "value": "1294500.00"
    },
    "overdue": {
      "count": 2,
      "value": "294500.00"
    },
    "dueSoon": {
      "count": 3,
      "value": "180000.00"
    },
    "dueWithinDays": 7,
    "buckets": [
      "…agingBucketDto rows…"
    ]
  }
}

sales_pipelinereads only

Quotation pipeline

Quotations by status with their count and value: what is open, what is waiting on a customer, and what is expiring soon or already expired.

Takes no input.

Someone asks: “What is in the quotation pipeline?”

Input

{}

What comes back

As of 2026-10-15, in PHP:
total 23 worth 4820000.00
open 11 worth 2310000.00
awaiting the customer 6 worth 1450000.00
expiring within 14 days: 2 worth 320000.00
expired 3 worth 410000.00
By status:
  draft: 4 worth 540000.00
  sent: 6 worth 1450000.00
  accepted: 9 worth 2420000.00
  declined: 4 worth 410000.00

Structured content

Show the structured answer
{
  "pipeline": {
    "today": "2026-10-15",
    "currency": "PHP",
    "total": {
      "count": 23,
      "value": "4820000.00"
    },
    "…": "…"
  }
}