Skip to main content
The Untether Labs API provides endpoints for managing timecard punches, allowing you to create and delete time tracking entries for your workforce.

Terminology

Before working with timecard punches, it’s important to understand the key terms:
  • Punch: A single time entry that records when a provider performs an action (clock in, clock out, break start, break end). Typically timecard punches follow a logical sequence. You’ll have pairs of clock_in/clock_out punches, with optional break_start/break_end punches in between.
  • Timecard: A collection of punches that represent a complete work session for a provider
  • Action: The type of punch being recorded (clock_in, clock_out, break_start, break_end)
  • State: The admin approval status of a punch (pending, approved, rejected)

Creating Punches

Use the POST /v1/timekeeping/timecard/punches endpoint to create new timecard punches.
For clock_in actions, do not include a timecard field. The system will automatically create a new timecard and return the ID.
Clock In Request
curl -X POST --location "https://app.untetherlabs.com/api/v1/timekeeping/timecard/punches" \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "123e4567-e89b-12d3-a456-426614174000",
    "action": "clock_in",
    "time": "2025-09-10T08:00:00Z",
    "state": "pending",
    "providerNote": "Starting my shift"
  }'

Other Actions (Clock Out, Breaks)

For all other actions, you must specify the timecard ID that was created during clock in:
Clock Out Request
curl -X POST --location "https://app.untetherlabs.com/api/v1/timekeeping/timecard/punches" \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "timecard": "456e7890-e89b-12d3-a456-426614174001",
    "provider": "123e4567-e89b-12d3-a456-426614174000",
    "action": "clock_out",
    "time": "2025-09-10T17:00:00Z",
    "state": "pending",
    "providerNote": "Finished my shift"
  }'

Response

Create Punch Response
{
    "id": "789e1234-e89b-12d3-a456-426614174002",
    "timecard": "456e7890-e89b-12d3-a456-426614174001",
    "provider": "123e4567-e89b-12d3-a456-426614174000",
    "action": "clock_in",
    "state": "pending",
    "time": "2025-09-10T08:00:00Z",
    "generated": false,
    "createdAt": "2025-09-10T08:00:01Z",
    "updatedAt": "2025-09-10T08:00:01Z",
    "providerNote": "Starting my shift"
}

Deleting Punches

Use the DELETE /v1/timekeeping/timecard/punches/{punchId} endpoint to remove a specific punch.
Delete Punch Request
curl -X DELETE --location "https://app.untetherlabs.com/api/v1/timekeeping/timecard/punches/789e1234-e89b-12d3-a456-426614174002" \
  -H "Authorization: Bearer {ACCESS_TOKEN}"
When deleting the last punch in a timecard, the entire timecard will be automatically deleted. To re-add punches you must start over with a new clock_in.

Response

The delete operation returns the deleted punch object:
Delete Punch Response
{
    "id": "789e1234-e89b-12d3-a456-426614174002",
    "timecard": "456e7890-e89b-12d3-a456-426614174001",
    "provider": "123e4567-e89b-12d3-a456-426614174000",
    "action": "clock_in",
    "state": "pending",
    "time": "2025-09-10T08:00:00Z",
    "generated": false,
    "createdAt": "2025-09-10T08:00:01Z",
    "updatedAt": "2025-09-10T08:00:01Z",
    "providerNote": "Starting my shift"
}