Developer API

TimeClock 365 API Guide

Connect your organizational systems directly to TimeClock 365. Pull attendance data, punch records, lunch breaks, and full timesheets - automatically and accurately.

Technical Connection Details

All API calls use a single JSON-RPC endpoint over HTTPS. 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.

Endpoints

All requests are POST to the base URL with the method name in the JSON body.

Authentication & Example Request

Generate your API token from the dashboard under Settings → Integrations → API Keys. All calls are JSON-RPC 2.0 - 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 endpoints 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
}

Ready to Integrate?

API access is available on Business and Enterprise plans.

Contact our sales team