---
title: "Create Timelog (Global)"
method: POST
path: "/timelog"
---

# Create Timelog (Global)

`POST /timelog`

## Request

- Base URL: `https://dc-region.zuperpro.com/api`
- URL: `https://dc-region.zuperpro.com/api/timelog`
- Auth: API key in header `x-api-key`

Creates a clock-in/clock-out entry for a job or project, identified via query/body rather than a path param — the same underlying handler as the nested `/jobs/:job_uid/timelog` family, but this global form also supports project timelogs (`project_uid`) and is the only way to punch for a project. At least one of job_uid/project_uid is required (if both given, the job must belong to that project). Punch sequencing conflicts (e.g. clocking in twice) return 409.

## Request body

- object
  - `timelog` object, required
    - `type` 'CLOCK_IN' | 'CLOCK_OUT', required
    - `checked_time` string, date-time, required
    - `job_uid` string
    - `project_uid` string
    - `latitude` number
    - `longitude` number
    - `remarks` string
    - `override_check` boolean: Bypasses the multiple-active-job conflict check.
    - `timelog_type` 'JOB' | 'MEAL_BREAK' | 'TRAVEL': Forced back to JOB unless the company's v2 timelog policy is enabled.
    - `reason_code` 'MEAL_BREAK' | 'MATERIALS_NEEDED' | 'OTHERS'
    - `client_timelog_uid` string: Optional idempotency key for offline sync.
  - `is_offline` boolean
  - `logged_user` string: ADMIN/TL only — punch on behalf of another user.

## Response `200`

200

## Other responses

- `409`: 409

## Changes

- **2026-11-03** `3c21bc232e16`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zuper/apis/zuper-pro-api/changes/timelog/post.md)

---

[API](https://skmtc.dev/zuper/apis/zuper-pro-api.md) - [All operations](https://skmtc.dev/zuper/apis/zuper-pro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zuper/apis/zuper-pro-api/revisions/3c21bc232e16?raw)
