---
title: "Let one action on this connection run without asking"
method: POST
path: "/v1/integrations/accounts/{account_id}/tool-overrides"
tags: ["integrations"]
---

# Let one action on this connection run without asking

`POST /v1/integrations/accounts/{account_id}/tool-overrides`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/integrations/accounts/{account_id}/tool-overrides`
- Auth: HTTP bearer

Record the CALLING member's consent to run one named provider action through this connection without an approval card. Strictly self-serve: it always applies to the caller, never to another member. A readable Critical action on this connection can be allowed here. The properties a member cannot change still refuse it: an audience-reaching action, a mandatory call, a connection Patricia owns, a tool row with no stable ref, and a live tier this process cannot rank. It only ever applies to a run a human asked for and is watching. A foreign/unknown or not-visible account id 404s, so it is never an existence oracle for another member's private connection.

## Path parameters

- `account_id` string, uuid, required

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- ToolOverrideCreateRequest: The confirm dialog's payload. ``tool_ref`` is REQUIRED but NULLABLE, matching the account-tools contract which exposes a transient ref-less row as ``tool_ref: null``. A plain required ``str`` would make JSON ``null`` fail Pydantic validation *before* the service and return a generic ``VALIDATION_ERROR`` instead of the typed ``no_tool_ref`` the acceptance matrix requires — and the refusal has to come AFTER the account-visibility fence, which only the service can do.
  - `tool_ref` string, nullable, required
  - `consent_token` string, required

## Response `200`

Successful Response

- ToolOverrideResponse: One consent row, in the shape a client may see. Deliberately NOT the ORM row: that carries both account generations and the execution fingerprint, which are internal bindings and would hand a client the ingredients of the consent token it is not supposed to be able to forge.
  - `id` string, uuid, required
  - `integration_account_id` string, uuid, nullable, required
  - `tool_ref` string, required
  - `granted_tier` string, required
  - `created_at` string, date-time, required
  - `audience_class` 'non_audience' | 'audience' | 'legacy' | 'task_non_audience' | 'task_audience', required: Which calls of one action a standing consent covers, named by the audience each call reaches. ``tools.contracts.call_audience_class`` reads every call as ``non_audience`` or ``audience``, from the call itself and before any consent is consulted. A ``tool_overrides`` row stores the class it covers, and the class is part of its key, so a non-audience consent never covers an audience-reaching call of the same action. The ``ck_tool_overrides_audience_class`` CHECK holds the stored values to this set.

## Other responses

- `400`: Refused because the caller has no personal settings to change. ``code`` is one of ``no_caller_actor``.
- `401`: Unauthorized
- `403`: Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)
- `404`: Not found
- `409`: Refused for a state the member can change. ``code`` is one of ``stale_tool_state``, ``tenant_master_disabled``, ``tool_disabled``.
- `422`: Refused for a property of the tool or the connection the member cannot change. ``code`` is one of ``audience_reaching``, ``managed_account``, ``mandatory_call``, ``no_tool_ref``, ``unreadable_live_tier``. ``VALIDATION_ERROR`` is the ordinary boundary refusal for a malformed body.

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
