# Clockify Routing Reference

**App name:** `clockify`
**Base URL proxied:** `api.clockify.me`

## API Path Pattern

```
/clockify/api/v1/{resource}
```

## Common Endpoints

### Get Current User
```bash
GET /clockify/api/v1/user
```

### List Workspaces
```bash
GET /clockify/api/v1/workspaces
```

### Get Workspace
```bash
GET /clockify/api/v1/workspaces/{workspaceId}
```

### List Workspace Users
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/users
```

### List Projects
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/projects
```

### Get Project
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/projects/{projectId}
```

### Create Project
```bash
POST /clockify/api/v1/workspaces/{workspaceId}/projects
Content-Type: application/json

{
  "name": "My Project",
  "isPublic": true,
  "clientId": "optional-client-id"
}
```

### Update Project
```bash
PUT /clockify/api/v1/workspaces/{workspaceId}/projects/{projectId}
Content-Type: application/json

{
  "name": "Updated Project Name",
  "archived": true
}
```

### Delete Project
```bash
DELETE /clockify/api/v1/workspaces/{workspaceId}/projects/{projectId}
```

### List Clients
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/clients
```

### Create Client
```bash
POST /clockify/api/v1/workspaces/{workspaceId}/clients
Content-Type: application/json

{
  "name": "Client Name",
  "address": "123 Main St",
  "note": "Client notes"
}
```

### List Tags
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/tags
```

### Create Tag
```bash
POST /clockify/api/v1/workspaces/{workspaceId}/tags
Content-Type: application/json

{
  "name": "urgent"
}
```

### List Tasks on Project
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/projects/{projectId}/tasks
```

### Create Task
```bash
POST /clockify/api/v1/workspaces/{workspaceId}/projects/{projectId}/tasks
Content-Type: application/json

{
  "name": "Task Name",
  "assigneeIds": ["user-id"],
  "estimate": "PT2H",
  "billable": true
}
```

### Get User's Time Entries
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/user/{userId}/time-entries
```

### Create Time Entry
```bash
POST /clockify/api/v1/workspaces/{workspaceId}/time-entries
Content-Type: application/json

{
  "start": "2026-02-13T09:00:00Z",
  "end": "2026-02-13T10:00:00Z",
  "description": "Working on task",
  "projectId": "project-id",
  "taskId": "task-id",
  "tagIds": ["tag-id"],
  "billable": true
}
```

### Get Time Entry
```bash
GET /clockify/api/v1/workspaces/{workspaceId}/time-entries/{timeEntryId}
```

### Update Time Entry
```bash
PUT /clockify/api/v1/workspaces/{workspaceId}/time-entries/{timeEntryId}
Content-Type: application/json

{
  "description": "Updated description",
  "end": "2026-02-13T11:00:00Z"
}
```

### Delete Time Entry
```bash
DELETE /clockify/api/v1/workspaces/{workspaceId}/time-entries/{timeEntryId}
```

### Stop Running Timer
```bash
PATCH /clockify/api/v1/workspaces/{workspaceId}/user/{userId}/time-entries
Content-Type: application/json

{
  "end": "2026-02-13T17:00:00Z"
}
```

## Notes

- All IDs are strings
- Timestamps must be in ISO 8601 format with UTC timezone (e.g., `2026-02-13T09:00:00Z`)
- Duration format uses ISO 8601 duration (e.g., `PT1H` for 1 hour, `PT30M` for 30 minutes)
- Cannot delete active projects or tasks - must archive them first
- Page-based pagination with `page` and `page-size` query parameters
- Response includes `Last-Page` header indicating if more pages exist
- Rate limit: 50 requests per second per workspace

## Resources

- [Clockify API Documentation](https://docs.clockify.me/)
- [Time Entry API](https://docs.clockify.me/#tag/Time-entry)
- [Project API](https://docs.clockify.me/#tag/Project)
- [Workspace API](https://docs.clockify.me/#tag/Workspace)
- [User API](https://docs.clockify.me/#tag/User)