---
title: "Get Close Todo"
method: GET
path: "/companies/{company_id}/closing/{scope}/{scope_id}"
tags: ["closing"]
---

# Get Close Todo

`GET /companies/{company_id}/closing/{scope}/{scope_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}/closing/{scope}/{scope_id}`
- Auth: none declared

What is left to do in one scope, in the order it has to be done.

``scope_id`` is the row id — the fiscal year, GL period, VAT period or payroll run —
except for ``payroll_year``, where it is the calendar year (``2025``), because a payroll
year is a span the runs live inside rather than a record anybody creates.

Each item carries what it means, why it matters, the screen that resolves it and the
operations that move it. Fix the data and the item is gone from the next read; nothing
has to be marked done.

## Path parameters

- `company_id` string, required
- `scope` 'vat_period' | 'gl_period' | 'fiscal_year_close' | 'fiscal_year_opening' | 'payroll_run' | 'payroll_year', required: What is being closed. Stable identifiers: they are path segments, MCP argument values and the SPA's route keys, so renaming one is a contract change.
- `scope_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- ScopeTodo: Everything left to do in one scope, most urgent first.
  - `scope` 'vat_period' | 'gl_period' | 'fiscal_year_close' | 'fiscal_year_opening' | 'payroll_run' | 'payroll_year', required: What is being closed. Stable identifiers: they are path segments, MCP argument values and the SPA's route keys, so renaming one is a contract change.
  - `scope_id` string, required
  - `label` string, required
  - `date_from` string, date, required
  - `date_to` string, date, required
  - `lifecycle_status` string, required
  - `verdict` 'clean' | 'attention' | 'blocked', required
  - `steps_done` integer, required
  - `steps_total` integer, required
  - `open_blockers` integer, required
  - `open_required` integer, required
  - `open_advisory` integer, required
  - `steps` Step[]
    - `key` string, required
    - `title` string, required
    - `done` boolean, required
    - `items` TodoItem[]
      - `code` string, required
      - `level` 'blocker' | 'required' | 'advisory', required: What an open item costs. The three-level shape is the one ``payroll.filings.completeness`` already uses (``DeclarationDefect.blocks`` / ``ADVISORY_DEFECTS``): a gate that permanently strands a lawful close is worse than the defect it names.
      - `count` integer, nullable
      - `amount` string, nullable
      - `params` object
      - `title` string, required
      - `detail` string
      - `fix` Fix, required: How an item is resolved — the same vocabulary the statement review uses (``accounting.review.findings.Remediation``), plus the two things a guided path needs that a finding never had: the operations to call, and what actually clears the row.
        - `what_it_means` string, required
        - `why_it_matters` string, required
        - `steps` string[]
        - `route` string, nullable
        - `operations` OperationRef[]
          - `name` string, required
          - `arguments` object
        - `who_can_fix` 'member' | 'accountant' | 'admin'
        - `fix_with_ai` boolean
        - `resolved_by` string, required
  - `next_action` NextAction, required: The one thing to do next — the answer to "what do I do?". Either an item to fix (the first open one, in process order) or, once nothing is open, the close action itself.
    - `kind` string, required
    - `title` string, required
    - `detail` string
    - `code` string, nullable
    - `route` string, nullable
    - `operations` OperationRef[]
      - `name` string, required
      - `arguments` object
    - `is_close_action` boolean
  - `predecessors` ScopeRef[]
    - `scope` 'vat_period' | 'gl_period' | 'fiscal_year_close' | 'fiscal_year_opening' | 'payroll_run' | 'payroll_year', required: What is being closed. Stable identifiers: they are path segments, MCP argument values and the SPA's route keys, so renaming one is a contract change.
    - `scope_id` string, required
    - `label` string, required
    - `lifecycle_status` string, required
    - `verdict` 'clean' | 'attention' | 'blocked'
  - `contains` ScopeRef[]
    - `scope` 'vat_period' | 'gl_period' | 'fiscal_year_close' | 'fiscal_year_opening' | 'payroll_run' | 'payroll_year', required: What is being closed. Stable identifiers: they are path segments, MCP argument values and the SPA's route keys, so renaming one is a contract change.
    - `scope_id` string, required
    - `label` string, required
    - `lifecycle_status` string, required
    - `verdict` 'clean' | 'attention' | 'blocked'
  - `degraded` string[]

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