---
title: "Run Recognition"
method: POST
path: "/companies/{company_id}/gl/recognition/run"
tags: ["gl-modules"]
---

# Run Recognition

`POST /companies/{company_id}/gl/recognition/run`

## 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}/gl/recognition/run`
- Auth: none declared

Post every recognition installment due on/before ``as_of`` — accountant.

Reports what it could **not** post as well as what it did (ZCT-270): an
installment whose target GL period is missing or closed is left ``planned``
and named in ``blocked_periods``. The run never creates or reopens a period.

## Path parameters

- `company_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- GlRecognitionRunRequest
  - `as_of` string, date, nullable

## Response `200`

Successful Response

- GlRecognitionRunResult: What a recognition run posted **and what it could not post** (ZCT-270). ``posted`` alone made a run that served nothing indistinguishable from a run with nothing due, so both UIs toasted blanket success over zero postings and the MCP surface answered ``{"posted": 0}`` with no hint why.
  - `posted` integer, required
  - `blocked` integer
  - `blocked_periods` GlRunBlockedPeriod[]
    - `period` string, required
    - `reason` 'no_period' | 'period_closed' | 'year_closed' | 'account_missing' | 'posting_refused', required

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