---
title: "For a firm: Change a matter's fields (billing, admin)"
method: PATCH
path: "/v1/admin/tenants/{tenant}/matters/{id}"
tags: ["admin"]
---

# For a firm: Change a matter's fields (billing, admin)

`PATCH /v1/admin/tenants/{tenant}/matters/{id}`

## 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/admin/tenants/{tenant}/matters/{id}`
- Auth: HTTP bearer

The client is never changed. A temporary matter with entries on it cannot be deactivated: move the entries to the real matter first (409). `narrative_language` is an admin's to change (403 for billing), and not on a matter held by a connected practice system that supplies each matter's language, whose language is the system's (409); sending the value the matter already has changes nothing and is allowed. A matter the caller is not served by `GET /v1/matters` (a practice system that shows each person their own matters does not show it to them) is a 404, whatever their role.

Operator mount: an operator acting for the firm named in the path, as its oldest active admin, else its oldest active billing member; `X-Six-Minute-Acting-As` names them. 404 for no such firm, 409 `urn:six-minute:problem:no-acting-member` for one with neither. A patch naming `attribute_sets` alone is served for any firm; one that changes anything else (the name, the number, the description, `active`, `narrative_language` and the rest) is served for an internal tenant alone, and any other is 409 `urn:six-minute:problem:tenant-not-internal`, before the audit row and before any write.

## Path parameters

- `tenant` string, required
- `id` string, required

## Request body

- object
  - `client_id` string
  - `name` string
  - `code` string, nullable
  - `description` string, nullable
  - `billable` boolean
  - `external_ref` string, nullable
  - `active` boolean
  - `temporary` boolean
  - `parties` object[]
    - `name` string, required
    - `kind` 'counterparty' | 'counterparty_counsel' | 'co_party' | 'court' | 'other'
    - `email` string, nullable
    - `organisation` string, nullable
    - `role` string, nullable
    - `emails` string[]
    - `contacts` object[]
      - `name` string, required
      - `email` string, nullable
    - `reference` string, nullable
    - `external_refs` string[]
  - `domains` string[]
  - `folders` string[]
  - `keywords` string[]
  - `matter_type` string, nullable
  - `references` object[]
    - `kind` string
    - `value` string, required
  - `category` object, nullable
    - `code` string, nullable
    - `name` string, required
  - `main_category` string, nullable
  - `phase` string, nullable
  - `opened_at` string, date-time
  - `closed_at` string, date-time, nullable
  - `last_activity_at` string, date-time, nullable
  - `billing` object
    - `narrative_profile` string
  - `attribute_sets` object
  - `narrative_language` 'nl' | 'en' | 'de' | 'fr' | 'es' | 'it' | 'pt' | 'pl' | 'sv' | 'da' | 'en-GB' | 'pt-PT', nullable
  - `sync_source` 'manual' | 'legalsense' | 'urios' | 'import'

## Response `200`

The matter after the patch.

- object
  - `id` string, required
  - `client_id` string, required
  - `name` string, required
  - `code` string, nullable
  - `description` string, nullable
  - `billable` boolean
  - `external_ref` string, nullable
  - `active` boolean
  - `temporary` boolean
  - `parties` object[]
    - `name` string, required
    - `kind` 'counterparty' | 'counterparty_counsel' | 'co_party' | 'court' | 'other'
    - `email` string, nullable
    - `organisation` string, nullable
    - `role` string, nullable
    - `emails` string[]
    - `contacts` object[]
      - `name` string, required
      - `email` string, nullable
    - `reference` string, nullable
    - `external_refs` string[]
  - `domains` string[]
  - `folders` string[]
  - `keywords` string[]
  - `matter_type` string, nullable
  - `references` object[]
    - `kind` string
    - `value` string, required
  - `category` object, nullable
    - `code` string, nullable
    - `name` string, required
  - `main_category` string, nullable
  - `phase` string, nullable
  - `opened_at` string, date-time, required
  - `closed_at` string, date-time, nullable
  - `last_activity_at` string, date-time, nullable
  - `firm_internal` boolean
  - `billing` object
    - `narrative_profile` string
  - `attribute_sets` object
  - `attribute_required` object
  - `narrative_language` 'nl' | 'en' | 'de' | 'fr' | 'es' | 'it' | 'pt' | 'pl' | 'sv' | 'da' | 'en-GB' | 'pt-PT', nullable
  - `sync_source` 'manual' | 'legalsense' | 'urios' | 'import'
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## 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.
- `404`: No such row for this tenant.
- `409`: The id or the email already belongs to something else.
- `422`: The request is well-formed but cannot be carried out as it stands.
- `503`: A capability this service was not configured with, or a practice system that could not be reached; the `type` says which.

---

[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)
