# Create Timecard Punch

> POST /v1/timekeeping/timecard/punches

`POST https://app.untetherlabs.com/api/v1/timekeeping/timecard/punches`

Create a new punch for a specific timecard

## Request

```bash
curl -X POST 'https://app.untetherlabs.com/api/v1/timekeeping/timecard/punches' \
  -H 'Authorization: Bearer $UNTETHER_API_KEY' \
  -H 'Content-Type: application/json' \
  -d @body.json
```

## Request body (application/json)

- `provider` (uuid, required)
- `action` (string, required)
- `time` (string, example "2024-11-20T07:43:34+0000") — Punch timestamp, or now if not provided
- `state` (TimecardPunchState, default "pending", one of `pending`, `approved`, `rejected`)
- `providerNote` (string, example "Felt sick, had to leave early.")
- `adminNote` (string, example "Adjusted to schedule.")

## Response 201

- `timecardId` (uuid, required)
- `providerId` (uuid, required)
- `generated` (boolean, default false)
- `createdAt` (string, required, example "2024-11-20T07:43:34+0000")
- `updatedAt` (string, required, example "2024-11-20T07:43:34+0000")
- `action` (string, required)
- `state` (TimecardPunchState, required, one of `pending`, `approved`, `rejected`)
- `time` (string, required, example "2024-11-20T07:43:34+0000")
- `providerNote` (string | null, required, example "Felt sick, had to leave early.")
- `adminNote` (string | null, required, example "Adjusted to schedule.")

## Errors

- `validation` (400) — Input validation failed.
- `timecard-not-found` (404) — A specified timecard does not exist in the system.
