| 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_SUBDOMAIN
VITE_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 time
out_at (string, ISO 8601) - Clock-out time (null to indicate still working)
lunch (boolean) - Whether lunch break was taken
in_note (string) - Note at clock-in
out_note (string) - Note at clock-out
Example calls:
await skill({ name: "repairshopr-timelog" }, {
out_at: "2024-01-15T17:00:00Z",
out_note: "End of day",
lunch: true
}, { method: 'PUT' })
const last = await skill({ name: "repairshopr-timelog" }, {},
{ user_id: 5, method: 'GET', endpoint: '/last' }
)
const logs = await skill({ name: "repairshopr-timelog" }, {
user_id: 5
})
Response includes:
- List:
timelogs array 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.
lunch is a boolean indicating lunch break taken; don't confuse with lunch duration.
- Updating likely requires
in_at to 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 tickets
repairshopr-user - For user information to map user_id to names