---
title: "Add a timekeeper to a rate table"
method: POST
path: "/rate_table_timekeepers.json"
tags: ["Rate Table Timekeepers"]
---

# Add a timekeeper to a rate table

`POST /rate_table_timekeepers.json`

## Request

- Base URL: `https://app.clio.com/api/v4`
- URL: `https://app.clio.com/api/v4/rate_table_timekeepers.json`
- Auth: none declared

Adds a timekeeper to an active Rate Table as of `as_of_date`, with a blank rate in every category where the timekeeper has no rate on or after that date, so re-adding a timekeeper after a category is added fills in just that category. The timekeeper is an enabled firm User, or an ad hoc Group when rate table groups are turned on for the account; name it with `timekeeper[id]` and `timekeeper[type]`. Set the rates with the Rate Table Rates endpoint. Fails if the table has no categories, or if the timekeeper already has a rate in every category on or after `as_of_date`.

## Query parameters

- `fields` string

## Headers

- `X-API-VERSION` string

## Request body

- object
  - `data` object, required
    - `as_of_date` string, date: The date the timekeeper joins the Rate Table, in YYYY-MM-DD format. They get a blank rate in every category from this date. Can't be in the past. Default: today.
    - `rate_table` object, required
      - `id` integer, required: The unique identifier of the Rate Table. Required.
    - `timekeeper` object, required
      - `id` integer, required: The unique identifier for the User or Group to add. Required.
      - `type` 'User' | 'Group': Whether `timekeeper[id]` is a `User` or a `Group`. Default: `User`. A `Group` must be an unarchived ad hoc group, and is only accepted when rate table groups are turned on for the account.

## Response `201`

Created

- RateTableTimekeeperShow
  - `data` RateTableTimekeeper, required
    - `etag` string: ETag for the *RateTableTimekeeper*
    - `rate_table_id` integer: The unique identifier of the rate table the timekeeper was added to
    - `as_of_date` string, date: When adding a timekeeper, the date their blank rates start on the rate table. When listing timekeepers, the date the list is for
    - `type` 'User' | 'Group': Whether the timekeeper is a User or a Group, the same as `timekeeper.type`
    - `timekeeper` object: The user or ad hoc group: `id`, `etag`, `name`, and `type` (`User` or `Group`)
    - `rate_table` RateTableBase
      - `id` integer: Unique identifier for the *RateTable*
      - `etag` string: ETag for the *RateTable*
      - `name` string: The name of the rate table
      - `description` string: A detailed description of the rate table
      - `currency_id` integer: The ID of the currency the rate table's rates are denominated in
      - `status` string: The status of the rate table. Can be either "active" or "archived"
      - `created_at` string, date-time: The time the *RateTable* was created (as a ISO-8601 timestamp)
      - `updated_at` string, date-time: The time the *RateTable* was last updated (as a ISO-8601 timestamp)
    - `created_by_user` UserBase
      - `account_owner` boolean: Whether the *User* is the owner of the account
      - `clio_connect` boolean: Whether the *User* is a Clio Connect user
      - `court_rules_default_attendee` boolean: Whether the *User* is a default attendee for court rules events
      - `created_at` string, date-time: The time the *User* was created (as a ISO-8601 timestamp)
      - `default_calendar_id` integer: Default calendar id for *User*.
      - `email` string: The email of the *User*
      - `enabled` boolean: Whether the *User* is allowed to log in
      - `etag` string: ETag for the *User*
      - `first_name` string: The first name of the *User*
      - `id` integer: Unique identifier for the *User*
      - `initials` string: The initials of the *User*
      - `last_name` string: The last name of the *User*
      - `name` string: The full name of the *User*
      - `phone_number` string: The primary phone number for the *User*.
      - `rate` number, float: Default user activity rate for *User*.
      - `roles` string[]: An array of roles assigned to this *User*
      - `subscription_type` 'Attorney' | 'NonAttorney': The subscription type of the *User*
      - `time_zone` string: The selected time zone of the *User*
      - `updated_at` string, date-time: The time the *User* was last updated (as a ISO-8601 timestamp)
      - `locale` string: The locale of the *User*

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests

## Changes

- **2026-10-22** `1587091ed74d`: 3 breaking, 4 warning, 2 info
  - added the new required request property `data/timekeeper` (media type: application/json)
  - added the new required request property `data/timekeeper` (media type: application/x-www-form-urlencoded)
  - added the new required request property `data/timekeeper` (media type: multipart/form-data)
  - removed the request property `data/user` (media type: application/json)
  - …5 more
- **2026-10-10** `be032ea256b5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/clio/apis/clio-api-documentation/changes/rate_table_timekeepers.json/post.md)

---

[API](https://skmtc.dev/clio/apis/clio-api-documentation.md) - [All operations](https://skmtc.dev/clio/apis/clio-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/clio/apis/clio-api-documentation/revisions/73770595be52?raw)
