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.

BASE URL (HTTPS) https://live.timeclock365.com/api/v1/json-rpc
HTTP METHOD POST
CONTENT TYPE 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.

Request Header
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.

Example cURL Request
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).

POST method: "sessions"
ParameterTypeDescription
startDatestringStart date (YYYY-MM-DD)
endDatestringEnd date (YYYY-MM-DD)
groupIdsint[]Optional - filter by group IDs, e.g. [2067, 3426]
Request
{
  "jsonrpc": "2.0",
  "method": "sessions",
  "params": {
    "startDate": "2025-10-08",
    "endDate": "2025-10-15",
    "groupIds": [2067, 3426]
  },
  "id": 121
}
Response
{
  "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.

POST method: "extended-sessions"
ParameterTypeDescription
startDatestringStart date (YYYY-MM-DD)
endDatestringEnd date (YYYY-MM-DD)
groupIdsint[]Optional - filter by group IDs
Request
{
  "jsonrpc": "2.0",
  "method": "extended-sessions",
  "params": {
    "startDate": "2025-01-24",
    "endDate": "2025-01-24"
  },
  "id": 123
}
Response
{
  "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.

POST method: "lunches"
ParameterTypeDescription
startDatestringStart date (YYYY-MM-DD)
endDatestringEnd date (YYYY-MM-DD)
groupIdsint[]Optional - filter by group IDs
Request
{
  "jsonrpc": "2.0",
  "method": "lunches",
  "params": {
    "startDate": "2025-10-08",
    "endDate": "2025-10-15"
  },
  "id": 122
}
Response
{
  "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.

POST method: "timesheet"
ParameterTypeDescription
startDatestringStart date (YYYY-MM-DD)
endDatestringEnd date (YYYY-MM-DD)
groupIdsint[]Optional - filter by group IDs
Request
{
  "jsonrpc": "2.0",
  "method": "timesheet",
  "params": {
    "startDate": "2025-10-08",
    "endDate": "2025-10-15"
  },
  "id": 123
}
Response
{
  "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.

POST method: "groups-create"
Request
{
  "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.

POST method: "users-create"
FieldTypeDescription
firstNamestringFirst name
lastNamestringLast name
emailstringEmployee email (login)
phonestringPhone number
passportNumberstringNational ID / passport number
numberForPayrollstringPayroll employee number
startWorkDatestringEmployment start date (YYYY-MM-DD)
externalGroupIdsstring[]Group externalIds to assign the user to
Request
{
  "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.

POST method: "users-deactivation"
Request
{
  "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.

Ready to integrate?

Book a demo and ask for API access for your account.

Contact our sales team