# Budgets and Time 

** Retrieve and update budgeted estimates for a Work Item, and look up logged time entries — covers what Karbon calls Estimate Summaries and Individual Time Entries. **
---

If you're looking for a **budget** on a Work Item, that's an Estimate Summary. If you're looking for logged **time** (hours worked), that's an Individual Time Entry. Neither is named quite what you'd expect, so this guide maps the everyday terms to the actual endpoints.

## Budgets (Estimate Summaries)

A Work Item's budget is made up of one Estimate Summary per user/task combination — the estimated time or cost for that person to complete that task type.

List every Estimate Summary on a Work Item:

```http
GET https://api.karbonhq.com/v3/EstimateSummaries/{WorkItemKey}
Authorization: Bearer {token}
AccessKey: {key}
```

```json
{
  "value": [
    {
      "EstimateSummaryKey": "160F79F6-E650-40C3-8BD9-F70C287B7476-0",
      "UserKey": "RXq4mB32PXg",
      "RoleName": "Accountant",
      "TaskTypeName": "Admin",
      "EstimateMinutes": 15,
      "HourlyRate": 150,
      "ActualMinutes": 14,
      "EstimateAmount": 37.5
    }
  ]
}
```

To read or change a single estimate, use its `EstimateSummaryKey` against the nested endpoint:

```http
GET   https://api.karbonhq.com/v3/WorkItems/{WorkItemKey}/EstimateSummaries/{EstimateSummaryKey}
PATCH https://api.karbonhq.com/v3/WorkItems/{WorkItemKey}/EstimateSummaries/{EstimateSummaryKey}
```

`PATCH` accepts `EstimateMinutes`, `EstimateAmount`, and `HourlyRate` — all optional, but a firm's Time and Budget setting decides whether estimates are tracked by time or by amount, so only the matching field is accepted, and `EstimateMinutes`/`EstimateAmount` can't be supplied together:

```json
{
  "EstimateAmount": 250.0
}
```

A successful `PATCH` returns `204 No Content`. Changing `HourlyRate` can reissue the `EstimateSummaryKey` — always follow the `OData-EntityId` response header for the estimate's new location rather than reusing the key you sent.

**An `EstimateSummaryKey` starting with `0-`** represents time logged against a task with no estimate assigned, not a real budget line — it's GET-only. Assign an estimate to that task in Karbon before it becomes patchable.

## Time tracking (Individual Time Entries)

Logged time — what a user actually worked, as opposed to what was budgeted — lives at `/v3/IndividualTimeEntries`, one record per user/day/task:

```http
GET https://api.karbonhq.com/v3/IndividualTimeEntries?$filter=WorkItemKey eq '3cC1vkWmhGb1'&$orderby=Date desc
Authorization: Bearer {token}
AccessKey: {key}
```

```json
{
  "value": [
    {
      "IndividualTimeEntryKey": "a1b2c3d4e5f67890abcdef1234567890",
      "TimesheetKey": "3TxlnQ4Pd8zJ",
      "WorkItemKey": "3cC1vkWmhGb1",
      "UserKey": "2xfLMq5PFqb7",
      "TaskTypeName": "Tax Return",
      "Date": "2024-07-04T00:00:00Z",
      "Minutes": 90,
      "HourlyRate": 250,
      "TotalCost": 375,
      "BilledStatus": "Unbilled"
    }
  ]
}
```

`$filter` supports `Date`, `TimesheetKey`, `EntityKey`, `WorkItemKey`, `ClientKey`, `UserKey`, `RoleName`, and `TaskTypeName`. `$orderby` only sorts by `Date` — `Date` (default) or `Date desc`. A single entry can also be fetched directly with `GET /v3/IndividualTimeEntries/{IndividualTimeEntryKey}`.

> **Note:** `GET /v3/Timesheets` also exists but is **deprecated**. It returns time aggregated to the tenant's timesheet period (weekly by default), not a per-day breakdown. Use `IndividualTimeEntries` instead for anything that needs entry-level detail.

## Quick reference

| Asking for…                       | Use                                                              |
| ---------------------------------- | ----------------------------------------------------------------- |
| A Work Item's budget/estimate      | `GET /v3/EstimateSummaries/{WorkItemKey}`                          |
| Updating one budget line           | `PATCH /v3/WorkItems/{WorkItemKey}/EstimateSummaries/{EstimateSummaryKey}` |
| Logged time / hours worked         | `GET /v3/IndividualTimeEntries`                                    |
| A single logged time entry         | `GET /v3/IndividualTimeEntries/{IndividualTimeEntryKey}`           |
| ~~Aggregated weekly timesheets~~   | `GET /v3/Timesheets` — deprecated, prefer `IndividualTimeEntries` |
