---
title: "Update Tenant Integration Tools"
method: PUT
path: "/api/v1/tenant-integrations/{tenant_integration_id}/tools"
tags: ["tenant-integration-tools"]
---

# Update Tenant Integration Tools

`PUT /api/v1/tenant-integrations/{tenant_integration_id}/tools`

Replace the tenant-level deny-list and return the updated tool list.

No validation of names against discovery: a deny-list entry for an unknown
tool is a harmless no-op, and validating would couple this write to a live
provider API call.

Membership is resolved through ``next_disabled_tools`` so a full-state PUT
that enables one tool cannot persist a different tool as newly disabled
(stale client cache / index mix-up). Last-write-wins otherwise: the
writers are the tenant's admins on one settings page, and the response
always returns the authoritative post-write state (which the UI renders).

## Path parameters

- `tenant_integration_id` string, uuid, required

## Request body

- TenantIntegrationToolsUpdate — Full-state replacement of the tenant-level deny-list.
  - `disabled_tools` string[], required

## Response `200`

Successful Response

- TenantIntegrationToolRead[]
  - `name` string, required
  - `display_name` string, required
  - `description` string, required
  - `enabled` boolean, required

## Other responses

- `422` — Validation Error

## Changes

> 19 revisions in range; 1 not diffed.

- **2026-09-03** `d65b8fefae34` — 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status
- **2026-09-03** `fbb95eac3965` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/tenant-integrations/:tenant_integration_id/tools/put.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getanana/apis/cleon-api/revisions/34f2d9e81b0b?raw)
