---
title: "Update tool classifications"
method: PATCH
path: "/v2/organizations/{organization_id}/insights/tool_classifications"
tags: ["tool_classifications"]
---

# Update tool classifications

`PATCH /v2/organizations/{organization_id}/insights/tool_classifications`

## Request

- Base URL: `https://api.hubstaff.com`
- URL: `https://api.hubstaff.com/v2/organizations/{organization_id}/insights/tool_classifications`
- Auth: OAuth 2
  - Authorization code: `https://account.hubstaff.com/authorizations/new`
  - Token URL: `https://account.hubstaff.com/access_tokens` scopes: `hubstaff:read`, `hubstaff:write`
- TypeScript: <https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/docs/v2/organizations/:organization_id/insights/tool_classifications/patch.ts> (a function with typed inputs; its response is checked against the schema)

Batch updates productivity classifications and categories for up to 100 tools.

Each item must include id and tool_type. Provide productivity and/or category to update.
Use job_type to scope a productivity change to a specific role (see GET /organizations/:id/job_types).
category and job_type are mutually exclusive within an item: category applies globally, so it can
only be set when job_type is omitted.
Changes are applied atomically — if any item fails validation, no changes are saved.
On success, returns 204 No Content.

Note: productivity changes only affect future tool usage data, not historical records.

Requires Owner or Organization Manager role.
Requires the Insights add-on.

## Path parameters

- `organization_id` integer, required

## Request body

- PatchV2OrganizationsOrganizationIdInsightsToolClassifications: Update tool classifications
  - `tool_classifications` object[], required
    - `id` integer, required: Tool ID
    - `tool_type` 'application' | 'url', required: Tool type
    - `productivity` 'core' | 'non_core' | 'unproductive': Productivity classification to set
    - `job_type` string: Job type for productivity (case-insensitive). Omit to apply globally.
    - `category` string: Category name (case-insensitive). Null resets to default. See GET /organizations/:id/insights/tool_categories for valid values.

## Response `200`

204 No Content on success

- object
  - `tool_classification` ToolClassification: ToolClassification model
    - `id` integer, required: Tool ID (Application or URL site ID)
    - `tool_type` string, required: Tool type: application or url
    - `name` string, required: Tool display name
    - `productivity` string, required: Effective productivity: core, non_core, or unproductive
    - `job_type` string, required: Job type for this classification. Null = all.
    - `category` string, required: Category name. Defaults to the tool's empty category ('Uncategorized' for apps, 'Browsing' for URLs) when none set.

## Other responses

- `400`: Invalid parameters
- `401`: Unauthorized
- `403`: API access is only for organizations on an active plan
- `404`: Could not find record
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api.md) - [All operations](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/revisions/c6b90e4e4bdc?raw)
