name: repairshopr-timelog description: Manage general employee time logs (clock in/out) in RepairShopr license: MIT compatibility: opencode metadata: audience: employees, administrators, payroll api: GET /timelogs, PUT /timelogs, GET /timelogs/last
What I do
I manage employee time logs for clock-in/clock-out tracking. These logs record when employees start and end work shifts, including lunch breaks and notes. I can list timelogs (with optional user filter), retrieve the last timelog for a user, and update timelog details (like adding notes or correcting times).
When to use me
Use this when:
- Employees need to clock in/out via integration
- Reviewing timesheets for payroll
- Correcting timelog entries (adding notes, fixing missed clock-outs)
- Checking who is currently working (timelog with null
out_at) - Getting the last timelog for a user to determine current status
How to use
Required API base URL:
VITE_REPAIRSHOPR_SUBDOMAINVITE_REPAIRSHOPR_API_KEY
Permissions: Users with "Timelogs - Manage" can see all users' timelogs; otherwise only own.
List Timelogs (GET /timelogs) Optional:
user_id(integer) - Filter by user ID (current user if omitted)
Get Last Timelog (GET /timelogs/last) Optional:
user_id(integer) - Default is current user if not provided
Update Timelog (PUT /timelogs)
This is a bit unusual: the endpoint is /timelogs (no ID in path), so it likely updates the most recent or open timelog for the current user, or you pass id in body? The docs show a PUT with no path ID. Let's infer you can update timelog by passing its ID in body or it updates the "last" or currently open one. The example body doesn't include id. For safety, assume it updates the most recent/active timelog for the authenticated user.
Body fields:
in_at(string, ISO 8601) - Clock-in timeout_at(string, ISO 8601) - Clock-out time (null to indicate still working)lunch(boolean) - Whether lunch break was takenin_note(string) - Note at clock-inout_note(string) - Note at clock-out
Example calls:
// Clock in (create new timelog) - Actually perhaps via some other endpoint?
// The provided docs don't show a POST create; maybe UI uses different endpoint.
// Update timelog (clock out) - likely need to update the open one
await skill({ name: "repairshopr-timelog" }, {
out_at: "2024-01-15T17:00:00Z",
out_note: "End of day",
lunch: true
}, { method: 'PUT' })
// Get last timelog for user 5
const last = await skill({ name: "repairshopr-timelog" }, {},
{ user_id: 5, method: 'GET', endpoint: '/last' }
)
// List timelogs
const logs = await skill({ name: "repairshopr-timelog" }, {
user_id: 5
})
Response includes:
- List:
timelogsarray with objects:id,in_at,out_at,user_id,in_note,out_note,lunch,manually_updated - Last: single timelog object (no wrapper)
- Put: updated timelog object
Important
- The API appears to lack explicit create endpoint in these docs; typical flow might be: Get last timelog (if none, create by POST to /timelogs? not shown). The provided docs only show GET, PUT, GET /last. Your integration may need to handle creating via a different method or by updating a placeholder.
lunchis a boolean indicating lunch break taken; don't confuse with lunch duration.- Updating likely requires
in_atto set original clock-in; can't change after posting maybe. - Single-Customer Users may have limited access.
Related skills
repairshopr-ticket-timer- Separate timer system specifically for ticketsrepairshopr-user- For user information to map user_id to names