TimeClock 365 API: your data, your systems
Pull attendance, punches, lunch breaks and timesheets, and provision users and groups - with one JSON-RPC endpoint and a Bearer token.
- JSON-RPC 2.0
- Bearer token
- ISO 27001
Technical Connection Details
All API calls use a single JSON-RPC 2.0 endpoint over HTTPS - a lightweight protocol where you send the operation name and its parameters in a JSON request body. Every request must include a Bearer token in the Authorization header.
https://live.timeclock365.com/api/v1/json-rpc application/json Authentication
All requests must include a Bearer token in the Authorization header. You can generate and manage your API keys under the Integrations tab in your TimeClock 365 dashboard.
Authorization: Bearer YOUR_API_TOKEN Content-Type: application/json
What You Can Do with the API
Sessions
Pull clock-in and clock-out sessions per employee with timezone, location, and punch source.
Lunches
Retrieve lunch break start and end times per employee for any date range.
Timesheet
Full timesheets with work sessions, nested lunch breaks, and task work logs in one call.
Extended Sessions
Detailed attendance with profile data, worked/leave totals, expected hours, absences, and approvals.
Create Users & Groups
Provision employees and groups in bulk, mapped to your own system via external IDs.
Deactivate Users
Offboard employees in bulk with an effective deactivation date.
API Methods
There is a single endpoint. Every request is a POST to the same base URL - the method name in the JSON body determines what it does.
Authentication & Example Request
Generate your API token from the dashboard from the Integrations area. All calls follow the JSON-RPC 2.0 specification - a POST to the base URL with the method name in the body.
curl -X POST "https://live.timeclock365.com/api/v1/json-rpc" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "timesheet",
"params": {
"startDate": "2026-01-01",
"endDate": "2026-01-31"
},
"id": 123
}' All read methods accept an optional groupIds parameter - an array of TimeClock 365 group IDs. When provided, only employees from those groups are returned; when omitted, all employees in the company are included.
Sessions
Retrieve clock-in / clock-out sessions per employee for a date range, including timezone, location type, and the source of each punch (web, phone, terminal).
method: "sessions" | Parameter | Type | Description |
|---|---|---|
| startDate | string | Start date (YYYY-MM-DD) |
| endDate | string | End date (YYYY-MM-DD) |
| groupIds | int[] | Optional - filter by group IDs, e.g. [2067, 3426] |
{
"jsonrpc": "2.0",
"method": "sessions",
"params": {
"startDate": "2025-10-08",
"endDate": "2025-10-15",
"groupIds": [2067, 3426]
},
"id": 121
} {
"jsonrpc": "2.0",
"id": 121,
"result": [
{
"employeeNumber": 1265,
"email": "[email protected]",
"sessions": [
{
"startDate": "2024-10-09 08:12:34",
"endDate": "2024-10-09 17:18:34",
"timezone": "Asia/Jerusalem",
"locationType": "office",
"startSourceType": "web",
"endSourceType": "phone"
}
]
}
]
} Extended Sessions
The full employee attendance picture: profile fields, groups, worked/leave totals, expected hours per day, and per-session details including absences, notes, and approval info.
method: "extended-sessions" | Parameter | Type | Description |
|---|---|---|
| startDate | string | Start date (YYYY-MM-DD) |
| endDate | string | End date (YYYY-MM-DD) |
| groupIds | int[] | Optional - filter by group IDs |
{
"jsonrpc": "2.0",
"method": "extended-sessions",
"params": {
"startDate": "2025-01-24",
"endDate": "2025-01-24"
},
"id": 123
} {
"jsonrpc": "2.0",
"id": 123,
"result": [
{
"id": 21814,
"employeeNumber": "31394",
"email": "[email protected]",
"passport": "Elena21814",
"groups": [],
"workStartedAt": "2010-01-03",
"workEndedAt": null,
"birthday": "1990-12-13",
"gender": "female",
"totalWorkedSeconds": 10956,
"totalLeaveSeconds": 0,
"expectedSeconds": 0,
"expectedHoursPerDay": [
{ "date": "2026-01-24", "hours": 9 }
],
"sessions": [
{
"startDate": "2025-01-24 12:35:50",
"startDateSentAt": "2025-01-24 12:35:50",
"startNote": null,
"endDate": "2025-01-24 15:38:12",
"endDateSentAt": "2025-01-24 15:38:12",
"endNote": null,
"duration": 10942,
"timezone": "Asia/Jerusalem",
"locationType": "office",
"startSourceType": "web",
"endSourceType": "web",
"isAbsence": false,
"absenceName": null,
"absenceNote": null,
"absenceApprovedDate": null,
"absenceApprovedManager": null,
"absenceCodeDays": null,
"absenceCodeHors": null
}
]
}
]
} Lunches
Retrieve lunch break start/end times per employee for a date range.
method: "lunches" | Parameter | Type | Description |
|---|---|---|
| startDate | string | Start date (YYYY-MM-DD) |
| endDate | string | End date (YYYY-MM-DD) |
| groupIds | int[] | Optional - filter by group IDs |
{
"jsonrpc": "2.0",
"method": "lunches",
"params": {
"startDate": "2025-10-08",
"endDate": "2025-10-15"
},
"id": 122
} {
"jsonrpc": "2.0",
"id": 122,
"result": [
{
"employeeNumber": 1265,
"email": "[email protected]",
"sessions": [
{
"startDate": "2024-10-09 12:12:34",
"endDate": "2024-10-09 12:48:34",
"timezone": "Asia/Jerusalem",
"startSourceType": "web",
"endSourceType": "phone"
}
]
}
]
} Timesheet
Full timesheet per employee: work sessions with nested lunches and task work logs in a single response.
method: "timesheet" | Parameter | Type | Description |
|---|---|---|
| startDate | string | Start date (YYYY-MM-DD) |
| endDate | string | End date (YYYY-MM-DD) |
| groupIds | int[] | Optional - filter by group IDs |
{
"jsonrpc": "2.0",
"method": "timesheet",
"params": {
"startDate": "2025-10-08",
"endDate": "2025-10-15"
},
"id": 123
} {
"jsonrpc": "2.0",
"id": 123,
"result": [
{
"employeeNumber": 1265,
"email": "[email protected]",
"sessions": [
{
"startDate": "2024-10-09 08:12:34",
"endDate": "2024-10-09 17:18:34",
"timezone": "Asia/Jerusalem",
"locationType": "office",
"startSourceType": "web",
"endSourceType": "phone",
"lunches": [
{
"startDate": "2024-10-09 12:12:34",
"endDate": "2024-10-09 12:48:34",
"startSourceType": "web",
"endSourceType": "phone"
}
],
"workLogs": [
{
"name": "task",
"externalId": "DR-4258",
"startDate": "2024-10-09 08:15:34",
"endDate": "2024-10-09 12:10:34",
"startSourceType": "web",
"endSourceType": "phone"
}
]
}
]
}
]
} Create Groups
Create employee groups in bulk. Use externalId to map groups to your own system's IDs - you can then reference them when creating users.
method: "groups-create" {
"jsonrpc": "2.0",
"method": "groups-create",
"params": {
"list": [
{ "name": "Group 001", "externalId": "gr-001" },
{ "name": "Group 002", "externalId": "gr-002" },
{ "name": "Group 003", "externalId": "gr-003" }
]
},
"id": 123
} Create Users
Create employees in bulk. Only email and startWorkDate are required in practice - other profile fields are optional. Assign users to groups via externalGroupIds.
method: "users-create" | Field | Type | Description |
|---|---|---|
| firstName | string | First name |
| lastName | string | Last name |
| string | Employee email (login) | |
| phone | string | Phone number |
| passportNumber | string | National ID / passport number |
| numberForPayroll | string | Payroll employee number |
| startWorkDate | string | Employment start date (YYYY-MM-DD) |
| externalGroupIds | string[] | Group externalIds to assign the user to |
{
"jsonrpc": "2.0",
"method": "users-create",
"params": {
"list": [
{
"firstName": "John",
"lastName": "Smith",
"email": "[email protected]",
"phone": "+15551234567",
"passportNumber": "4510 123456",
"numberForPayroll": "EMP-001",
"startWorkDate": "2026-01-15",
"externalGroupIds": ["gr-001"]
},
{
"firstName": "Maria",
"lastName": "Garcia",
"email": "[email protected]",
"phone": "+15557654321",
"startWorkDate": "2026-03-01",
"externalGroupIds": ["gr-001", "gr-002"]
},
{
"firstName": "Alex",
"email": "[email protected]",
"numberForPayroll": "EMP-003",
"startWorkDate": "2026-06-03",
"externalGroupIds": []
}
]
},
"id": 123
} Deactivate Users
Deactivate employees in bulk by their ID number, effective from a given date.
method: "users-deactivation" {
"jsonrpc": "2.0",
"method": "users-deactivation",
"params": {
"list": [
{ "passportNumber": "pswd-64231", "date": "2026-06-25" },
{ "passportNumber": "pswd-64232", "date": "2026-06-25" },
{ "passportNumber": "pswd-64233", "date": "2026-06-25" }
]
},
"id": 123
} Frequently asked questions
What kind of API does TimeClock 365 have?
TimeClock 365 provides a JSON-RPC 2.0 API over HTTPS. Every request is a POST to one endpoint, https://live.timeclock365.com/api/v1/json-rpc, and the method name in the JSON body selects the operation.
How do I authenticate API requests?
Send a Bearer token in the Authorization header. API keys are created in the Integrations area of your TimeClock 365 dashboard.
Which methods are available?
Read methods: sessions, extended-sessions, lunches and timesheet. Write methods: groups-create, users-create and users-deactivation. Read methods accept an optional groupIds filter.
Can I create and deactivate employees through the API?
Yes. users-create adds employees in bulk and groups-create adds groups, linked to your own system through external IDs. users-deactivation deactivates employees in bulk from a given date.
Can I pull hours for payroll?
Yes. The timesheet method returns work sessions with nested lunch breaks and task work logs, and extended-sessions adds worked and leave totals, expected hours and absences. TimeClock 365 also has built-in payroll exports - see the payroll export page.
How do I get API access?
Contact TimeClock 365 or book a demo and ask for API access for your account.
Is the API secure?
Requests use HTTPS with token authentication. TimeClock 365 is ISO 27001 certified.
Related
Ready to integrate?
Book a demo and ask for API access for your account.