---
title: "Change the firm's own settings: its interval, its narratives, Always on and the timesheet pet (admin)"
method: PATCH
path: "/v1/tenant/settings"
tags: ["tenant"]
---

# Change the firm's own settings: its interval, its narratives, Always on and the timesheet pet (admin)

`PATCH /v1/tenant/settings`

## Request

- Base URL: `https://api.sixminute.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sixminute.ai/v1/tenant/settings`
- Auth: HTTP bearer

A merge, per key at both levels: a patch naming only `narrative.language` keeps the stored length and guidance, and `narrative.max_chars: null` returns the firm to the house length. Every role reads the result on `GET /v1/me` as `tenant.settings`. `narrative.max_chars` may not exceed the connected practice system's ceiling, or 1023 without one: 422 on that path. A new `unit_minutes` applies to every recording started after the change. `capture.always_on: "enforced"` keeps capture running on every member's device whenever Sixminute is open; each device saves it off `GET /v1/me`, at its hourly refresh. Older Sixminute versions do not enforce it until they update. `timesheet_pet.on` turns the timesheet pet on or off for everyone in the firm; on needs a connected practice system (422 `timesheet_pet.no_practice_system` on that path). Each change from off to on sets `timesheet_pet.on_since` to the moment of the change, so no day before it is listed; it is the API's alone to write.

## Request body

- object
  - `unit_minutes` integer
  - `narrative` object
    - `max_chars` integer, nullable
    - `language` 'nl' | 'en' | 'de' | 'fr' | 'es' | 'it' | 'pt' | 'pl' | 'sv' | 'da' | 'en-GB' | 'pt-PT'
    - `guidance` string
  - `capture` object
    - `always_on` 'member_choice' | 'enforced'
  - `timesheet_pet` object
    - `on` boolean, required

## Response `200`

The firm's settings after the patch.

- object
  - `unit_minutes` integer
  - `narrative` object
    - `max_chars` integer, nullable
    - `language` 'nl' | 'en' | 'de' | 'fr' | 'es' | 'it' | 'pt' | 'pl' | 'sv' | 'da' | 'en-GB' | 'pt-PT', nullable
    - `guidance` string
    - `lowered_to_system` object, nullable
      - `kind` 'urios' | 'legalsense' | 'fake', required
      - `at` string, date-time, required
  - `capture` object
    - `always_on` 'member_choice' | 'enforced'
  - `timesheet_pet` object
    - `on` boolean
    - `on_since` string, date-time, nullable

## Other responses

- `400`: The body, query or path did not validate; `errors` lists the fields.
- `401`: No bearer token, or one that does not verify or has expired.
- `403`: The token verified but may not do this: no organisation, not provisioned, wrong role, or a device problem.
- `422`: The request is well-formed but cannot be carried out as it stands.

## Changes

- **2026-11-04** `605577eadc10`: 2 info
  - added the new optional request property `timesheet_pet`
  - added the optional property `timesheet_pet` to the response with the `200` status

[Operation history](https://skmtc.dev/sixminute/apis/sixminute-api/changes/v1/tenant/settings/patch.md)

---

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