---
title: "Update Company"
method: PUT
path: "/companies/{company_id}"
tags: ["companies"]
---

# Update Company

`PUT /companies/{company_id}`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/companies/{company_id}`
- Auth: none declared

Partial update of tenant fields (accountant). Unset fields are untouched.

**409** if the company's PAYER already has another company by that name. The
pre-check is narrowed by Ring 2 for a non-admin owner, so this is routinely raised
by `uq_company_payer_lower_name` for a sibling the caller cannot see; the service
remaps it, so it is an ordinary refusal rather than an unexpected error.

## Path parameters

- `company_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- CompanyUpdate: ``PUT /companies/<id>`` body (admin) — partial update of tenant fields. Fields left unset are not modified (don't reset-to-default; api-contract).
  - `company_name` string, nullable
  - `active` boolean, nullable
  - `is_demo` boolean, nullable
  - `ingest_lookback_months` 3 | 6 | 12, nullable
  - `language` 'de' | 'en' | 'fr' | 'it', nullable
  - `industry` string, nullable

## Response `200`

Successful Response

- CompanyResponse: ``POST/PUT /companies/<id>`` → ``{"company": ...}`` (tenant fields only). Note: membership management (``user_company``) is NOT a company sub-resource in the api-contract — there are no member/role routes. Membership is edited via the users domain (the ``companies`` array or ``memberships`` list on ``POST/PUT /users/<id>``, A2); each membership carries a ``role`` (owner/accountant/member — doc/architecture.md §"Authentication & tenancy"; global ``User.is_admin`` bypasses role gates). See the companies router docstring + the agent report for this judgment call.
  - `company` CompanyOut, required: Serialized company tenant row + derived integration-presence flags.
    - `id` string, required
    - `company_name` string, required
    - `active` boolean, required
    - `is_demo` boolean
    - `ingest_lookback_months` 3 | 6 | 12, required
    - `language` 'de' | 'en' | 'fr' | 'it', required
    - `industry` string, nullable
    - `has_email` boolean
    - `has_epost` boolean
    - `has_bexio` boolean
    - `has_abacus` boolean
    - `has_storage` boolean
    - `has_accounting_settings` boolean

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zeno-works/apis/zeno-api.md) · [All operations](https://skmtc.dev/zeno-works/apis/zeno-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zeno-works/apis/zeno-api/revisions/1eb93dde146c?raw)
