# Payroll · DameDoklad API

> Operations in the Payroll group.

Source: https://damedoklad.cz/en/docs/api-reference/payroll/

# Payroll

Operations in the Payroll group.

## Statutory employer liability insurance of a year (vyhláška 125/1993 Sb.), by quarter: what is raised, what would be raised, and why not yet. The decree has no advances and no annual settlement: each quarter stands on the previous quarter's bases

GET `/v1/payroll/accident-insurance`

Statutory employer liability insurance of a year (vyhláška 125/1993 Sb.), by quarter: what is raised, what would be raised, and why not yet. The decree has no advances and no annual settlement: each quarter stands on the previous quarter's bases

MCP tool: `get-payroll-accident-insurance`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`year` integer required

`insurer` null | string required

`okec` null | string required

`ratePermille` null | number required

`quarters` object\[\] required

`quarter` integer | null required

`premium` any required

Null in every recorded response.

`preview` null | object required

`year` integer required

`quarter` integer | null required

`basis` string required

`baseHaler` integer | null required

`ratePermille` number required

`amountHaler` integer | null required

`minimumApplied` boolean required

`dueDate` null | string required date

`problems` string\[\] required

`totalHaler` integer | null required

```bash
curl https://api.damedoklad.cz/v1/payroll/accident-insurance \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/accident-insurance', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/accident-insurance",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Raise a quarter's premium as an Ostatní závazek to the insurer: MD 548 / D 325 in double entry, an expense when paid in the cash book. Goes on a payment order like any other payable. A company that moved here mid-year states the previous quarter's base

POST `/v1/payroll/accident-insurance`

Raise a quarter's premium as an Ostatní závazek to the insurer: MD 548 / D 325 in double entry, an expense when paid in the cash book. Goes on a payment order like any other payable. A company that moved here mid-year states the previous quarter's base

MCP tool: `create-payroll-accident-premium`

### Request body

`year` integer required min 2000 max 2100

`quarter` integer required min 1 max 4

`baseHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`year` integer required

`quarter` integer required

`insurer` string required

`basis` string required

`baseHaler` integer required

`ratePermille` number required

`amountHaler` integer required

`dueDate` string required date

`documentId` string required

`documentNumber` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/accident-insurance \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "year": 2026,
  "quarter": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/accident-insurance', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "year": 2026,
    "quarter": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/accident-insurance",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "quarter": 1
    },
)
data = response.json()
```

## Overview of a year's premiums as PDF. An employer must be able to prove what was paid and how it was worked out (§ 12 odst. 7 vyhlášky 125/1993 Sb.)

GET `/v1/payroll/accident-insurance.pdf`

Overview of a year's premiums as PDF. An employer must be able to prove what was paid and how it was worked out (§ 12 odst. 7 vyhlášky 125/1993 Sb.)

MCP tool: `get-payroll-accident-insurance-pdf`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/accident-insurance.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/accident-insurance.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/accident-insurance.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Withdraw a raised premium, so a wrong quarter can be raised again: cancels its Ostatní závazek, which must not be paid

POST `/v1/payroll/accident-insurance/{id}/cancel`

Withdraw a raised premium, so a wrong quarter can be raised again: cancels its Ostatní závazek, which must not be paid

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `cancel-payroll-accident-premium`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/accident-insurance/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/cancel \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/accident-insurance/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/cancel', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/accident-insurance/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/cancel",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Figures for the annual tax settlement (Vyúčtování daně) by month, from locked runs

GET `/v1/payroll/annual/tax`

Figures for the annual tax settlement (Vyúčtování daně) by month, from locked runs

MCP tool: `get-payroll-annual-tax`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`year` integer required

`months` object\[\] required

`runId` null | string required

`month` integer | null required

`employeeCount` integer required

`taxableHaler` integer required

`advanceHaler` integer required

`bonusHaler` integer required

`advancePayableHaler` integer required

`withholdingTaxHaler` integer required

```bash
curl https://api.damedoklad.cz/v1/payroll/annual/tax \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/annual/tax",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Working paper for the annual tax settlement as PDF. The EPO file is \`tax.xml\`

GET `/v1/payroll/annual/tax.pdf`

Working paper for the annual tax settlement as PDF. The EPO file is \`tax.xml\`

MCP tool: `get-payroll-annual-tax-pdf`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/annual/tax.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/annual/tax.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Vyúčtování daně z příjmů ze závislé činnosti as EPO XML (DPZVD6 09.03.01) for a whole year, with Přílohy 1 to 4. Valid against the official XSD; the portal runs further checks. Refused from 2027, when the Vyúčtování is abolished. A dodatečné one is a separate operation

GET `/v1/payroll/annual/tax.xml`

Vyúčtování daně z příjmů ze závislé činnosti as EPO XML (DPZVD6 09.03.01) for a whole year, with Přílohy 1 to 4. Valid against the official XSD; the portal runs further checks. Refused from 2027, when the Vyúčtování is abolished. A dodatečné one is a separate operation

MCP tool: `get-payroll-annual-tax-xml`

### Query parameters

`year` integer required min 2000 max 2100

`type` "B" | "O"

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/annual/tax.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/annual/tax.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Corrections of advances, tax, and bonuses under § 38i ZDP that go on Příloha 3 and 4 of the Vyúčtování

GET `/v1/payroll/annual/tax/corrections`

Corrections of advances, tax, and bonuses under § 38i ZDP that go on Příloha 3 and 4 of the Vyúčtování

MCP tool: `list-payroll-tax-corrections`

### Query parameters

`year` integer min 2000 max 2100

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "payroll\_tax\_correction" required

`id` string required

`employeeId` null | string required

`subject` string required

`wrongYear` integer required

`wrongMonth` integer | null required

`dueDate` null | string required date

`correctedYear` integer required

`correctedMonth` integer required

`settledOn` null | string required date

`bonusRequestedOn` string | null required

`amountHaler` integer required

`note` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/annual/tax/corrections \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/corrections', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/corrections",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record a correction under § 38i ZDP. A returned amount is negative, a debt positive, as the annex states it. It does not change a locked run or pay anything

POST `/v1/payroll/annual/tax/corrections`

Record a correction under § 38i ZDP. A returned amount is negative, a debt positive, as the annex states it. It does not change a locked run or pay anything

MCP tool: `create-payroll-tax-correction`

### Request body

`employeeId` string | null

ID of the employee.

`subject` "advance" | "tax" | "monthly\_bonus" | "settlement\_bonus" required

`wrongYear` integer required min 2000 max 2100

`wrongMonth` integer | null

`dueDate` string | null

Date as YYYY-MM-DD.

`correctedYear` integer required min 2000 max 2100

`correctedMonth` integer required min 1 max 12

`settledOn` string | null

Date as YYYY-MM-DD.

`bonusRequestedOn` string | null

Date as YYYY-MM-DD.

`amountHaler` integer required min -9007199254740991 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`note` string | null

### Response · 201

`id` string required

`employeeId` null | string required

`subject` string required

`wrongYear` integer required

`wrongMonth` integer | null required

`dueDate` null | string required date

`correctedYear` integer required

`correctedMonth` integer required

`settledOn` null | string required date

`bonusRequestedOn` string | null required

`amountHaler` integer required

`note` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/annual/tax/corrections \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "subject": "advance",
  "wrongYear": 2026,
  "correctedYear": 2026,
  "correctedMonth": 1,
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/corrections', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "subject": "advance",
    "wrongYear": 2026,
    "correctedYear": 2026,
    "correctedMonth": 1,
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/corrections",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "subject": "advance",
        "wrongYear": 2026,
        "correctedYear": 2026,
        "correctedMonth": 1,
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Change a recorded correction under § 38i ZDP

PATCH `/v1/payroll/annual/tax/corrections/{id}`

Change a recorded correction under § 38i ZDP

MCP tool: `update-payroll-tax-correction`

### Path parameters

`id` string required

### Request body

`employeeId` string | null

ID of the employee.

`subject` "advance" | "tax" | "monthly\_bonus" | "settlement\_bonus"

`wrongYear` integer min 2000 max 2100

`wrongMonth` integer | null

`dueDate` string | null

Date as YYYY-MM-DD.

`correctedYear` integer min 2000 max 2100

`correctedMonth` integer min 1 max 12

`settledOn` string | null

Date as YYYY-MM-DD.

`bonusRequestedOn` string | null

Date as YYYY-MM-DD.

`amountHaler` integer min -9007199254740991 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`note` string | null

### Response · 200

`id` string required

`employeeId` null | string required

`subject` string required

`wrongYear` integer required

`wrongMonth` integer | null required

`dueDate` null | string required date

`correctedYear` integer required

`correctedMonth` integer required

`settledOn` null | string required date

`bonusRequestedOn` string | null required

`amountHaler` integer required

`note` null | string required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/annual/tax/corrections/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "subject": "advance",
  "wrongYear": 2026
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/corrections/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "subject": "advance",
    "wrongYear": 2026
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/corrections/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "subject": "advance",
        "wrongYear": 2026
    },
)
data = response.json()
```

## Delete a recorded correction under § 38i ZDP

DELETE `/v1/payroll/annual/tax/corrections/{id}`

Delete a recorded correction under § 38i ZDP

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-tax-correction`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/annual/tax/corrections/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/corrections/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/corrections/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Recorded filings of the Vyúčtování for a year, with what each of them said

GET `/v1/payroll/annual/tax/filed`

Recorded filings of the Vyúčtování for a year, with what each of them said

MCP tool: `list-payroll-annual-tax-filings`

### Query parameters

`year` integer required min 2000 max 2100

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "payroll\_annual\_tax\_filing" required

`id` string required

`year` integer required

`type` string required

`submittedAt` null | string required date-time

`note` string | null required

`column9` integer\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/annual/tax/filed \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/filed', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/filed",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record that a Vyúčtování was filed and keep what it said, so a dodatečné one can be compared to it. DameDoklad does not submit it for you

POST `/v1/payroll/annual/tax/filed`

Record that a Vyúčtování was filed and keep what it said, so a dodatečné one can be compared to it. DameDoklad does not submit it for you

MCP tool: `record-payroll-annual-tax-filing`

### Request body

`year` integer required min 2000 max 2100

`type` "B" | "O" | "D" | "E"

`filedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`note` string | null

### Response · 201

`id` string required

`year` integer required

`type` string required

`submittedAt` null | string required date-time

`note` string | null required

`column9` integer\[\] required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/annual/tax/filed \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "year": 2026,
  "filedOn": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/filed', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "year": 2026,
    "filedOn": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/filed",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "filedOn": "2026-10-30"
    },
)
data = response.json()
```

## Dodatečné or dodatečné opravné Vyúčtování (§ 141 daňového řádu) as EPO XML: all months in full, sloupec 10 as the difference against what was filed, and the reasons. Needs a recorded filing of that year or the filed sloupec 9 by month

POST `/v1/payroll/annual/tax/supplementary.xml`

Dodatečné or dodatečné opravné Vyúčtování (§ 141 daňového řádu) as EPO XML: all months in full, sloupec 10 as the difference against what was filed, and the reasons. Needs a recorded filing of that year or the filed sloupec 9 by month

MCP tool: `create-payroll-supplementary-tax-xml`

### Request body

`year` integer required min 2000 max 2100

`type` "D" | "E"

`discoveredOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`reasons` string required max 5000 chars

`filedColumn9` integer\[\]

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/annual/tax/supplementary.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "year": 2026,
  "discoveredOn": "2026-10-30",
  "reasons": "string"
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/tax/supplementary.xml', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "year": 2026,
    "discoveredOn": "2026-10-30",
    "reasons": "string"
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/annual/tax/supplementary.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "discoveredOn": "2026-10-30",
        "reasons": "string"
    },
)
content = response.content
```

## Vyúčtování daně vybírané srážkou as EPO XML (DPSVD2 09.04.01) for income of natural persons in a whole year. Valid against the official XSD; the portal runs further checks

GET `/v1/payroll/annual/withholding.xml`

Vyúčtování daně vybírané srážkou as EPO XML (DPSVD2 09.04.01) for income of natural persons in a whole year. Valid against the official XSD; the portal runs further checks

MCP tool: `get-payroll-annual-withholding-xml`

### Query parameters

`year` integer required min 2000 max 2100

`type` "B" | "O"

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/annual/withholding.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/annual/withholding.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/annual/withholding.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Get the attendance grid of a month: calendar with holidays and one row per contract, with hours and remaining vacation

GET `/v1/payroll/attendance`

Get the attendance grid of a month: calendar with holidays and one row per contract, with hours and remaining vacation

MCP tool: `get-payroll-attendance`

### Query parameters

`year` integer required min 2000 max 2100

`month` integer required min 1 max 12

### Response · 200

`year` integer required

`month` integer | null required

`locked` boolean required

`fundDays` integer required

`calendar` object\[\] required

`day` integer required

`weekday` integer required

`isWeekend` boolean required

`holiday` null | string required

`rows` object\[\] required

`contractId` null | string required

`allocationMethod` string required

`employeeId` null | string required

`employeeName` string required

`type` string required

`position` null | string required

`wageType` string required

`scheduled` boolean required

`dailyMilli` integer required

`startDate` string required date

`endDate` string | null required

`days` object required

`workedHoursMilli` integer required

`extraShifts` integer required

`overtimeMilli` integer required

`nightMilli` integer required

`weekendMilli` integer required

`holidayWorkedMilli` integer required

`difficultMilli` integer required

`bonusHaler` integer required

`otherTaxableHaler` integer required

`otherExemptHaler` integer required

`allocation` any\[\] required

`note` string | null required

`summary` null | object required

`from` string required date

`to` string required date

`active` boolean required

`employedDays` integer required

`calendarDays` integer required

`fundFullMilli` integer required

`fundEmployedMilli` integer required

`workedMilli` integer required

`weekendWorkedMilli` integer required

`holidayWorkedMilli` integer required

`holidayMilli` integer required

`vacationMilli` integer required

`sickPaidMilli` integer required

`sickUnpaidMilli` integer required

`ocrMilli` integer required

`paidLeaveMilli` integer required

`unpaidLeaveMilli` integer required

`absentMilli` integer required

`obstacleMilli` integer required

`absenceInFundMilli` integer required

`sickDays` integer required

`ocrDays` integer required

`healthExcludedDays` integer required

`workedDays` integer required

`shifts` integer required

`sickStreakAtEnd` integer required

`vacationEntitlementMilli` integer required

`vacationUsedMilli` integer required

`earlierMonths` any\[\]

`tipsHaler` integer

`severanceHaler` integer

`damagesHaler` integer

`tipsExemptHaler` integer | null

```bash
curl https://api.damedoklad.cz/v1/payroll/attendance \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/attendance', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/attendance",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Save a contract's attendance for a month: day codes (vacation, sick, ocr, paid\_leave, unpaid\_leave, ...), overtime, premiums, bonus

PUT `/v1/payroll/attendance/{contractId}/{year}/{month}`

Save a contract's attendance for a month: day codes (vacation, sick, ocr, paid\_leave, unpaid\_leave, ...), overtime, premiums, bonus

MCP tool: `save-payroll-attendance`

### Path parameters

`contractId` string required

ID of the contract. Find it with list-contracts.

`year` string required

`month` string required

### Request body

`days` object

`workedHoursMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`extraShifts` integer min 0 max 62

`overtimeMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`nightMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`weekendMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`holidayWorkedMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`difficultMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`bonusHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`otherTaxableHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`otherExemptHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`severanceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`damagesHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`tipsHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`tipsExemptHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`earlierMonths` object\[\]

`month` integer required min 1 max 11

`taxableHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`allocation` object\[\]

`centerId` string | null

ID of the center.

`activityId` string | null

ID of the activity. Find it with list-activity.

`projectId` string | null

ID of the project.

`hoursMilli` integer required min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`note` string | null

### Response · 200

`id` string required

`contractId` string required

`year` integer required

`month` integer required

`days` object required

`workedHoursMilli` integer required

`extraShifts` integer required

`overtimeMilli` integer required

`nightMilli` integer required

`weekendMilli` integer required

`holidayWorkedMilli` integer required

`difficultMilli` integer required

`bonusHaler` integer required

`otherTaxableHaler` integer required

`otherExemptHaler` integer required

`allocation` object\[\] required

`centerId` string | null required

`activityId` null | string required

`projectId` string | null required

`hoursMilli` integer required

`note` string | null required

`summary` null | object required

`from` string required date

`to` string required date

`active` boolean required

`employedDays` integer required

`calendarDays` integer required

`fundFullMilli` integer required

`fundEmployedMilli` integer required

`workedMilli` integer required

`weekendWorkedMilli` integer required

`holidayWorkedMilli` integer required

`holidayMilli` integer required

`vacationMilli` integer required

`sickPaidMilli` integer required

`sickUnpaidMilli` integer required

`ocrMilli` integer required

`paidLeaveMilli` integer required

`unpaidLeaveMilli` integer required

`absentMilli` integer required

`obstacleMilli` integer required

`absenceInFundMilli` integer required

`sickDays` integer required

`ocrDays` integer required

`healthExcludedDays` integer required

`workedDays` integer required

`shifts` integer required

`sickStreakAtEnd` integer required

`earlierMonths` object\[\]

`month` integer required

`taxableHaler` integer required

`tipsHaler` integer

`severanceHaler` integer

`damagesHaler` integer

`tipsExemptHaler` integer | null

```bash
curl -X PUT https://api.damedoklad.cz/v1/payroll/attendance/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "days": {},
  "workedHoursMilli": 1000,
  "extraShifts": 0
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/attendance/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "days": {},
    "workedHoursMilli": 1000,
    "extraShifts": 0
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/payroll/attendance/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "days": {},
        "workedHoursMilli": 1000,
        "extraShifts": 0
    },
)
data = response.json()
```

## List requests for a tax bonus paid from own funds

GET `/v1/payroll/bonus-requests`

List requests for a tax bonus paid from own funds

MCP tool: `list-payroll-bonus-requests`

### Query parameters

`year` integer required min 2000 max 2100

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

### Response · 200

`data` any\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/bonus-requests \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/bonus-requests', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/bonus-requests",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record a request for a tax bonus paid from own funds. The amount then stops counting against later months' advances. Refused once the next month has already taken it off. You file the XML yourself

POST `/v1/payroll/bonus-requests`

Record a request for a tax bonus paid from own funds. The amount then stops counting against later months' advances. Refused once the next month has already taken it off. You file the XML yourself

MCP tool: `create-payroll-bonus-request`

### Request body

`kind` "monthly" | "settlement" required

`type` "regular" | "additional"

`year` integer required min 2000 max 2100

`month` integer min 1 max 12

`requestedHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`filedOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`kind` string required

`type` string required

`year` integer required

`month` integer | null required

`totalHaler` integer required

`fromAdvancesHaler` integer required

`ownFundsHaler` integer required

`requestedHaler` integer required

`paidOn` null | string required date

`filedOn` string required date

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/bonus-requests \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "monthly",
  "year": 2026
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/bonus-requests', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "monthly",
    "year": 2026
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/bonus-requests",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "monthly",
        "year": 2026
    },
)
data = response.json()
```

## Remove a recorded request, so the amount counts against later advances again

DELETE `/v1/payroll/bonus-requests/{id}`

Remove a recorded request, so the amount counts against later advances again

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-bonus-request`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The request as a PDF working paper by the lines of forms 25 5241 and 25 5246. Not the printed form

GET `/v1/payroll/bonus-requests/{id}/request.pdf`

The request as a PDF working paper by the lines of forms 25 5241 and 25 5246. Not the printed form

MCP tool: `get-payroll-bonus-request-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/request.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/request.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/request.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## The request as an EPO file: DPZMB1 for a month, DPZDB1 for a settlement. Valid against the published XSD. With keep=true the money stays for tax due (line d), otherwise it comes back to the company's default bank account. You file it: nothing goes to the portal from here

GET `/v1/payroll/bonus-requests/{id}/request.xml`

The request as an EPO file: DPZMB1 for a month, DPZDB1 for a settlement. Valid against the published XSD. With keep=true the money stays for tax due (line d), otherwise it comes back to the company's default bank account. You file it: nothing goes to the portal from here

MCP tool: `get-payroll-bonus-request-xml`

### Path parameters

`id` string required

### Query parameters

`keep` "true" | "false"

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/request.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/request.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/bonus-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/request.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## What a request for a tax bonus paid from own funds would say: for a month (§ 35d odst. 5 ZDP) or a settlement's doplatek (§ 35d odst. 9). Without a request the app takes the amount off later months' advances, until December

GET `/v1/payroll/bonus-requests/preview`

What a request for a tax bonus paid from own funds would say: for a month (§ 35d odst. 5 ZDP) or a settlement's doplatek (§ 35d odst. 9). Without a request the app takes the amount off later months' advances, until December

MCP tool: `get-payroll-bonus-request-preview`

### Query parameters

`kind` "monthly" | "settlement" required

`year` integer required min 2000 max 2100

`month` integer min 1 max 12

### Response · 200

`kind` string required

`year` integer required

`month` integer | null required

`totalHaler` integer | null required

`fromAdvancesHaler` integer required

`ownFundsHaler` integer required

`paidOn` null | string required date

`problems` any\[\] required

```bash
curl https://api.damedoklad.cz/v1/payroll/bonus-requests/preview \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/bonus-requests/preview', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/bonus-requests/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Withdraw the newest amendment of a contract and put back what it changed. Refused when a locked run has used it or a later amendment stands on it

DELETE `/v1/payroll/contract-amendments/{id}`

Withdraw the newest amendment of a contract and put back what it changed. Refused when a locked run has used it or a later amendment stands on it

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-contract-amendment`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/contract-amendments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contract-amendments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/contract-amendments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## A recorded amendment as a PDF in Czech, with the values it replaced

GET `/v1/payroll/contract-amendments/{id}/amendment.pdf`

A recorded amendment as a PDF in Czech, with the values it replaced

MCP tool: `get-payroll-contract-amendment-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contract-amendments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendment.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contract-amendments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendment.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contract-amendments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendment.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## List employment contracts (HPP, DPČ, DPP). One person can hold several at once

GET `/v1/payroll/contracts`

List employment contracts (HPP, DPČ, DPP). One person can hold several at once

MCP tool: `list-payroll-contracts`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`employeeId` string

ID of the employee.

`active` "true" | "false"

### Response · 200

`data` object\[\] required

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create an employment contract: type, dates, wage, work time fund, vacation entitlement

POST `/v1/payroll/contracts`

Create an employment contract: type, dates, wage, work time fund, vacation entitlement

MCP tool: `create-payroll-contract`

### Request body

`employeeId` string required

ID of the employee.

`type` "hpp" | "dpc" | "dpp" required

`position` string | null

`qualification` string | null

`exposureNote` string | null

`signedOn` string | null

Date as YYYY-MM-DD.

`startDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string | null

Date as YYYY-MM-DD.

`endReason` string | null

`wageType` "monthly" | "hourly"

`baseWageHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`hourlyRateHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`weeklyHoursMilli` integer min 0 max 168000

Integer thousandths: 1500 means 1.5.

`irregularSchedule` boolean

`vacationHoursMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`smallScope` boolean | null

`averageHourlyHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`mealAllowancePerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`mealVoucherEmployerPerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`mealVoucherEmployeePerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`centerId` string | null

ID of the center.

`activityId` string | null

ID of the activity. Find it with list-activity.

`projectId` string | null

ID of the project.

`idPpv` string | null

`iscoCode` string | null

`employmentStatusCode` string

`workModeCode` "1" | "2" | "3" | "4"

`workCity` string | null

`workMunicipalityCode` string | null

`registeredAt` string | null

`deregisteredAt` string | null

`deregistration` object | null

`noDataReason` "2" | "3" | null

`employmentKind` "1" | "2"

`endReasonCode` integer min 1 max 15

`averageNetMonthlyHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`severanceDue` boolean

`severancePaidInFull` boolean

`severanceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`replacementHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`pensionFrom` string | null

Date as YYYY-MM-DD.

`pensionTo` string | null

Date as YYYY-MM-DD.

`note` string | null

### Response · 201

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/contracts \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "type": "hpp",
  "startDate": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "type": "hpp",
    "startDate": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/contracts",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "type": "hpp",
        "startDate": "2026-10-30"
    },
)
data = response.json()
```

## Get an employment contract

GET `/v1/payroll/contracts/{id}`

Get an employment contract

MCP tool: `get-payroll-contract`

### Path parameters

`id` string required

### Response · 200

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Update an employment contract. Locked payroll runs keep the values they were calculated with

PATCH `/v1/payroll/contracts/{id}`

Update an employment contract. Locked payroll runs keep the values they were calculated with

MCP tool: `update-payroll-contract`

### Path parameters

`id` string required

### Request body

`type` "hpp" | "dpc" | "dpp"

`position` string | null

`qualification` string | null

`exposureNote` string | null

`signedOn` string | null

Date as YYYY-MM-DD.

`startDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string | null

Date as YYYY-MM-DD.

`endReason` string | null

`wageType` "monthly" | "hourly"

`baseWageHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`hourlyRateHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`weeklyHoursMilli` integer min 0 max 168000

Integer thousandths: 1500 means 1.5.

`irregularSchedule` boolean

`vacationHoursMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`smallScope` boolean | null

`averageHourlyHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`mealAllowancePerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`mealVoucherEmployerPerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`mealVoucherEmployeePerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`centerId` string | null

ID of the center.

`activityId` string | null

ID of the activity. Find it with list-activity.

`projectId` string | null

ID of the project.

`idPpv` string | null

`iscoCode` string | null

`employmentStatusCode` string

`workModeCode` "1" | "2" | "3" | "4"

`workCity` string | null

`workMunicipalityCode` string | null

`registeredAt` string | null

`deregisteredAt` string | null

`deregistration` object | null

`noDataReason` "2" | "3" | null

`employmentKind` "1" | "2"

`endReasonCode` integer min 1 max 15

`averageNetMonthlyHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`severanceDue` boolean

`severancePaidInFull` boolean

`severanceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`replacementHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`pensionFrom` string | null

Date as YYYY-MM-DD.

`pensionTo` string | null

Date as YYYY-MM-DD.

`note` string | null

### Response · 200

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "hpp",
  "position": "string",
  "qualification": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "type": "hpp",
    "position": "string",
    "qualification": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "type": "hpp",
        "position": "string",
        "qualification": "string"
    },
)
data = response.json()
```

## Delete a contract that has never been paid

DELETE `/v1/payroll/contracts/{id}`

Delete a contract that has never been paid

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-contract`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## How a contract's wage is split across cost centers, activities, and projects

GET `/v1/payroll/contracts/{id}/allocation`

How a contract's wage is split across cost centers, activities, and projects

MCP tool: `get-payroll-cost-allocation`

### Path parameters

`id` string required

### Response · 200

`contractId` string required

`method` null | string required

`rows` object\[\] required

`id` string required

`centerId` null | string required

`activityId` string | null required

`projectId` null | string required

`shareBp` integer required

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/allocation \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/allocation', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/allocation",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Split a contract's wage: fixed percentages that add up to 100 %, hours from each month's attendance, or the contract's own dimensions

PUT `/v1/payroll/contracts/{id}/allocation`

Split a contract's wage: fixed percentages that add up to 100 %, hours from each month's attendance, or the contract's own dimensions

MCP tool: `replace-payroll-cost-allocation`

### Path parameters

`id` string required

### Request body

`method` "default" | "fixed" | "attendance" required

`rows` object\[\]

`centerId` string | null

ID of the center.

`activityId` string | null

ID of the activity. Find it with list-activity.

`projectId` string | null

ID of the project.

`shareBp` integer required min 1 max 10000

### Response · 200

`contractId` string required

`method` null | string required

`rows` object\[\] required

`id` string required

`centerId` null | string required

`activityId` string | null required

`projectId` null | string required

`shareBp` integer required

```bash
curl -X PUT https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/allocation \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "method": "default"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/allocation', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "method": "default"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/allocation",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "method": "default"
    },
)
data = response.json()
```

## Amendment to a contract as a PDF template in Czech (§ 40 of the Labour Code): what changes and from when. This paper alone changes nothing in the app: POST /payroll/contracts/:id/amendments records it on the contract

GET `/v1/payroll/contracts/{id}/amendment.pdf`

Amendment to a contract as a PDF template in Czech (§ 40 of the Labour Code): what changes and from when. This paper alone changes nothing in the app: POST /payroll/contracts/:id/amendments records it on the contract

MCP tool: `get-payroll-amendment-pdf`

### Path parameters

`id` string required

### Query parameters

`effectiveFrom` string YYYY-MM-DD

Date as YYYY-MM-DD.

`position` string max 200 chars

`workCity` string max 200 chars

`baseWageHaler` integer max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`hourlyRateHaler` integer max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`weeklyHoursMilli` integer max 60000

Integer thousandths: 1500 means 1.5.

`endDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendment.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendment.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendment.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Amendments recorded on a contract, newest first

GET `/v1/payroll/contracts/{id}/amendments`

Amendments recorded on a contract, newest first

MCP tool: `list-payroll-contract-amendments`

### Path parameters

`id` string required

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "payroll\_contract\_amendment" required

`id` string required

`contractId` string required

`effectiveFrom` string required date

`signedOn` null | string required date

`changes` object required

`position` null | string

`baseWageHaler` integer

`workCity` null | string

`before` object required

`position` null | string

`baseWageHaler` integer

`workCity` null | string

`status` string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendments \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendments', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendments",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record an amendment (§ 40 of the Labour Code) and change the contract: at once when it is due, otherwise on its date. Runs of earlier months keep the old values. A change of wage or hours may start on any day: that month is paid pro rata, each part by the wage and hours it had. A locked run from that date on blocks it

POST `/v1/payroll/contracts/{id}/amendments`

Record an amendment (§ 40 of the Labour Code) and change the contract: at once when it is due, otherwise on its date. Runs of earlier months keep the old values. A change of wage or hours may start on any day: that month is paid pro rata, each part by the wage and hours it had. A locked run from that date on blocks it

MCP tool: `create-payroll-contract-amendment`

### Path parameters

`id` string required

### Request body

`effectiveFrom` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`signedOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`position` string max 200 chars

`workCity` string max 200 chars

`baseWageHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`hourlyRateHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`weeklyHoursMilli` integer max 60000

Integer thousandths: 1500 means 1.5.

`endDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`contractId` string required

`effectiveFrom` string required date

`signedOn` null | string required date

`changes` object required

`position` null | string

`baseWageHaler` integer

`workCity` null | string

`before` object required

`position` null | string

`baseWageHaler` integer

`workCity` null | string

`status` string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendments \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "effectiveFrom": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendments', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "effectiveFrom": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/amendments",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "effectiveFrom": "2026-10-30"
    },
)
data = response.json()
```

## Employment contract, or the DPP or DPČ agreement, as a PDF template in Czech with what § 34, § 37, § 75, § 76 and § 77a of the Labour Code require. A probation period up to 4 months, 8 for a manager (§ 35)

GET `/v1/payroll/contracts/{id}/contract.pdf`

Employment contract, or the DPP or DPČ agreement, as a PDF template in Czech with what § 34, § 37, § 75, § 76 and § 77a of the Labour Code require. A probation period up to 4 months, 8 for a manager (§ 35)

MCP tool: `get-payroll-contract-pdf`

### Path parameters

`id` string required

### Query parameters

`probationMonths` integer min 1 max 8

`managerial` "true" | "false"

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/contract.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/contract.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/contract.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## What is still missing before the přihláška or odhláška of a contract can be exported

GET `/v1/payroll/contracts/{id}/registration`

What is still missing before the přihláška or odhláška of a contract can be exported

MCP tool: `check-payroll-registration`

### Path parameters

`id` string required

### Query parameters

`action` "start" | "end" required

`schemaVersion` "1.4" | "1.5"

### Response · 200

`action` string required

`averageNetHaler` integer | null required

`problems` string\[\] required

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Přihláška or odhláška of an employee as PDF

GET `/v1/payroll/contracts/{id}/registration.pdf`

Přihláška or odhláška of an employee as PDF

MCP tool: `get-payroll-registration-pdf`

### Path parameters

`id` string required

### Query parameters

`action` "start" | "end" required

`schemaVersion` "1.4" | "1.5"

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Export a přihláška (start) or odhláška (end) of an employee as XML, which replaced the ONZ form from April 2026: REGZEC 1.4.0.4, or REGZEC27 1.5 from 1 January 2027 or when asked for by \`schemaVersion\`. An odhláška carries the data for unemployment support

GET `/v1/payroll/contracts/{id}/registration.xml`

Export a přihláška (start) or odhláška (end) of an employee as XML, which replaced the ONZ form from April 2026: REGZEC 1.4.0.4, or REGZEC27 1.5 from 1 January 2027 or when asked for by \`schemaVersion\`. An odhláška carries the data for unemployment support

MCP tool: `get-payroll-registration-xml`

### Path parameters

`id` string required

### Query parameters

`action` "start" | "end" required

`schemaVersion` "1.4" | "1.5"

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/registration.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Potvrzení o zaměstnání, the zápočtový list, as a PDF in Czech with the points of § 313 odst. 1 of the Labour Code, for a job that has ended

GET `/v1/payroll/contracts/{id}/service-confirmation.pdf`

Potvrzení o zaměstnání, the zápočtový list, as a PDF in Czech with the points of § 313 odst. 1 of the Labour Code, for a job that has ended

MCP tool: `get-payroll-service-confirmation-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/service-confirmation.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/service-confirmation.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/service-confirmation.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## NEMPRI25: the employer's attachment to a benefit claim for any of the six kinds (NEM, OSE, VPM, PPM, OPP, DLO), with the reckoning period from locked runs. Valid against the official XSD; ČSSZ's logical checks are partly reproduced

POST `/v1/payroll/contracts/{id}/sick-benefit.xml`

NEMPRI25: the employer's attachment to a benefit claim for any of the six kinds (NEM, OSE, VPM, PPM, OPP, DLO), with the reckoning period from locked runs. Valid against the official XSD; ČSSZ's logical checks are partly reproduced

MCP tool: `create-payroll-sick-benefit-xml`

### Path parameters

`id` string required

### Request body

`kind` "NEM" | "OSE" | "VPM" | "PPM" | "OPP" | "DLO" required

`eventDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`decisionNumber` string max 18 chars

`correction` boolean

`probableIncomeHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`detail` object required

`worked` boolean

`workedHours` number min 0 max 24

`scheduleHours` number min 0 max 24

`smallScopeIncome` integer min 0 max 9007199254740991

`student` boolean

`holidays` boolean

`pensioner` boolean

`pensionType` "A" | "B" | "C" | "I1" | "I3" | "S"

`firstJobLeave` boolean

`unpaidLeave` boolean

`unpaidLeaveFrom` string YYYY-MM-DD

Date as YYYY-MM-DD.

`unpaidLeaveTo` string YYYY-MM-DD

Date as YYYY-MM-DD.

`transferred` boolean

`transferredOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`startsMaternity` boolean

`childBirthDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`attachment` boolean

`insolvency` boolean

`stage` "start" | "continues" | "end"

`payment` object

`lastDayScheduleHours` number min 0 max 24

`lastDayWorkedHours` number min 0 max 24

`plannedShifts` boolean

`plannedShiftsWorked` boolean

`returnedOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`workedDays` object\[\]

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`leave` boolean

`leaveDays` object\[\]

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`claim` object

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`person` object

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`takeoverReason` "DOH" | "ONE" | "ROZ" | "UMR"

`children` object\[\]

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`paternityReason` "OTC" | "ZEM" | "PEC"

`child` object

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`relationCode` string

`alternating` boolean

`caredPersonally` boolean

`caredDays` object\[\]

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`reason` "ill" | "quarantine" | "carer\_unable" | "school\_closed"

`schoolName` string | null

`schoolIco` string

Czech company number (IČO), 8 digits.

`sameHousehold` boolean

`singleParent` boolean

`caresForChildUnder16` boolean

`maternityByOther` boolean

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/sick-benefit.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "NEM",
  "eventDate": "2026-10-30",
  "detail": {
    "worked": false,
    "workedHours": 0,
    "scheduleHours": 0
  }
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/sick-benefit.xml', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "NEM",
    "eventDate": "2026-10-30",
    "detail": {
      "worked": false,
      "workedHours": 0,
      "scheduleHours": 0
    }
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/sick-benefit.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "NEM",
        "eventDate": "2026-10-30",
        "detail": {
            "worked": False,
            "workedHours": 0,
            "scheduleHours": 0
        }
    },
)
content = response.content
```

## Confirmation for the Úřad práce (§ 313 odst. 2 of the Labour Code) as a PDF with the data of its form S 15: the job, the average monthly net earnings by § 356 odst. 3, and how it ended

GET `/v1/payroll/contracts/{id}/unemployment-confirmation.pdf`

Confirmation for the Úřad práce (§ 313 odst. 2 of the Labour Code) as a PDF with the data of its form S 15: the job, the average monthly net earnings by § 356 odst. 3, and how it ended

MCP tool: `get-payroll-unemployment-confirmation-pdf`

### Path parameters

`id` string required

### Query parameters

`reason` "serious\_breach" | "sick\_regime" | "organizational" | "health" | "employer\_breach" | "employee" | "agreement"

`reasonText` string max 200 chars

`averageNetMonthlyHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unemployment-confirmation.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unemployment-confirmation.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unemployment-confirmation.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Mzdový výměr as a PDF in Czech (§ 113 odst. 4 of the Labour Code): how the employee is paid, when, and where

GET `/v1/payroll/contracts/{id}/wage-notice.pdf`

Mzdový výměr as a PDF in Czech (§ 113 odst. 4 of the Labour Code): how the employee is paid, when, and where

MCP tool: `get-payroll-wage-notice-pdf`

### Path parameters

`id` string required

### Query parameters

`validFrom` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/wage-notice.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/wage-notice.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/contracts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/wage-notice.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## List tax declaration changes handed in by employees, newest first

GET `/v1/payroll/declaration-changes`

List tax declaration changes handed in by employees, newest first

MCP tool: `list-payroll-declaration-changes`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`status` "pending" | "approved" | "rejected"

### Response · 200

`data` object\[\] required

`object` "payroll\_declaration\_change" required

`id` string required

`employeeId` string required

`employeeName` string

`status` string required

`submittedAt` string required date-time

`decidedAt` null | string required date-time

`decisionNote` null | string required

`change` object required

`ztpp` boolean

`addChildren` object\[\]

`firstName` null | string required

`lastName` null | string required

`birthNumber` string

`birthDate` null | string required date

`birthNumberMasked` null | string

`requestSettlementYear` integer

`disability` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/declaration-changes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/declaration-changes', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/declaration-changes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Apply a declaration change to the personal card. A child counts from the month after the change was handed in, a newborn from the month of birth (§ 38k ZDP). A request for the annual settlement starts one

POST `/v1/payroll/declaration-changes/{id}/approve`

Apply a declaration change to the personal card. A child counts from the month after the change was handed in, a newborn from the month of birth (§ 38k ZDP). A request for the annual settlement starts one

MCP tool: `approve-payroll-declaration-change`

### Path parameters

`id` string required

### Request body

`note` string | null

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string

`status` string required

`submittedAt` string required date-time

`decidedAt` null | string required date-time

`decisionNote` null | string required

`change` object required

`ztpp` boolean

`addChildren` object\[\]

`firstName` null | string required

`lastName` null | string required

`birthNumber` string

`birthDate` null | string required date

`birthNumberMasked` null | string

`requestSettlementYear` integer

`disability` string

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/declaration-changes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/approve \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "note": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/declaration-changes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/approve', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "note": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/declaration-changes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/approve",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "note": "string"
    },
)
data = response.json()
```

## Turn down a declaration change. Nothing on the personal card changes

POST `/v1/payroll/declaration-changes/{id}/reject`

Turn down a declaration change. Nothing on the personal card changes

MCP tool: `reject-payroll-declaration-change`

### Path parameters

`id` string required

### Request body

`note` string | null

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string

`status` string required

`submittedAt` string required date-time

`decidedAt` null | string required date-time

`decisionNote` null | string required

`change` object required

`ztpp` boolean

`addChildren` object\[\]

`firstName` null | string required

`lastName` null | string required

`birthNumber` string

`birthDate` null | string required date

`birthNumberMasked` null | string

`requestSettlementYear` integer

`disability` string

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/declaration-changes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reject \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "note": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/declaration-changes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reject', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "note": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/declaration-changes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reject",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "note": "string"
    },
)
data = response.json()
```

## List wage deductions: attachments of earnings, agreements, advances

GET `/v1/payroll/deductions`

List wage deductions: attachments of earnings, agreements, advances

MCP tool: `list-payroll-deductions`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`employeeId` string

ID of the employee.

### Response · 200

`data` object\[\] required

`object` "payroll\_deduction" required

`id` string required

`employeeId` string required

`kind` string required

`name` string required

`amountHaler` integer required

`remainingHaler` integer | null required

`receivedOn` null | string required date

`accountNumber` null | string required

`variableSymbol` null | string required

`specificSymbol` string | null required

`isActive` boolean required

`note` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/deductions \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/deductions', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/deductions",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Add a wage deduction. Attachments are limited by the protected amount each month

POST `/v1/payroll/deductions`

Add a wage deduction. Attachments are limited by the protected amount each month

MCP tool: `create-payroll-deduction`

### Request body

`employeeId` string required

ID of the employee.

`kind` "attachment\_priority" | "attachment\_other" | "agreement" | "advance" | "other" required

`name` string required max 200 chars

`amountHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`remainingHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`receivedOn` string | null

Date as YYYY-MM-DD.

`accountNumber` string | null

Account number from the chart of accounts, for example 311. list-accounts lists them.

`variableSymbol` string | null

`specificSymbol` string | null

`isActive` boolean

`note` string | null

### Response · 201

`id` string required

`employeeId` string required

`kind` string required

`name` string required

`amountHaler` integer required

`remainingHaler` integer | null required

`receivedOn` null | string required date

`accountNumber` null | string required

`variableSymbol` null | string required

`specificSymbol` string | null required

`isActive` boolean required

`note` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/deductions \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "kind": "attachment_priority",
  "name": "Pekárna U Lípy s.r.o."
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/deductions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "kind": "attachment_priority",
    "name": "Pekárna U Lípy s.r.o."
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/deductions",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "attachment_priority",
        "name": "Pekárna U Lípy s.r.o."
    },
)
data = response.json()
```

## Update a wage deduction

PATCH `/v1/payroll/deductions/{id}`

Update a wage deduction

MCP tool: `update-payroll-deduction`

### Path parameters

`id` string required

### Request body

`kind` "attachment\_priority" | "attachment\_other" | "agreement" | "advance" | "other"

`name` string max 200 chars

`amountHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`remainingHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`receivedOn` string | null

Date as YYYY-MM-DD.

`accountNumber` string | null

Account number from the chart of accounts, for example 311. list-accounts lists them.

`variableSymbol` string | null

`specificSymbol` string | null

`isActive` boolean

`note` string | null

### Response · 200

`id` string required

`employeeId` string required

`kind` string required

`name` string required

`amountHaler` integer required

`remainingHaler` integer | null required

`receivedOn` null | string required date

`accountNumber` null | string required

`variableSymbol` null | string required

`specificSymbol` string | null required

`isActive` boolean required

`note` null | string required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/deductions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "attachment_priority",
  "name": "Pekárna U Lípy s.r.o.",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/deductions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "attachment_priority",
    "name": "Pekárna U Lípy s.r.o.",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/deductions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "attachment_priority",
        "name": "Pekárna U Lípy s.r.o.",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Delete a wage deduction

DELETE `/v1/payroll/deductions/{id}`

Delete a wage deduction

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-deduction`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/deductions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/deductions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/deductions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The wording of the personnel documents this company can change, with the default of each passage and what each has to keep. Rows the law requires are written by the app and are not here

GET `/v1/payroll/document-templates`

The wording of the personnel documents this company can change, with the default of each passage and what each has to keep. Rows the law requires are written by the app and are not here

MCP tool: `list-payroll-document-templates`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "payroll\_document\_template" required

`kind` string required

`label` null | string required

`customized` boolean required

`placeholders` string\[\] required

`blocks` object\[\] required

`key` string required

`label` null | string required

`defaultText` string required

`text` string required

`placeholders` string\[\] required

`mentions` string\[\] required

`extraSections` object\[\] required

`text` string required

`heading` string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/document-templates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/document-templates', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/document-templates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Save a company's wording of one document and its own extra sections. Refused with the reasons when a passage drops what it has to keep, is empty, or names a figure the app does not know

PUT `/v1/payroll/document-templates/{kind}`

Save a company's wording of one document and its own extra sections. Refused with the reasons when a passage drops what it has to keep, is empty, or names a figure the app does not know

MCP tool: `save-payroll-document-template`

### Path parameters

`kind` string required

### Request body

`blocks` object

`extraSections` object\[\]

`heading` string required max 200 chars

`text` string required max 4000 chars

### Response · 200

`kind` string required

`label` null | string required

`customized` boolean required

`placeholders` string\[\] required

`blocks` object\[\] required

`key` string required

`label` null | string required

`defaultText` string required

`text` string required

`placeholders` string\[\] required

`mentions` string\[\] required

`extraSections` object\[\] required

`text` string required

`heading` string required

```bash
curl -X PUT https://api.damedoklad.cz/v1/payroll/document-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "blocks": {},
  "extraSections": [
    {
      "heading": "string",
      "text": "string"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/document-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "blocks": {},
    "extraSections": [
      {
        "heading": "string",
        "text": "string"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/payroll/document-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "blocks": {},
        "extraSections": [
            {
                "heading": "string",
                "text": "string"
            }
        ]
    },
)
data = response.json()
```

## Go back to the app's wording of one document

DELETE `/v1/payroll/document-templates/{kind}`

Go back to the app's wording of one document

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `reset-payroll-document-template`

### Path parameters

`kind` string required

### Response · 200

`kind` string required

`label` null | string required

`customized` boolean required

`placeholders` string\[\] required

`blocks` object\[\] required

`key` string required

`label` null | string required

`defaultText` string required

`text` string required

`placeholders` string\[\] required

`mentions` string\[\] required

`extraSections` object\[\] required

`text` string required

`heading` string required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/document-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/document-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/document-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List employees. Rodné číslo and bank account are masked here

GET `/v1/payroll/employees`

List employees. Rodné číslo and bank account are masked here

MCP tool: `list-payroll-employees`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`status` "active" | "inactive"

### Response · 200

`data` object\[\] required

`object` "employee" required

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create an employee. Rodné číslo is validated and stored encrypted

POST `/v1/payroll/employees`

Create an employee. Rodné číslo is validated and stored encrypted

MCP tool: `create-payroll-employee`

### Request body

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`title` string | null

`birthName` string | null

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`birthPlace` string | null

`gender` "male" | "female" | null

`citizenship` string 2 chars

`street` string | null

`houseNumber` string | null

`orientationNumber` string | null

`city` string | null

`postalCode` string | null

`country` string 2 chars

`email` string | null

`phone` string | null

`bankAccount` string | null

`healthInsurerCode` "111" | "201" | "205" | "207" | "209" | "211" | "213" | null

`disability` "none" | "first\_second" | "third"

`ztpp` boolean

`ztp` boolean

`pensioner` boolean

`pensionerDiscountFrom` string | null

Date as YYYY-MM-DD.

`student` boolean

`studentUntil` string | null

`childrenOtherPerson` object | null

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`stateInsured` boolean

`selfEmployedMinimum` boolean

`otherEmployerMinimum` boolean

`employerDiscountGroup` "age55" | "parent\_under10" | "carer" | "student\_under26" | "retraining" | "disabled" | "under21" | null

`employerDiscountNotified` boolean

`hasDeclaration` boolean

`declarationSignedOn` string | null

Date as YYYY-MM-DD.

`dependents` integer min 0 max 20

`ikMpsv` string | null

`educationCode` string | null

`studentCredit` boolean

`doctoralStudent` boolean

`taxNonResident` boolean

`foreignTaxId` string | null

ID of the foreign tax.

`foreignTaxIdType` "R" | "D" | "S" | "J" | null

`identityDocumentNumber` string | null

`identityDocumentType` "I" | "P" | "D" | "O" | null

`identityDocumentCountry` string | null

`status` "active" | "inactive"

`note` string | null

`children` object\[\]

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`ztpp` boolean

`claimFrom` string | null

Date as YYYY-MM-DD.

`claimTo` string | null

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/employees \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "firstName": "Pekárna U Lípy s.r.o.",
  "lastName": "Pekárna U Lípy s.r.o."
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "firstName": "Pekárna U Lípy s.r.o.",
    "lastName": "Pekárna U Lípy s.r.o."
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/employees",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "firstName": "Pekárna U Lípy s.r.o.",
        "lastName": "Pekárna U Lípy s.r.o."
    },
)
data = response.json()
```

## Get the personal card of an employee, with the full rodné číslo, bank account, children, and contracts

GET `/v1/payroll/employees/{id}`

Get the personal card of an employee, with the full rodné číslo, bank account, children, and contracts

MCP tool: `get-payroll-employee`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Update the personal card of an employee

PATCH `/v1/payroll/employees/{id}`

Update the personal card of an employee

MCP tool: `update-payroll-employee`

### Path parameters

`id` string required

### Request body

`firstName` string max 200 chars

`lastName` string max 200 chars

`title` string | null

`birthName` string | null

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`birthPlace` string | null

`gender` "male" | "female" | null

`citizenship` string 2 chars

`street` string | null

`houseNumber` string | null

`orientationNumber` string | null

`city` string | null

`postalCode` string | null

`country` string 2 chars

`email` string | null

`phone` string | null

`bankAccount` string | null

`healthInsurerCode` "111" | "201" | "205" | "207" | "209" | "211" | "213" | null

`disability` "none" | "first\_second" | "third"

`ztpp` boolean

`ztp` boolean

`pensioner` boolean

`pensionerDiscountFrom` string | null

Date as YYYY-MM-DD.

`student` boolean

`studentUntil` string | null

`childrenOtherPerson` object | null

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`stateInsured` boolean

`selfEmployedMinimum` boolean

`otherEmployerMinimum` boolean

`employerDiscountGroup` "age55" | "parent\_under10" | "carer" | "student\_under26" | "retraining" | "disabled" | "under21" | null

`employerDiscountNotified` boolean

`hasDeclaration` boolean

`declarationSignedOn` string | null

Date as YYYY-MM-DD.

`dependents` integer min 0 max 20

`ikMpsv` string | null

`educationCode` string | null

`studentCredit` boolean

`doctoralStudent` boolean

`taxNonResident` boolean

`foreignTaxId` string | null

ID of the foreign tax.

`foreignTaxIdType` "R" | "D" | "S" | "J" | null

`identityDocumentNumber` string | null

`identityDocumentType` "I" | "P" | "D" | "O" | null

`identityDocumentCountry` string | null

`status` "active" | "inactive"

`note` string | null

### Response · 200

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "firstName": "Pekárna U Lípy s.r.o.",
  "lastName": "Pekárna U Lípy s.r.o.",
  "title": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "firstName": "Pekárna U Lípy s.r.o.",
    "lastName": "Pekárna U Lípy s.r.o.",
    "title": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "firstName": "Pekárna U Lípy s.r.o.",
        "lastName": "Pekárna U Lípy s.r.o.",
        "title": "string"
    },
)
data = response.json()
```

## Delete an employee who has never been paid. Anyone with payroll history must be kept for the statutory period

DELETE `/v1/payroll/employees/{id}`

Delete an employee who has never been paid. Anyone with payroll history must be kept for the statutory period

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-employee`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Replace the list of children claimed for the tax credit. Order sets first, second, third child

PUT `/v1/payroll/employees/{id}/children`

Replace the list of children claimed for the tax credit. Order sets first, second, third child

MCP tool: `replace-payroll-employee-children`

### Path parameters

`id` string required

### Request body

`children` object\[\] required

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`ztpp` boolean

`claimFrom` string | null

Date as YYYY-MM-DD.

`claimTo` string | null

Date as YYYY-MM-DD.

### Response · 200

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl -X PUT https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/children \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "children": [
    {
      "firstName": "Pekárna U Lípy s.r.o.",
      "lastName": "Pekárna U Lípy s.r.o."
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/children', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "children": [
      {
        "firstName": "Pekárna U Lípy s.r.o.",
        "lastName": "Pekárna U Lípy s.r.o."
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/children",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "children": [
            {
                "firstName": "Pekárna U Lípy s.r.o.",
                "lastName": "Pekárna U Lípy s.r.o."
            }
        ]
    },
)
data = response.json()
```

## OZUSPOJ23: the notice of intent to apply the employer discount on social insurance (§ 7b zák. 589/1992 Sb.), for one employee. Valid against the official XSD

GET `/v1/payroll/employees/{id}/discount-notice.xml`

OZUSPOJ23: the notice of intent to apply the employer discount on social insurance (§ 7b zák. 589/1992 Sb.), for one employee. Valid against the official XSD

MCP tool: `get-payroll-discount-notice-xml`

### Path parameters

`id` string required

### Query parameters

`action` "start" | "end" | "cancel" required

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/discount-notice.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/discount-notice.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/discount-notice.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Evidenční list důchodového pojištění of an employee for a year, as PDF

GET `/v1/payroll/employees/{id}/eldp.pdf`

Evidenční list důchodového pojištění of an employee for a year, as PDF

MCP tool: `get-payroll-eldp-pdf`

### Path parameters

`id` string required

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/eldp.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/eldp.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/eldp.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Potvrzení o zdanitelných příjmech of an employee for a year, as PDF

GET `/v1/payroll/employees/{id}/income-confirmation.pdf`

Potvrzení o zdanitelných příjmech of an employee for a year, as PDF

MCP tool: `get-payroll-income-confirmation-pdf`

### Path parameters

`id` string required

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/income-confirmation.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/income-confirmation.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/income-confirmation.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Record that the wage goes to a protected account (chráněný účet, § 304c to § 304e OSŘ): the bank account the confirmation names as its source. From then on a run pays this wage from that account

POST `/v1/payroll/employees/{id}/protected-account`

Record that the wage goes to a protected account (chráněný účet, § 304c to § 304e OSŘ): the bank account the confirmation names as its source. From then on a run pays this wage from that account

MCP tool: `set-payroll-protected-account`

### Path parameters

`id` string required

### Request body

`bankAccountId` string required

ID of the bank account. Find it with list-bank-accounts.

`confirmedOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
data = response.json()
```

## The data for the confirmation of a protected account (§ 304d odst. 1 OSŘ) as a PDF working paper. The law wants the ministry's own form, so this is not it

GET `/v1/payroll/employees/{id}/protected-account.pdf`

The data for the confirmation of a protected account (§ 304d odst. 1 OSŘ) as a PDF working paper. The law wants the ministry's own form, so this is not it

MCP tool: `get-payroll-protected-account-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## The employee brought the bank's confirmation that the account is no longer protected (§ 304e odst. 2 OSŘ): the wage is free to leave from any account again

POST `/v1/payroll/employees/{id}/protected-account/end`

The employee brought the bank's confirmation that the account is no longer protected (§ 304e odst. 2 OSŘ): the wage is free to leave from any account again

MCP tool: `clear-payroll-protected-account`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account/end \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account/end', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protected-account/end",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Evidenční list zaměstnance (personal record) as PDF

GET `/v1/payroll/employees/{id}/record.pdf`

Evidenční list zaměstnance (personal record) as PDF

MCP tool: `get-payroll-employee-record-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/record.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/record.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/record.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## List an employee's links with their audit trail. The URL itself cannot be read again

GET `/v1/payroll/employees/{id}/self-service-links`

List an employee's links with their audit trail. The URL itself cannot be read again

MCP tool: `list-payroll-self-service-links`

### Path parameters

`id` string required

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "payroll\_self\_service\_link" required

`id` string required

`employeeId` string required

`scopes` string\[\] required

`expiresAt` string required date-time

`revokedAt` null | string required date-time

`lastUsedAt` null | string required date-time

`createdAt` string required date-time

`active` boolean required

`url` string

`sent` boolean

`events` object\[\]

`action` string required

`subjectId` null | string required

`at` string required date-time

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/self-service-links \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/self-service-links', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/self-service-links",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create a link an employee opens without logging in to download payslips and hand in tax declaration changes. The URL is returned once and can be e-mailed

POST `/v1/payroll/employees/{id}/self-service-links`

Create a link an employee opens without logging in to download payslips and hand in tax declaration changes. The URL is returned once and can be e-mailed

MCP tool: `create-payroll-self-service-link`

### Path parameters

`id` string required

### Request body

`scopes` "payslips" | "declaration"\[\]

`expiresInDays` integer min 1 max 90

`send` boolean

### Response · 201

`id` string required

`employeeId` string required

`scopes` string\[\] required

`expiresAt` string required date-time

`revokedAt` null | string required date-time

`lastUsedAt` null | string required date-time

`createdAt` string required date-time

`active` boolean required

`url` string

`sent` boolean

`events` object\[\]

`action` string required

`subjectId` null | string required

`at` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/self-service-links \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "scopes": [
    "payslips"
  ],
  "expiresInDays": 1,
  "send": false
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/self-service-links', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "scopes": [
      "payslips"
    ],
    "expiresInDays": 1,
    "send": false
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/employees/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/self-service-links",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "scopes": [
            "payslips"
        ],
        "expiresInDays": 1,
        "send": False
    },
)
data = response.json()
```

## Import employees from XLSX for a company coming from POHODA, which does not export them to XML: cards and contracts, and on further sheets children, deductions, attendance and wages of past months. A second row with the same person adds a contract. dryRun only validates

POST `/v1/payroll/employees/import`

Import employees from XLSX for a company coming from POHODA, which does not export them to XML: cards and contracts, and on further sheets children, deductions, attendance and wages of past months. A second row with the same person adds a contract. dryRun only validates. Past months go where past months count: the annual social cap, average earnings, the year-end settlement, ELDP and the income confirmation. They post nothing and are not paid. A month that already has a run here is refused, so nothing counts twice.

MCP tool: `import-payroll-employees`

### Request body

`fileBase64` string required max 40000000 chars

File content encoded as base64.

`dryRun` boolean

### Response · 200

`dryRun` boolean required

`employees` integer required

`contracts` integer required

`importedEmployees` integer required

`importedContracts` integer required

`errors` object\[\] required

`line` integer required

`message` null | string required

`name` null | string required

`preview` object\[\] required

`name` null | string required

`existing` boolean required

`contracts` object\[\] required

`type` string required

`position` null | string required

`startDate` string required date

`children` integer

`deductions` integer

`attendanceMonths` integer

`wageMonths` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/employees/import \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "fileBase64": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/import', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "fileBase64": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/employees/import",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "fileBase64": "string"
    },
)
data = response.json()
```

## Download the XLSX template for importing employees and contracts, with an example row

GET `/v1/payroll/employees/import-template.xlsx`

Download the XLSX template for importing employees and contracts, with an example row

MCP tool: `download-payroll-employee-import-template`

### Response · 200

Returns a application/vnd.openxmlformats-officedocument.spreadsheetml.sheet file.

```bash
curl https://api.damedoklad.cz/v1/payroll/employees/import-template.xlsx \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/import-template.xlsx', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/employees/import-template.xlsx",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Onboard a new hire in one step: personal card, children, and the first contract

POST `/v1/payroll/employees/onboard`

Onboard a new hire in one step: personal card, children, and the first contract

MCP tool: `onboard-payroll-employee`

### Request body

`employee` object required

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`title` string | null

`birthName` string | null

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`birthPlace` string | null

`gender` "male" | "female" | null

`citizenship` string 2 chars

`street` string | null

`houseNumber` string | null

`orientationNumber` string | null

`city` string | null

`postalCode` string | null

`country` string 2 chars

`email` string | null

`phone` string | null

`bankAccount` string | null

`healthInsurerCode` "111" | "201" | "205" | "207" | "209" | "211" | "213" | null

`disability` "none" | "first\_second" | "third"

`ztpp` boolean

`ztp` boolean

`pensioner` boolean

`pensionerDiscountFrom` string | null

Date as YYYY-MM-DD.

`student` boolean

`studentUntil` string | null

`childrenOtherPerson` object | null

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`stateInsured` boolean

`selfEmployedMinimum` boolean

`otherEmployerMinimum` boolean

`employerDiscountGroup` "age55" | "parent\_under10" | "carer" | "student\_under26" | "retraining" | "disabled" | "under21" | null

`employerDiscountNotified` boolean

`hasDeclaration` boolean

`declarationSignedOn` string | null

Date as YYYY-MM-DD.

`dependents` integer min 0 max 20

`ikMpsv` string | null

`educationCode` string | null

`studentCredit` boolean

`doctoralStudent` boolean

`taxNonResident` boolean

`foreignTaxId` string | null

ID of the foreign tax.

`foreignTaxIdType` "R" | "D" | "S" | "J" | null

`identityDocumentNumber` string | null

`identityDocumentType` "I" | "P" | "D" | "O" | null

`identityDocumentCountry` string | null

`status` "active" | "inactive"

`note` string | null

`children` object\[\]

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`ztpp` boolean

`claimFrom` string | null

Date as YYYY-MM-DD.

`claimTo` string | null

Date as YYYY-MM-DD.

`contract` object required

`type` "hpp" | "dpc" | "dpp" required

`position` string | null

`qualification` string | null

`exposureNote` string | null

`signedOn` string | null

Date as YYYY-MM-DD.

`startDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string | null

Date as YYYY-MM-DD.

`endReason` string | null

`wageType` "monthly" | "hourly"

`baseWageHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`hourlyRateHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`weeklyHoursMilli` integer min 0 max 168000

Integer thousandths: 1500 means 1.5.

`irregularSchedule` boolean

`vacationHoursMilli` integer min 0 max 9007199254740991

Integer thousandths: 1500 means 1.5.

`smallScope` boolean | null

`averageHourlyHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`mealAllowancePerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`mealVoucherEmployerPerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`mealVoucherEmployeePerShiftHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`centerId` string | null

ID of the center.

`activityId` string | null

ID of the activity. Find it with list-activity.

`projectId` string | null

ID of the project.

`idPpv` string | null

`iscoCode` string | null

`employmentStatusCode` string

`workModeCode` "1" | "2" | "3" | "4"

`workCity` string | null

`workMunicipalityCode` string | null

`registeredAt` string | null

`deregisteredAt` string | null

`deregistration` object | null

`noDataReason` "2" | "3" | null

`employmentKind` "1" | "2"

`endReasonCode` integer min 1 max 15

`averageNetMonthlyHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`severanceDue` boolean

`severancePaidInFull` boolean

`severanceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`replacementHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`pensionFrom` string | null

Date as YYYY-MM-DD.

`pensionTo` string | null

Date as YYYY-MM-DD.

`note` string | null

### Response · 201

`id` string required

`name` null | string required

`firstName` string required

`lastName` string required

`title` string | null required

`birthName` string | null required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`birthPlace` null | string required

`gender` null | string required

`citizenship` string required

`street` null | string required

`houseNumber` null | string required

`orientationNumber` string | null required

`city` null | string required

`postalCode` null | string required

`country` string required

`email` null | string required

`phone` string | null required

`bankAccountMasked` null | string required

`protectedAccountSourceId` null | string required

`protectedAccountConfirmedOn` null | string required date

`healthInsurerCode` null | string required

`healthInsurerName` null | string required

`disability` string required

`ztpp` boolean required

`ztp` boolean required

`pensioner` boolean required

`pensionerDiscountFrom` null | string required date

`student` boolean required

`studentUntil` string | null required

`stateInsured` boolean required

`selfEmployedMinimum` boolean required

`otherEmployerMinimum` boolean required

`employerDiscountGroup` null | string required

`employerDiscountNotified` boolean required

`hasDeclaration` boolean required

`declarationSignedOn` null | string required date

`dependents` integer required

`ikMpsv` null | string required

`educationCode` string | null required

`studentCredit` boolean required

`doctoralStudent` boolean required

`taxNonResident` boolean required

`foreignTaxId` null | string required

`foreignTaxIdType` null | string required

`identityDocumentNumber` null | string required

`identityDocumentType` null | string required

`identityDocumentCountry` null | string required

`status` string required

`note` string | null required

`contracts` object\[\]

`object` "employment\_contract" required

`id` string required

`employeeId` string required

`type` string required

`position` null | string required

`signedOn` string | null required

`startDate` string required date

`endDate` null | string required date

`endReason` string | null required

`wageType` string required

`baseWageHaler` integer required

`hourlyRateHaler` integer required

`weeklyHoursMilli` integer required

`irregularSchedule` boolean required

`vacationHoursMilli` integer required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`mealAllowancePerShiftHaler` integer required

`mealVoucherEmployerPerShiftHaler` integer required

`mealVoucherEmployeePerShiftHaler` integer required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`idPpv` null | string required

`iscoCode` null | string required

`employmentStatusCode` string required

`workModeCode` string required

`workCity` null | string required

`workMunicipalityCode` null | string required

`registeredAt` string | null required

`deregisteredAt` string | null required

`allocationMethod` string required

`deregistration` null | object required

`severanceDue` boolean

`endReasonCode` integer

`severanceHaler` integer

`severancePaidInFull` boolean

`noDataReason` string

`averageNetMonthlyHaler` integer

`note` string | null required

`employeeName` string

`qualification` null | string

`exposureNote` null | string

`onboarding` object

`personal` boolean required

`insurer` boolean required

`bank` boolean required

`contract` boolean required

`declaration` boolean required

`registered` boolean required

`childrenOtherPerson` null | object

`lastName` string required

`birthDate` null | string required date

`firstName` string required

`birthNumberMasked` null | string required

`birthNumber` null | string

`bankAccount` null | string

`children` object\[\]

`object` "employee\_child" required

`id` string required

`firstName` null | string required

`lastName` null | string required

`birthNumber` null | string required

`birthNumberMasked` null | string required

`birthDate` null | string required date

`ztpp` boolean required

`claimFrom` null | string required date

`claimTo` null | string required date

`position` integer | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/employees/onboard \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "employee": {
    "firstName": "Pekárna U Lípy s.r.o.",
    "lastName": "Pekárna U Lípy s.r.o."
  },
  "contract": {
    "type": "hpp",
    "startDate": "2026-10-30"
  }
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/employees/onboard', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "employee": {
      "firstName": "Pekárna U Lípy s.r.o.",
      "lastName": "Pekárna U Lípy s.r.o."
    },
    "contract": {
      "type": "hpp",
      "startDate": "2026-10-30"
    }
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/employees/onboard",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "employee": {
            "firstName": "Pekárna U Lípy s.r.o.",
            "lastName": "Pekárna U Lípy s.r.o."
        },
        "contract": {
            "type": "hpp",
            "startDate": "2026-10-30"
        }
    },
)
data = response.json()
```

## What a Hromadné oznámení zaměstnavatele of a period says for one insurer, worked out from contracts. Tells where the XML format comes from, whether that insurer itself publishes it, and which form an XDP belongs to

GET `/v1/payroll/health-changes`

What a Hromadné oznámení zaměstnavatele of a period says for one insurer, worked out from contracts. Tells where the XML format comes from, whether that insurer itself publishes it, and which form an XDP belongs to

MCP tool: `get-payroll-health-changes`

### Query parameters

`insurer` "111" | "201" | "205" | "207" | "209" | "211" | "213" required

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`insurer` string required

`xmlFormatSource` null | string required

`lines` object\[\] required

`employeeId` null | string required

`name` null | string required

`code` null | string required

`date` string required date

`uncertain` boolean required

`added` object\[\]

`id` string required

`employeeId` null | string required

`name` null | string required

`code` null | string required

`date` string required date

`skipped` object\[\]

`id` string required

`employeeId` null | string required

`name` null | string required

`code` null | string required

`date` string required date

`xmlFormatPublished` boolean

`xdpForm` null | string

```bash
curl https://api.damedoklad.cz/v1/payroll/health-changes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/health-changes', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/health-changes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The data of the insurer's Hromadné oznámení form as an XDP, for VZP, VoZP, ZPŠ, ZP MV and RBP. Adobe Reader opens it together with the PDF it names, and you send that PDF. Refused for ČPZP and OZP, which take the XML, and when a value would be cut by the form

POST `/v1/payroll/health-changes.xdp`

The data of the insurer's Hromadné oznámení form as an XDP, for VZP, VoZP, ZPŠ, ZP MV and RBP. Adobe Reader opens it together with the PDF it names, and you send that PDF. Refused for ČPZP and OZP, which take the XML, and when a value would be cut by the form

MCP tool: `create-payroll-health-changes-xdp`

### Request body

`insurer` "111" | "201" | "205" | "207" | "209" | "211" | "213" required

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`extra` object\[\]

`employeeId` string required

ID of the employee.

`code` "P" | "A" | "E" | "C" | "O" | "Q" | "M" | "U" | "D" | "H" | "I" | "J" | "G" | "F" | "L" | "T" | "N" | "K" | "S" | "R" | "W" | "V" | "X" | "Y" | "Z" required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`skip` object\[\]

`employeeId` string required

ID of the employee.

`code` "P" | "A" | "E" | "C" | "O" | "Q" | "M" | "U" | "D" | "H" | "I" | "J" | "G" | "F" | "L" | "T" | "N" | "K" | "S" | "R" | "W" | "V" | "X" | "Y" | "Z" required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/health-changes.xdp \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "insurer": "111",
  "from": "2026-10-30",
  "to": "2026-10-30"
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/health-changes.xdp', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "insurer": "111",
    "from": "2026-10-30",
    "to": "2026-10-30"
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/health-changes.xdp",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "insurer": "111",
        "from": "2026-10-30",
        "to": "2026-10-30"
    },
)
content = response.content
```

## Hromadné oznámení zaměstnavatele as the shared XML (hromadneOznameniZamestnavatele v8), whose schema lists all seven insurers. Valid against the XSD. ČPZP, OZP and RBP publish the schema; for VZP, VoZP, ZPŠ and ZP MV ask the insurer whether it takes the file. You file it on the insurer's portal or to its data box

POST `/v1/payroll/health-changes.xml`

Hromadné oznámení zaměstnavatele as the shared XML (hromadneOznameniZamestnavatele v8), whose schema lists all seven insurers. Valid against the XSD. ČPZP, OZP and RBP publish the schema; for VZP, VoZP, ZPŠ and ZP MV ask the insurer whether it takes the file. You file it on the insurer's portal or to its data box

MCP tool: `create-payroll-health-changes-xml`

### Request body

`insurer` "111" | "201" | "205" | "207" | "209" | "211" | "213" required

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`extra` object\[\]

`employeeId` string required

ID of the employee.

`code` "P" | "A" | "E" | "C" | "O" | "Q" | "M" | "U" | "D" | "H" | "I" | "J" | "G" | "F" | "L" | "T" | "N" | "K" | "S" | "R" | "W" | "V" | "X" | "Y" | "Z" required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`skip` object\[\]

`employeeId` string required

ID of the employee.

`code` "P" | "A" | "E" | "C" | "O" | "Q" | "M" | "U" | "D" | "H" | "I" | "J" | "G" | "F" | "L" | "T" | "N" | "K" | "S" | "R" | "W" | "V" | "X" | "Y" | "Z" required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/health-changes.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "insurer": "111",
  "from": "2026-10-30",
  "to": "2026-10-30"
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/health-changes.xml', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "insurer": "111",
    "from": "2026-10-30",
    "to": "2026-10-30"
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/health-changes.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "insurer": "111",
        "from": "2026-10-30",
        "to": "2026-10-30"
    },
)
content = response.content
```

## Keep a line on the Hromadné oznámení of its month: \`add\` a change the contracts cannot show, such as maternity (M, U) or a pension (D, H), or \`skip\` one they show that is not to be filed. It stays for every later look and file

POST `/v1/payroll/health-changes/marks`

Keep a line on the Hromadné oznámení of its month: \`add\` a change the contracts cannot show, such as maternity (M, U) or a pension (D, H), or \`skip\` one they show that is not to be filed. It stays for every later look and file

MCP tool: `create-payroll-health-change-mark`

### Request body

`insurer` "111" | "201" | "205" | "207" | "209" | "211" | "213" required

`employeeId` string required

ID of the employee.

`code` "P" | "A" | "E" | "C" | "O" | "Q" | "M" | "U" | "D" | "H" | "I" | "J" | "G" | "F" | "L" | "T" | "N" | "K" | "S" | "R" | "W" | "V" | "X" | "Y" | "Z" required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`action` "add" | "skip" required

### Response · 201

`id` string required

`employeeId` string required

`name` null | string required

`code` string required

`date` string required date

`action` string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/health-changes/marks \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "insurer": "111",
  "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "code": "P",
  "date": "2026-10-30",
  "action": "add"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/health-changes/marks', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "insurer": "111",
    "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "code": "P",
    "date": "2026-10-30",
    "action": "add"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/health-changes/marks",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "insurer": "111",
        "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "code": "P",
        "date": "2026-10-30",
        "action": "add"
    },
)
data = response.json()
```

## Take back an added line, or bring back a line that was left out

DELETE `/v1/payroll/health-changes/marks/{id}`

Take back an added line, or bring back a line that was left out

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-health-change-mark`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/health-changes/marks/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/health-changes/marks/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/health-changes/marks/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List Czech public holidays of a year

GET `/v1/payroll/holidays`

List Czech public holidays of a year

MCP tool: `list-payroll-holidays`

### Query parameters

`year` integer required min 2000 max 2100

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`date` string required date

`name` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/holidays \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/holidays', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/holidays",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List past months taken over from the previous program. They count in the annual social cap, averages, the year-end settlement, ELDP and the income confirmation, and post nothing

GET `/v1/payroll/opening-months`

List past months taken over from the previous program. They count in the annual social cap, averages, the year-end settlement, ELDP and the income confirmation, and post nothing

MCP tool: `list-payroll-opening-months`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`employeeId` string

ID of the employee.

`year` integer min 2000 max 2100

### Response · 200

`data` object\[\] required

`object` "payroll\_opening\_month" required

`id` string required

`employeeId` string required

`contractId` null | string required

`employeeName` string required

`year` integer required

`month` integer required

`grossHaler` integer required

`taxableHaler` integer required

`taxBaseHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingBaseHaler` integer required

`withholdingHaler` integer required

`socialBaseHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthBaseHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`netHaler` integer required

`workedHoursMilli` integer required

`workedDays` integer required

`sickDays` integer required

`ocrDays` integer required

`unpaidLeaveMilli` integer required

`note` string | null required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/opening-months \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/opening-months', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/opening-months",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Remove a past month taken over by mistake, so it can be imported again

DELETE `/v1/payroll/opening-months/{id}`

Remove a past month taken over by mistake, so it can be imported again

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-opening-month`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/opening-months/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/opening-months/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/opening-months/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List company pay item templates: bonuses, premium rates, meal vouchers, and benefits, with the contracts they apply to

GET `/v1/payroll/pay-items`

List company pay item templates: bonuses, premium rates, meal vouchers, and benefits, with the contracts they apply to

MCP tool: `list-payroll-pay-items`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` any\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/pay-items \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/pay-items', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/pay-items",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create a pay item template. A premium rate below the statutory minimum is refused, except an agreed lower rate for night and weekend work

POST `/v1/payroll/pay-items`

Create a pay item template. A premium rate below the statutory minimum is refused, except an agreed lower rate for night and weekend work

MCP tool: `create-payroll-pay-item`

### Request body

`name` string required max 200 chars

`category` "bonus" | "premium" | "benefit" required

`calc` "fixed" | "per\_shift" | "per\_hour" | "percent\_of\_base" | "percent\_of\_average" required

`treatment` "taxable" | "benefit" | "health\_care" | "meal\_allowance" | "meal\_voucher"

`amountHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`employeeAmountHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`rateBp` integer min 0 max 100000

`hoursBasis` "worked" | "overtime" | "night" | "weekend" | "holiday" | "difficult"

`premiumKind` "overtime" | "night" | "weekend" | "holiday" | "difficult" | null

`agreedBelowStatutory` boolean

`exemptGroup` "none" | "health" | "leisure" | "recreation" | "retirement"

`appliesToAll` boolean

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

`isActive` boolean

`note` string | null

### Response · 201

`id` string required

`name` string required

`category` string required

`calc` string required

`treatment` string required

`amountHaler` integer required

`employeeAmountHaler` integer required

`rateBp` integer required

`hoursBasis` string required

`premiumKind` null | string required

`agreedBelowStatutory` boolean required

`exemptGroup` string required

`appliesToAll` boolean required

`validFrom` null | string required

`validTo` null | string required

`isActive` boolean required

`note` string | null required

`assignments` object\[\] required

`contractId` null | string required

`amountHaler` integer | null required

`rateBp` integer | null required

`validFrom` string | null required

`validTo` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/pay-items \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "category": "bonus",
  "calc": "fixed"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/pay-items', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "name": "Pekárna U Lípy s.r.o.",
    "category": "bonus",
    "calc": "fixed"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/pay-items",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "category": "bonus",
        "calc": "fixed"
    },
)
data = response.json()
```

## Update a pay item template. Locked runs keep the values they were calculated with

PATCH `/v1/payroll/pay-items/{id}`

Update a pay item template. Locked runs keep the values they were calculated with

MCP tool: `update-payroll-pay-item`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`category` "bonus" | "premium" | "benefit"

`calc` "fixed" | "per\_shift" | "per\_hour" | "percent\_of\_base" | "percent\_of\_average"

`treatment` "taxable" | "benefit" | "health\_care" | "meal\_allowance" | "meal\_voucher"

`amountHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`employeeAmountHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`rateBp` integer min 0 max 100000

`hoursBasis` "worked" | "overtime" | "night" | "weekend" | "holiday" | "difficult"

`premiumKind` "overtime" | "night" | "weekend" | "holiday" | "difficult" | null

`agreedBelowStatutory` boolean

`exemptGroup` "none" | "health" | "leisure" | "recreation" | "retirement"

`appliesToAll` boolean

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

`isActive` boolean

`note` string | null

### Response · 200

`id` string required

`name` string required

`category` string required

`calc` string required

`treatment` string required

`amountHaler` integer required

`employeeAmountHaler` integer required

`rateBp` integer required

`hoursBasis` string required

`premiumKind` null | string required

`agreedBelowStatutory` boolean required

`exemptGroup` string required

`appliesToAll` boolean required

`validFrom` null | string required

`validTo` null | string required

`isActive` boolean required

`note` string | null required

`assignments` object\[\] required

`contractId` null | string required

`amountHaler` integer | null required

`rateBp` integer | null required

`validFrom` string | null required

`validTo` string | null required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "category": "bonus",
  "calc": "fixed"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "name": "Pekárna U Lípy s.r.o.",
    "category": "bonus",
    "calc": "fixed"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "category": "bonus",
        "calc": "fixed"
    },
)
data = response.json()
```

## Delete a pay item template and its assignments. Locked runs keep the amounts they already hold

DELETE `/v1/payroll/pay-items/{id}`

Delete a pay item template and its assignments. Locked runs keep the amounts they already hold

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-pay-item`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Set which contracts a pay item applies to, each optionally with its own amount, rate, and months

PUT `/v1/payroll/pay-items/{id}/assignments`

Set which contracts a pay item applies to, each optionally with its own amount, rate, and months

MCP tool: `replace-payroll-pay-item-assignments`

### Path parameters

`id` string required

### Request body

`assignments` object\[\] required

`contractId` string required

ID of the contract. Find it with list-contracts.

`amountHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`rateBp` integer | null

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

### Response · 200

`id` string required

`name` string required

`category` string required

`calc` string required

`treatment` string required

`amountHaler` integer required

`employeeAmountHaler` integer required

`rateBp` integer required

`hoursBasis` string required

`premiumKind` null | string required

`agreedBelowStatutory` boolean required

`exemptGroup` string required

`appliesToAll` boolean required

`validFrom` null | string required

`validTo` null | string required

`isActive` boolean required

`note` string | null required

`assignments` object\[\] required

`contractId` null | string required

`amountHaler` integer | null required

`rateBp` integer | null required

`validFrom` string | null required

`validTo` string | null required

```bash
curl -X PUT https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/assignments \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "assignments": [
    {
      "contractId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/assignments', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "assignments": [
      {
        "contractId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/payroll/pay-items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/assignments",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "assignments": [
            {
                "contractId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
            }
        ]
    },
)
data = response.json()
```

## Statutory minimum premiums and benefit limits of a year, with the section of the Labour Code or the Income Tax Act

GET `/v1/payroll/pay-items/statutory`

Statutory minimum premiums and benefit limits of a year, with the section of the Labour Code or the Income Tax Act

MCP tool: `get-payroll-statutory-premiums`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`year` integer required

`premiums` object\[\] required

`kind` string required

`minimumBp` integer required

`base` string required

`section` string required

`agreeable` boolean required

`mealExemptPerShiftHaler` integer | null required

`benefitLimits` object required

`health` object required

`limitHaler` integer required

`section` string required

`leisure` object required

`limitHaler` integer | null required

`section` string required

`retirement` object required

`limitHaler` integer required

`section` string required

`recreation` object

`limitHaler` integer required

`section` string required

```bash
curl https://api.damedoklad.cz/v1/payroll/pay-items/statutory \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/pay-items/statutory', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/pay-items/statutory",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List payroll payments. With status=due this is the list the bank module turns into payment orders: payouts, deductions, ČSSZ, health insurers, tax

GET `/v1/payroll/payments`

List payroll payments. With status=due this is the list the bank module turns into payment orders: payouts, deductions, ČSSZ, health insurers, tax

MCP tool: `list-payroll-payments`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`status` "due" | "paid"

`runId` string

ID of the run.

`kind` "wage" | "reimbursement" | "social" | "health" | "tax\_advance" | "tax\_withholding" | "deduction"

### Response · 200

`data` object\[\] required

`object` "payroll\_payment" required

`id` string required

`runId` string required

`kind` string required

`employeeId` null | string required

`healthInsurerCode` null | string required

`recipient` string required

`accountNumber` null | string required

`accountMissing` boolean required

`variableSymbol` null | string required

`specificSymbol` string | null required

`constantSymbol` null | string required

`amountHaler` integer required

`dueDate` string required date

`status` string required

`paidOn` null | string required date

`journalEntryId` null | string required

`cashEntryId` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/payments \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/payments', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/payments",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Mark a payroll payment as paid by hand. A transfer goes through a bank account, posts MD 331/336/342/379 / D 221xxx on its analytic, and a later statement line takes it over. Cash goes through a register with registerId

POST `/v1/payroll/payments/{id}/paid`

Mark a payroll payment as paid by hand. A transfer goes through a bank account, posts MD 331/336/342/379 / D 221xxx on its analytic, and a later statement line takes it over. Cash goes through a register with registerId

MCP tool: `mark-payroll-payment-paid`

### Path parameters

`id` string required

### Request body

`paidOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`registerId` string

ID of the register.

`bankAccountId` string

ID of the bank account. Find it with list-bank-accounts.

### Response · 200

`id` string required

`runId` string required

`kind` string required

`employeeId` null | string required

`healthInsurerCode` null | string required

`recipient` string required

`accountNumber` null | string required

`accountMissing` boolean required

`variableSymbol` null | string required

`specificSymbol` string | null required

`constantSymbol` null | string required

`amountHaler` integer required

`dueDate` string required date

`status` string required

`paidOn` null | string required date

`journalEntryId` null | string required

`cashEntryId` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/payments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/paid \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "paidOn": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/payments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/paid', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "paidOn": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/payments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/paid",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "paidOn": "2026-10-30"
    },
)
data = response.json()
```

## Undo a payment mark: reverses what it posted, and the hand-typed movement goes with it. A payment paired with a statement line is unpaired there

POST `/v1/payroll/payments/{id}/unpaid`

Undo a payment mark: reverses what it posted, and the hand-typed movement goes with it. A payment paired with a statement line is unpaired there

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `mark-payroll-payment-unpaid`

### Path parameters

`id` string required

### Response · 200

`id` string required

`runId` string required

`kind` string required

`employeeId` null | string required

`healthInsurerCode` null | string required

`recipient` string required

`accountNumber` null | string required

`accountMissing` boolean required

`variableSymbol` null | string required

`specificSymbol` string | null required

`constantSymbol` null | string required

`amountHaler` integer required

`dueDate` string required date

`status` string required

`paidOn` null | string required date

`journalEntryId` null | string required

`cashEntryId` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/payments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unpaid \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/payments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unpaid', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/payments/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unpaid",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Free-form planning: net pay and employer cost for a gross monthly wage. Saves nothing

POST `/v1/payroll/preview/gross-to-net`

Free-form planning: net pay and employer cost for a gross monthly wage. Saves nothing

MCP tool: `preview-payroll-gross-to-net`

### Request body

`year` integer required min -9007199254740991 max 9007199254740991

`type` "hpp" | "dpc" | "dpp"

`person` object

`hasDeclaration` boolean

`children` object\[\]

`ztpp` boolean

`disability` "none" | "first\_second" | "third"

`ztpp` boolean

`pensionerDiscount` boolean

`healthMinimumExempt` boolean

`grossHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

### Response · 200

`grossHaler` integer required

`netHaler` integer required

`result` null | object required

`year` integer required

`month` integer | null required

`contracts` object\[\] required

`contractId` null | string required

`type` string required

`centerOid` any required

Null in every recorded response.

`activityOid` any required

Null in every recorded response.

`projectOid` any required

Null in every recorded response.

`allocations` object\[\] required

`centerOid` any required

Null in every recorded response.

`activityOid` any required

Null in every recorded response.

`projectOid` any required

Null in every recorded response.

`shareBp` integer required

`wageHaler` integer required

`mealHaler` integer required

`employerHaler` integer required

`benefits` any\[\] required

`benefitEmployerHaler` integer required

`participates` boolean required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`attendance` object required

`from` string required date

`to` string required date

`active` boolean required

`employedDays` integer required

`calendarDays` integer required

`fundFullMilli` integer required

`fundEmployedMilli` integer required

`workedMilli` integer required

`weekendWorkedMilli` integer required

`holidayWorkedMilli` integer required

`holidayMilli` integer required

`vacationMilli` integer required

`sickPaidMilli` integer required

`sickUnpaidMilli` integer required

`ocrMilli` integer required

`paidLeaveMilli` integer required

`unpaidLeaveMilli` integer required

`absentMilli` integer required

`obstacleMilli` integer required

`absenceInFundMilli` integer required

`sickDays` integer required

`ocrDays` integer required

`healthExcludedDays` integer required

`workedDays` integer required

`shifts` integer required

`sickStreakAtEnd` integer required

`components` array | null required

`code` null | string required

`amountHaler` integer | null required

`hoursMilli` integer required

`taxableHaler` integer required

`grossHaler` integer required

`sickPayHaler` integer required

`mealExemptHaler` integer required

`voucherEmployerHaler` integer required

`socialBaseHaler` integer required

`healthBaseHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`costShare` integer required

`insurableHaler` integer

`grossHaler` integer required

`taxableHaler` integer required

`sickPayHaler` integer required

`otherExemptHaler` integer required

`mealExemptHaler` integer required

`voucherEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`benefitEmployerHaler` integer required

`settlement` any required

Null in every recorded response.

`social` object required

`baseHaler` integer | null required

`employeeBeforeDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` any required

Null in every recorded response.

`employerDiscountReason` any required

Null in every recorded response.

`health` object required

`baseHaler` integer | null required

`minimumBaseHaler` integer required

`shortfallHaler` integer required

`employeeHaler` integer required

`employerHaler` integer required

`tax` object required

`withholdingBaseHaler` integer required

`withholdingTaxHaler` integer required

`separateBaseHaler` integer required

`separateAdvanceHaler` integer required

`advanceTaxableHaler` integer required

`advanceBaseHaler` integer required

`advanceHaler` integer required

`personalCreditHaler` integer required

`personalCreditClaimHaler` integer required

`childCreditClaimHaler` integer required

`childCreditHaler` integer required

`bonusHaler` integer required

`advanceAfterCreditsHaler` integer required

`deductions` any\[\] required

`attachmentLimits` object required

`protectedHaler` integer required

`thirdHaler` integer required

`aboveHaler` integer required

`priorityPoolHaler` integer required

`otherPoolHaler` integer required

`deductionsHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`warnings` any\[\] required

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/preview/gross-to-net \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "year": 2026,
  "grossHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/preview/gross-to-net', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "year": 2026,
    "grossHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/preview/gross-to-net",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "grossHaler": 1210000
    },
)
data = response.json()
```

## Free-form planning: the smallest gross monthly wage that gives at least the wanted net pay. Saves nothing

POST `/v1/payroll/preview/net-to-gross`

Free-form planning: the smallest gross monthly wage that gives at least the wanted net pay. Saves nothing

MCP tool: `preview-payroll-net-to-gross`

### Request body

`year` integer required min -9007199254740991 max 9007199254740991

`type` "hpp" | "dpc" | "dpp"

`person` object

`hasDeclaration` boolean

`children` object\[\]

`ztpp` boolean

`disability` "none" | "first\_second" | "third"

`ztpp` boolean

`pensionerDiscount` boolean

`healthMinimumExempt` boolean

`netHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

### Response · 200

`grossHaler` integer required

`netHaler` integer required

`result` null | object required

`year` integer required

`month` integer | null required

`contracts` object\[\] required

`contractId` null | string required

`type` string required

`centerOid` any required

Null in every recorded response.

`activityOid` any required

Null in every recorded response.

`projectOid` any required

Null in every recorded response.

`allocations` object\[\] required

`centerOid` any required

Null in every recorded response.

`activityOid` any required

Null in every recorded response.

`projectOid` any required

Null in every recorded response.

`shareBp` integer required

`wageHaler` integer required

`mealHaler` integer required

`employerHaler` integer required

`benefits` any\[\] required

`benefitEmployerHaler` integer required

`participates` boolean required

`smallScope` boolean | null required

`averageHourlyHaler` integer | null required

`attendance` object required

`from` string required date

`to` string required date

`active` boolean required

`employedDays` integer required

`calendarDays` integer required

`fundFullMilli` integer required

`fundEmployedMilli` integer required

`workedMilli` integer required

`weekendWorkedMilli` integer required

`holidayWorkedMilli` integer required

`holidayMilli` integer required

`vacationMilli` integer required

`sickPaidMilli` integer required

`sickUnpaidMilli` integer required

`ocrMilli` integer required

`paidLeaveMilli` integer required

`unpaidLeaveMilli` integer required

`absentMilli` integer required

`obstacleMilli` integer required

`absenceInFundMilli` integer required

`sickDays` integer required

`ocrDays` integer required

`healthExcludedDays` integer required

`workedDays` integer required

`shifts` integer required

`sickStreakAtEnd` integer required

`components` array | null required

`code` null | string required

`amountHaler` integer | null required

`hoursMilli` integer required

`taxableHaler` integer required

`grossHaler` integer required

`sickPayHaler` integer required

`mealExemptHaler` integer required

`voucherEmployerHaler` integer required

`socialBaseHaler` integer required

`healthBaseHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`costShare` integer required

`insurableHaler` integer

`grossHaler` integer required

`taxableHaler` integer required

`sickPayHaler` integer required

`otherExemptHaler` integer required

`mealExemptHaler` integer required

`voucherEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`benefitEmployerHaler` integer required

`settlement` any required

Null in every recorded response.

`social` object required

`baseHaler` integer | null required

`employeeBeforeDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` any required

Null in every recorded response.

`employerDiscountReason` any required

Null in every recorded response.

`health` object required

`baseHaler` integer | null required

`minimumBaseHaler` integer required

`shortfallHaler` integer required

`employeeHaler` integer required

`employerHaler` integer required

`tax` object required

`withholdingBaseHaler` integer required

`withholdingTaxHaler` integer required

`separateBaseHaler` integer required

`separateAdvanceHaler` integer required

`advanceTaxableHaler` integer required

`advanceBaseHaler` integer required

`advanceHaler` integer required

`personalCreditHaler` integer required

`personalCreditClaimHaler` integer required

`childCreditClaimHaler` integer required

`childCreditHaler` integer required

`bonusHaler` integer required

`advanceAfterCreditsHaler` integer required

`deductions` any\[\] required

`attachmentLimits` object required

`protectedHaler` integer required

`thirdHaler` integer required

`aboveHaler` integer required

`priorityPoolHaler` integer required

`otherPoolHaler` integer required

`deductionsHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`warnings` any\[\] required

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/preview/net-to-gross \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "year": 2026,
  "netHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/preview/net-to-gross', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "year": 2026,
    "netHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/preview/net-to-gross",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "netHaler": 1210000
    },
)
data = response.json()
```

## Get the legal payroll parameters of a year: average wage, minimum wage, rates, limits

GET `/v1/payroll/rates`

Get the legal payroll parameters of a year: average wage, minimum wage, rates, limits

MCP tool: `get-payroll-rates`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`supportedYears` integer\[\] required

`year` integer required

`averageWage` integer required

`minimumWageMonthly` integer required

`minimumWageHourlyHaler` integer required

`social` object required

`employerBp` integer required

`employeeBp` integer required

`employeeSicknessBp` integer required

`employeePensionBp` integer required

`maxAssessmentBase` integer required

`pensionerDiscountBp` integer required

`employerDiscount` object required

`bp` integer required

`minWeeklyHours` integer required

`maxWeeklyHours` integer required

`maxMonthlyBase` integer required

`maxHourlyBase` integer required

`maxMonthlyHours` integer required

`participation` object required

`dppThreshold` integer required

`smallScopeThreshold` integer required

`health` object required

`totalBp` integer required

`minimumBase` integer required

`tax` object required

`rateBp` integer | null required

`higherRateBp` integer required

`monthlyThreshold` integer required

`withholdingRateBp` integer required

`taxpayerCredit` integer required

`disabilityFirstSecondCredit` integer required

`disabilityThirdCredit` integer required

`ztppCredit` integer required

`childCredits` integer\[\] required

`minimumMonthlyBonus` integer required

`bonusIncomeThreshold` integer required

`separateAdvance` boolean

`studentCredit` integer

`studentAgeLimit` integer

`doctoralAgeLimit` integer

`sickPay` object required

`thresholdsHaler` integer\[\] required

`weightsBp` integer\[\] required

`rateBp` integer | null required

`paidCalendarDays` integer required

`premiums` object required

`overtimeBp` integer required

`nightBp` integer required

`weekendBp` integer required

`holidayBp` integer required

`difficultBpOfMinimumWage` integer required

`meals` object required

`exemptPerShiftHaler` integer | null required

`minimumHoursPerShift` integer required

`attachments` null | object required

`baseSum` integer required

`debtorShareBp` integer required

`dependentDivisor` integer required

`fullSeizureThreshold` integer required

`insolvencyMonthlyWithVatHaler` integer required

`benefits` object required

`healthLimitHaler` integer required

`leisureLimitHaler` integer | null required

`retirementLimitHaler` integer required

`recreationLimitHaler` integer

`healthCareOutsideIncome` boolean

`agreements` object required

`dppYearlyHours` integer required

`dpcWeeklyHours` integer required

`pending` object

`meals` string required

`attachments` string required

`tips` object

`exemptShareBp` integer required

```bash
curl https://api.damedoklad.cz/v1/payroll/rates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/rates', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/rates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Annual totals per employee from locked runs

GET `/v1/payroll/reports/annual`

Annual totals per employee from locked runs

MCP tool: `get-payroll-annual-totals`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`data` object\[\] required

`employeeId` null | string required

`employeeName` string required

`months` integer required

`grossHaler` integer required

`socialEmployeeHaler` integer required

`healthEmployeeHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`netHaler` integer required

`employerCostHaler` integer required

`total` integer required

`hasMore` boolean required

```bash
curl https://api.damedoklad.cz/v1/payroll/reports/annual \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/reports/annual', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/reports/annual",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Labour cost by month and by cost center, from locked runs

GET `/v1/payroll/reports/costs`

Labour cost by month and by cost center, from locked runs

MCP tool: `get-payroll-cost-overview`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`year` integer required

`months` object\[\] required

`month` integer | null required

`grossHaler` integer required

`socialEmployerHaler` integer required

`healthEmployerHaler` integer required

`totalHaler` integer | null required

`centers` object\[\] required

`centerId` null | string required

`totalHaler` integer | null required

```bash
curl https://api.damedoklad.cz/v1/payroll/reports/costs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/reports/costs', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/reports/costs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Mzdový list: one employee, month by month, from locked runs

GET `/v1/payroll/reports/wage-sheet`

Mzdový list: one employee, month by month, from locked runs

MCP tool: `get-payroll-wage-sheet`

### Query parameters

`year` integer required min 2000 max 2100

`employeeId` string required

ID of the employee.

### Response · 200

`year` integer required

`employeeId` null | string required

`months` object\[\] required

`month` integer | null required

`grossHaler` integer required

`socialEmployeeHaler` integer required

`healthEmployeeHaler` integer required

`taxHaler` integer required

`withholdingHaler` integer required

`bonusHaler` integer required

`deductionsHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

```bash
curl https://api.damedoklad.cz/v1/payroll/reports/wage-sheet \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/reports/wage-sheet', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/reports/wage-sheet",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Mzdový list as PDF

GET `/v1/payroll/reports/wage-sheet.pdf`

Mzdový list as PDF

MCP tool: `get-payroll-wage-sheet-pdf`

### Query parameters

`year` integer required min 2000 max 2100

`employeeId` string required

ID of the employee.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/reports/wage-sheet.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/reports/wage-sheet.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/reports/wage-sheet.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## List monthly payroll runs

GET `/v1/payroll/runs`

List monthly payroll runs

MCP tool: `list-payroll-runs`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`year` integer min 2000 max 2100

### Response · 200

`data` object\[\] required

`object` "payroll\_run" required

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`year` integer required

`month` integer | null required

`health` object required

`social` object required

`netHaler` integer required

`warnings` object\[\] required

`contracts` object\[\] required

`deductions` object\[\] required

`grossHaler` integer required

`settlement` null | object required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Start the payroll of a month as a draft and calculate every employee with a contract in that month

POST `/v1/payroll/runs`

Start the payroll of a month as a draft and calculate every employee with a contract in that month

MCP tool: `create-payroll-run`

### Request body

`year` integer required min -9007199254740991 max 9007199254740991

`month` integer required min 1 max 12

`paymentDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`tipFoodIncomeHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

### Response · 201

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "year": 2026,
  "month": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "year": 2026,
    "month": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "month": 1
    },
)
data = response.json()
```

## Get a payroll run with the calculation of every employee

GET `/v1/payroll/runs/{id}`

Get a payroll run with the calculation of every employee

MCP tool: `get-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Change the payment date, the note, or the month's food service income behind the exempt tips (§ 6 odst. 9 písm. g) ZDP from 2027) of a payroll run that is not locked. A new income recalculates the run

PATCH `/v1/payroll/runs/{id}`

Change the payment date, the note, or the month's food service income behind the exempt tips (§ 6 odst. 9 písm. g) ZDP from 2027) of a payroll run that is not locked. A new income recalculates the run

MCP tool: `update-payroll-run`

### Path parameters

`id` string required

### Request body

`paymentDate` string | null

Date as YYYY-MM-DD.

`note` string | null

`tipFoodIncomeHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "paymentDate": "2026-10-30",
  "note": "string",
  "tipFoodIncomeHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "paymentDate": "2026-10-30",
    "note": "string",
    "tipFoodIncomeHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "paymentDate": "2026-10-30",
        "note": "string",
        "tipFoodIncomeHaler": 1210000
    },
)
data = response.json()
```

## Delete a payroll run that is not locked

DELETE `/v1/payroll/runs/{id}`

Delete a payroll run that is not locked

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Overview of what a month must report: social insurance, each health insurer, tax, and whether the JMHZ XML is ready

GET `/v1/payroll/runs/{id}/filings`

Overview of what a month must report: social insurance, each health insurer, tax, and whether the JMHZ XML is ready

MCP tool: `get-payroll-filings`

### Path parameters

`id` string required

### Response · 200

`runId` null | string required

`status` string required

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`insurers` object\[\] required

`code` null | string required

`name` null | string required

`xmlFile` boolean required

`employeeCount` integer required

`baseHaler` integer | null required

`premiumHaler` integer required

`jmhzProblems` string\[\] required

`filings` object\[\] required

`kind` string required

`type` string required

`guid` null | string required

`generatedAt` string required date-time

`submittedAt` null | string required date-time

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record that a filing was submitted to the authority. DameDoklad does not submit it for you

POST `/v1/payroll/runs/{id}/filings/{kind}/submitted`

Record that a filing was submitted to the authority. DameDoklad does not submit it for you

MCP tool: `mark-payroll-filing-submitted`

### Path parameters

`id` string required

`kind` string required

### Request body

`note` string | null

### Response · 200

`runId` null | string required

`kind` string required

`submittedAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/submitted \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "note": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/submitted', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "note": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/submitted",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "note": "string"
    },
)
data = response.json()
```

## Přehled o platbě pojistného as the fixed-length file VZP publishes (methodology 3.8.1.2), for VZP only. Other insurers have \`health.xml\`

GET `/v1/payroll/runs/{id}/filings/health.aap`

Přehled o platbě pojistného as the fixed-length file VZP publishes (methodology 3.8.1.2), for VZP only. Other insurers have \`health.xml\`

MCP tool: `get-payroll-health-overview-file`

### Path parameters

`id` string required

### Response · 200

Returns a text/plain file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.aap \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.aap', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.aap",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Přehled o platbě pojistného for one health insurer as a working paper in PDF. It is not the insurer's own form; VZP also has the file \`health.aap\`

GET `/v1/payroll/runs/{id}/filings/health.pdf`

Přehled o platbě pojistného for one health insurer as a working paper in PDF. It is not the insurer's own form; VZP also has the file \`health.aap\`

MCP tool: `get-payroll-health-overview-pdf`

### Path parameters

`id` string required

### Query parameters

`insurer` "111" | "201" | "205" | "207" | "209" | "211" | "213" required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Přehled o platbě pojistného as the shared XML of the insurers (prehledPlatbyZamestnavatele v8), for ČPZP, OZP and ZP MV ČR, which publish it. Valid against the XSD. Refused for an insurer whose own publication of the format was not found

GET `/v1/payroll/runs/{id}/filings/health.xml`

Přehled o platbě pojistného as the shared XML of the insurers (prehledPlatbyZamestnavatele v8), for ČPZP, OZP and ZP MV ČR, which publish it. Valid against the XSD. Refused for an insurer whose own publication of the format was not found

MCP tool: `get-payroll-health-overview-xml`

### Path parameters

`id` string required

### Query parameters

`insurer` "111" | "201" | "205" | "207" | "209" | "211" | "213" required

`type` "radny" | "opravny"

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/health.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Export the jednotné měsíční hlášení zaměstnavatele as XML: schema MH 1.4.3.6, or MH 1.5.0.3 for months from January 2027. ČSSZ still calls 1.5 a final draft. Requires a locked run, the ČSSZ variable symbol, IK MPSV, and idPpv

GET `/v1/payroll/runs/{id}/filings/jmhz.xml`

Export the jednotné měsíční hlášení zaměstnavatele as XML: schema MH 1.4.3.6, or MH 1.5.0.3 for months from January 2027. ČSSZ still calls 1.5 a final draft. Requires a locked run, the ČSSZ variable symbol, IK MPSV, and idPpv

MCP tool: `get-payroll-jmhz-xml`

### Path parameters

`id` string required

### Query parameters

`type` "R" | "O" | "S"

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/jmhz.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/jmhz.xml', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/jmhz.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Přehled o výši pojistného as PDF. From 2026 this is a working paper, the figures are filed in the JMHZ

GET `/v1/payroll/runs/{id}/filings/social.pdf`

Přehled o výši pojistného as PDF. From 2026 this is a working paper, the figures are filed in the JMHZ

MCP tool: `get-payroll-social-overview-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/social.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/social.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/social.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Monthly tax overview as PDF: advances, bonuses, and withholding tax per employee

GET `/v1/payroll/runs/{id}/filings/tax.pdf`

Monthly tax overview as PDF: advances, bonuses, and withholding tax per employee

MCP tool: `get-payroll-tax-overview-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/tax.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/tax.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/filings/tax.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Lock a reviewed run: posts to the books in double entry and creates the payments that fall due

POST `/v1/payroll/runs/{id}/lock`

Lock a reviewed run: posts to the books in double entry and creates the payments that fall due

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `lock-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/lock \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/lock', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/lock",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Put everything a locked run still owes on payment orders: net pay per employee, deductions, ČSSZ, each insurer, tax. One order per day and bank account, with the published accounts and variable symbols unless settings say otherwise. Payments pair when the statement arrives. A wage to a protected account leaves from the account its confirmation names. What has no account comes back in \`skipped\`

POST `/v1/payroll/runs/{id}/payment-orders`

Put everything a locked run still owes on payment orders: net pay per employee, deductions, ČSSZ, each insurer, tax. One order per day and bank account, with the published accounts and variable symbols unless settings say otherwise. Payments pair when the statement arrives. A wage to a protected account leaves from the account its confirmation names. What has no account comes back in \`skipped\`

MCP tool: `create-payroll-run-payment-orders`

### Path parameters

`id` string required

### Request body

`bankAccountId` string

ID of the bank account. Find it with list-bank-accounts.

### Response · 201

`runId` null | string required

`orders` object\[\] required

`id` string required

`number` integer | null required

`executionDate` string required date

`totalHaler` integer | null required

`itemCount` integer required

`skipped` object\[\] required

`paymentId` null | string required

`kind` string required

`recipient` string required

`reason` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payment-orders \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payment-orders', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payment-orders",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
data = response.json()
```

## Download the payslip of one employee as PDF

GET `/v1/payroll/runs/{id}/payslips/{itemId}/pdf`

Download the payslip of one employee as PDF

MCP tool: `get-payroll-payslip-pdf`

### Path parameters

`id` string required

`itemId` string required

ID of the item. Find it with list-items.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## E-mail the payslip PDF to one employee. Only a locked run can be sent

POST `/v1/payroll/runs/{id}/payslips/{itemId}/send`

E-mail the payslip PDF to one employee. Only a locked run can be sent

MCP tool: `send-payroll-payslip`

### Path parameters

`id` string required

`itemId` string required

ID of the item. Find it with list-items.

### Response · 200

`itemId` null | string required

`status` string required

`errorCode` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/send \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/send', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/send",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## E-mail payslips to everyone in a locked run who has an address on file

POST `/v1/payroll/runs/{id}/payslips/send`

E-mail payslips to everyone in a locked run who has an address on file

MCP tool: `send-payroll-payslips`

### Path parameters

`id` string required

### Response · 200

`results` object\[\] required

`itemId` null | string required

`status` string required

`errorCode` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/send \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/send', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/payslips/send",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Recalculate a draft run from the current contracts, attendance, and deductions

POST `/v1/payroll/runs/{id}/recalculate`

Recalculate a draft run from the current contracts, attendance, and deductions

MCP tool: `recalculate-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/recalculate \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/recalculate', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/recalculate",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Send a run in review back to draft

POST `/v1/payroll/runs/{id}/reopen`

Send a run in review back to draft

MCP tool: `reopen-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Recalculate a draft one last time and move it to review

POST `/v1/payroll/runs/{id}/review`

Recalculate a draft one last time and move it to review

MCP tool: `review-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/review \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/review', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/review",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Unlock a run back to review: reverses its journal entry and removes its payments. Refused once a payment is paid

POST `/v1/payroll/runs/{id}/unlock`

Unlock a run back to review: reverses its journal entry and removes its payments. Refused once a payment is paid

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `unlock-payroll-run`

### Path parameters

`id` string required

### Response · 200

`id` string required

`year` integer required

`month` integer required

`period` string required

`status` string required

`paymentDate` null | string required date

`totals` object required

`netHaler` integer required

`bonusHaler` integer required

`grossHaler` integer required

`payoutHaler` integer required

`advanceHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`employeeCount` integer required

`deductionsHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`employerCostHaler` integer required

`healthPayableHaler` integer required

`socialPayableHaler` integer required

`advanceCarryInHaler` integer required

`advancePayableHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`withholdingTaxHaler` integer required

`advanceCarryOutHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`employerDiscountHaler` integer required

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`settlementBonusTopupHaler` integer required

`settlementOverpaymentHaler` integer required

`socialEmployeeBeforeDiscountHaler` integer required

`journalEntryId` null | string required

`reviewedAt` null | string required date-time

`lockedAt` null | string required date-time

`note` null | string required

`tipFoodIncomeHaler` integer | null

`items` object\[\]

`object` "payroll\_run\_item" required

`id` string required

`runId` string required

`employeeId` string required

`employeeName` string required

`healthInsurerCode` null | string required

`grossHaler` integer required

`taxableHaler` integer required

`netHaler` integer required

`payoutHaler` integer required

`employerCostHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`taxHaler` integer required

`bonusHaler` integer required

`withholdingHaler` integer required

`deductionsHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`result` object required

`tax` object required

`bonusHaler` integer required

`advanceHaler` integer required

`advanceBaseHaler` integer required

`childCreditHaler` integer required

`separateBaseHaler` integer required

`advanceTaxableHaler` integer required

`personalCreditHaler` integer required

`withholdingTaxHaler` integer required

`separateAdvanceHaler` integer required

`withholdingBaseHaler` integer required

`childCreditClaimHaler` integer required

`advanceAfterCreditsHaler` integer required

`personalCreditClaimHaler` integer required

`separateDpp` boolean

`separateOther` boolean

`multiMonth` object

`year` integer required

`month` integer | null required

`health` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`shortfallHaler` integer required

`minimumBaseHaler` integer required

`social` object required

`baseHaler` integer | null required

`employeeHaler` integer required

`employerHaler` integer required

`employerDiscountReason` any required

Null in every recorded response.

`pensionerDiscountHaler` integer required

`employerDiscountBaseHaler` integer required

`employerDiscountContractId` null | string required

`employeeBeforeDiscountHaler` integer required

`netHaler` integer required

`warnings` object\[\] required

`code` null | string required

`amountHaler` integer | null

`deductionId` null | string

`contracts` object\[\] required

`type` string required

`benefits` object\[\] required

`centerOid` null | string required

`costShare` integer required

`attendance` object required

`components` array | null required

`contractId` null | string required

`grossHaler` integer required

`projectOid` any required

Null in every recorded response.

`smallScope` boolean | null required

`activityOid` any required

Null in every recorded response.

`allocations` object\[\] required

`participates` boolean required

`sickPayHaler` integer required

`taxableHaler` integer required

`healthBaseHaler` integer required

`mealExemptHaler` integer required

`socialBaseHaler` integer required

`averageHourlyHaler` integer | null required

`healthEmployeeHaler` integer required

`healthEmployerHaler` integer required

`socialEmployeeHaler` integer required

`socialEmployerHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployerHaler` integer required

`insurableHaler` integer

`deductions` object\[\] required

`id` null | string required

`kind` string required

`amountHaler` integer | null required

`requestedHaler` integer required

`name` null | string

`accountNumber` null | string

`remainingHaler` integer | null

`specificSymbol` string | null

`variableSymbol` null | string

`grossHaler` integer required

`settlement` null | object required

`id` string required

`year` integer required

`totalHaler` integer | null required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`payoutHaler` integer required

`sickPayHaler` integer required

`taxableHaler` integer required

`deductionsHaler` integer required

`mealExemptHaler` integer required

`attachmentLimits` object required

`aboveHaler` integer required

`thirdHaler` integer required

`otherPoolHaler` integer required

`protectedHaler` integer required

`priorityPoolHaler` integer required

`otherExemptHaler` integer required

`employerCostHaler` integer required

`benefitEmployerHaler` integer required

`voucherEmployeeHaler` integer required

`voucherEmployerHaler` integer required

`reimbursements` object\[\]

`id` string required

`amountHaler` integer | null required

`description` null | string required

`travelOrderId` string required

`reimbursementHaler` integer

`reimbursementVatHaler` integer

`tipsHaler` integer

`tipExemptHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unlock \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unlock', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/runs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unlock",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Revoke a link at once. Whoever holds it can no longer use it

POST `/v1/payroll/self-service-links/{id}/revoke`

Revoke a link at once. Whoever holds it can no longer use it

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `revoke-payroll-self-service-link`

### Path parameters

`id` string required

### Response · 200

`id` string required

`employeeId` string required

`scopes` string\[\] required

`expiresAt` string required date-time

`revokedAt` null | string required date-time

`lastUsedAt` null | string required date-time

`createdAt` string required date-time

`active` boolean required

`url` string

`sent` boolean

`events` object\[\]

`action` string required

`subjectId` null | string required

`at` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/self-service-links/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/revoke \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/self-service-links/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/revoke', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/self-service-links/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/revoke",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Get payroll settings: ČSSZ variable symbol, okresní správa, pay day, and accounts for contributions

GET `/v1/payroll/settings`

Get payroll settings: ČSSZ variable symbol, okresní správa, pay day, and accounts for contributions

MCP tool: `get-payroll-settings`

### Response · 200

`id` null | string required

`csszVariableSymbol` null | string required

`csszDistrictCode` null | string required

`taxOfficeCode` null | string required

`taxOffice` null | string required

`accidentInsurer` null | string required

`accidentOkec` null | string required

`accidentRatePermille` null | number required

`payDay` integer required

`socialAccount` null | string required

`taxAccount` string | null required

`taxVariableSymbol` string | null required

`withholdingAccount` string | null required

`withholdingVariableSymbol` string | null required

`healthAccounts` object required

`notificationEmail` string | null required

`taxWorkplaceCode` null | string required

`taxSubjectType` string required

`taxSubjectFirstName` string | null required

`taxSubjectLastName` string | null required

`contactName` null | string required

`contactPhone` null | string required

`contactEmail` null | string required

`vzpBranch` string required

`ownershipForm` null | string required

`collectiveAgreements` string\[\] required

`disabledQuota` null | object required

`disabledFte` integer required

`employeesFte` number required

`sharePercent` number required

```bash
curl https://api.damedoklad.cz/v1/payroll/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settings', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Save payroll settings. An account entered here wins over the one the office publishes. An insurer and a rate here drive the statutory liability insurance

PUT `/v1/payroll/settings`

Save payroll settings. An account entered here wins over the one the office publishes. An insurer and a rate here drive the statutory liability insurance

MCP tool: `update-payroll-settings`

### Request body

`csszVariableSymbol` string | null

`csszDistrictCode` string | null

`taxOfficeCode` string | null

`accidentInsurer` "kooperativa" | "generali" | null

`accidentOkec` string | null

`accidentRatePermille` number | null

`taxOffice` "praha" | "stredocesky" | "jihocesky" | "plzensky" | "karlovarsky" | "ustecky" | "liberecky" | "kralovehradecky" | "pardubicky" | "vysocina" | "jihomoravsky" | "olomoucky" | "moravskoslezsky" | "zlinsky" | "specializovany" | null

`payDay` integer min 1 max 28

`socialAccount` string | null

`taxAccount` string | null

`taxVariableSymbol` string | null

`withholdingAccount` string | null

`withholdingVariableSymbol` string | null

`healthAccounts` object

`notificationEmail` string | null

`taxWorkplaceCode` string | null

`taxSubjectType` "P" | "F"

`taxSubjectFirstName` string | null

`taxSubjectLastName` string | null

`contactName` string | null

`contactPhone` string | null

`contactEmail` string | null

`vzpBranch` string

`ownershipForm` "1" | "2" | "3" | "4" | null

`collectiveAgreements` "1" | "2" | "3" | "4" | "5"\[\]

`disabledQuota` object | null

`employeesFte` number required min 0

`disabledFte` number required min 0

`sharePercent` number required min 0 max 100

### Response · 200

`id` null | string required

`csszVariableSymbol` null | string required

`csszDistrictCode` null | string required

`taxOfficeCode` null | string required

`taxOffice` null | string required

`accidentInsurer` null | string required

`accidentOkec` null | string required

`accidentRatePermille` null | number required

`payDay` integer required

`socialAccount` null | string required

`taxAccount` string | null required

`taxVariableSymbol` string | null required

`withholdingAccount` string | null required

`withholdingVariableSymbol` string | null required

`healthAccounts` object required

`notificationEmail` string | null required

`taxWorkplaceCode` null | string required

`taxSubjectType` string required

`taxSubjectFirstName` string | null required

`taxSubjectLastName` string | null required

`contactName` null | string required

`contactPhone` null | string required

`contactEmail` null | string required

`vzpBranch` string required

`ownershipForm` null | string required

`collectiveAgreements` string\[\] required

`disabledQuota` null | object required

`disabledFte` integer required

`employeesFte` number required

`sharePercent` number required

```bash
curl -X PUT https://api.damedoklad.cz/v1/payroll/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "csszVariableSymbol": "string",
  "csszDistrictCode": "string",
  "taxOfficeCode": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settings', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "csszVariableSymbol": "string",
    "csszDistrictCode": "string",
    "taxOfficeCode": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/payroll/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "csszVariableSymbol": "string",
        "csszDistrictCode": "string",
        "taxOfficeCode": "string"
    },
)
data = response.json()
```

## List annual tax settlements (roční zúčtování) by tax year and status

GET `/v1/payroll/settlements`

List annual tax settlements (roční zúčtování) by tax year and status

MCP tool: `list-payroll-tax-settlements`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`year` integer min 2000 max 2100

`status` "requested" | "calculated" | "approved" | "paid" | "closed"

### Response · 200

`data` any\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/settlements \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/settlements",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record an employee's request for an annual tax settlement, with deductions, credits, and documents from previous payers

POST `/v1/payroll/settlements`

Record an employee's request for an annual tax settlement, with deductions, credits, and documents from previous payers

MCP tool: `create-payroll-tax-settlement`

### Request body

`employeeId` string required

ID of the employee.

`taxYear` integer required min -9007199254740991 max 9007199254740991

`requestedOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`inputs` object

`previousPayers` object\[\]

`name` string required max 200 chars

`incomeHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`advancesHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`bonusesHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`documentReceivedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`filesReturn` boolean

`otherConcurrentPayer` boolean

`deductions` object

`donationsHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`interestHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`interestMonths` integer min 0 max 12

`pensionSupplementHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`supplementaryPensionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`pensionInstitutionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`lifeInsuranceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`longTermInvestmentHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`longTermCareHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`credits` object

`stoppedExecutionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`spouseMonths` integer min 0 max 12

`spouseZtppMonths` integer min 0 max 12

`disabilityFirstSecondMonths` integer min 0 max 12

`disabilityThirdMonths` integer min 0 max 12

`ztppMonths` integer min 0 max 12

`studentMonths` integer min 0 max 12

`childPlacement` object\[\]

`childName` string max 200 chars

`spentHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`households` integer min 1 max 10

`agreedCapHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`spouse` object | null

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`ztpp` boolean

`children` object\[\] | null

`months` integer required min 0 max 12

`ztppMonths` integer min 0 max 12

### Response · 201

`id` string required

`employeeId` string required

`employeeName` string required

`taxYear` integer required

`status` string required

`requestedOn` string required date

`source` string required

`deadlines` object required

`requestBy` string required date

`calculateBy` string required date

`payWithWageOf` object required

`year` integer required

`month` integer | null required

`inputs` object required

`deductions` object

`interestHaler` integer required

`lifeInsuranceHaler` integer

`previousPayers` object\[\]

`name` null | string required

`incomeHaler` integer required

`advancesHaler` integer required

`documentReceivedOn` string required date

`spouse` null | object required

`lastName` null | string required

`firstName` null | string required

`birthNumberMasked` null | string required

`credits` object

`spouseMonths` integer required

`children` object\[\]

`months` integer required

`result` null | object required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`r23` integer

`r24` integer

`r25` integer

`r26` integer

`r27` integer

`r28` integer

`r29` integer

`r30` integer

`r31` integer

`r32a` integer

`r32b` integer

`year` integer required

`months` integer required

`credits` object required

`ztppMonths` integer required

`disabilityThirdMonths` integer required

`disabilityFirstSecondMonths` integer required

`studentMonths` integer

`spouseMonths` integer

`children` object\[\] required

`months` integer required

`ztppMonths` integer

`problems` object\[\] required

`code` null | string required

`text` string required

`payoutHaler` integer required

`balanceHaler` integer required

`shortfallHaler` integer required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`belowPayoutMinimum` boolean required

`formPending` boolean

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`calculatedAt` null | string required date-time

`approvedAt` null | string required date-time

`payoutRunId` null | string required

`paidAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/settlements \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "taxYear": 2026
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "taxYear": 2026
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/settlements",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "taxYear": 2026
    },
)
data = response.json()
```

## Get one annual tax settlement with its calculation by the rows of tiskopis 25 5460/1

GET `/v1/payroll/settlements/{id}`

Get one annual tax settlement with its calculation by the rows of tiskopis 25 5460/1

MCP tool: `get-payroll-tax-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string required

`taxYear` integer required

`status` string required

`requestedOn` string required date

`source` string required

`deadlines` object required

`requestBy` string required date

`calculateBy` string required date

`payWithWageOf` object required

`year` integer required

`month` integer | null required

`inputs` object required

`deductions` object

`interestHaler` integer required

`lifeInsuranceHaler` integer

`previousPayers` object\[\]

`name` null | string required

`incomeHaler` integer required

`advancesHaler` integer required

`documentReceivedOn` string required date

`spouse` null | object required

`lastName` null | string required

`firstName` null | string required

`birthNumberMasked` null | string required

`credits` object

`spouseMonths` integer required

`children` object\[\]

`months` integer required

`result` null | object required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`r23` integer

`r24` integer

`r25` integer

`r26` integer

`r27` integer

`r28` integer

`r29` integer

`r30` integer

`r31` integer

`r32a` integer

`r32b` integer

`year` integer required

`months` integer required

`credits` object required

`ztppMonths` integer required

`disabilityThirdMonths` integer required

`disabilityFirstSecondMonths` integer required

`studentMonths` integer

`spouseMonths` integer

`children` object\[\] required

`months` integer required

`ztppMonths` integer

`problems` object\[\] required

`code` null | string required

`text` string required

`payoutHaler` integer required

`balanceHaler` integer required

`shortfallHaler` integer required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`belowPayoutMinimum` boolean required

`formPending` boolean

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`calculatedAt` null | string required date-time

`approvedAt` null | string required date-time

`payoutRunId` null | string required

`paidAt` null | string required date-time

```bash
curl https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Change the request date or the inputs of a settlement that is not approved. Any calculation must be run again

PATCH `/v1/payroll/settlements/{id}`

Change the request date or the inputs of a settlement that is not approved. Any calculation must be run again

MCP tool: `update-payroll-tax-settlement`

### Path parameters

`id` string required

### Request body

`requestedOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`inputs` object

`previousPayers` object\[\]

`name` string required max 200 chars

`incomeHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`advancesHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`bonusesHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`documentReceivedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`filesReturn` boolean

`otherConcurrentPayer` boolean

`deductions` object

`donationsHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`interestHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`interestMonths` integer min 0 max 12

`pensionSupplementHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`supplementaryPensionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`pensionInstitutionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`lifeInsuranceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`longTermInvestmentHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`longTermCareHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`credits` object

`stoppedExecutionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`spouseMonths` integer min 0 max 12

`spouseZtppMonths` integer min 0 max 12

`disabilityFirstSecondMonths` integer min 0 max 12

`disabilityThirdMonths` integer min 0 max 12

`ztppMonths` integer min 0 max 12

`studentMonths` integer min 0 max 12

`childPlacement` object\[\]

`childName` string max 200 chars

`spentHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`households` integer min 1 max 10

`agreedCapHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`spouse` object | null

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`ztpp` boolean

`children` object\[\] | null

`months` integer required min 0 max 12

`ztppMonths` integer min 0 max 12

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string required

`taxYear` integer required

`status` string required

`requestedOn` string required date

`source` string required

`deadlines` object required

`requestBy` string required date

`calculateBy` string required date

`payWithWageOf` object required

`year` integer required

`month` integer | null required

`inputs` object required

`deductions` object

`interestHaler` integer required

`lifeInsuranceHaler` integer

`previousPayers` object\[\]

`name` null | string required

`incomeHaler` integer required

`advancesHaler` integer required

`documentReceivedOn` string required date

`spouse` null | object required

`lastName` null | string required

`firstName` null | string required

`birthNumberMasked` null | string required

`credits` object

`spouseMonths` integer required

`children` object\[\]

`months` integer required

`result` null | object required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`r23` integer

`r24` integer

`r25` integer

`r26` integer

`r27` integer

`r28` integer

`r29` integer

`r30` integer

`r31` integer

`r32a` integer

`r32b` integer

`year` integer required

`months` integer required

`credits` object required

`ztppMonths` integer required

`disabilityThirdMonths` integer required

`disabilityFirstSecondMonths` integer required

`studentMonths` integer

`spouseMonths` integer

`children` object\[\] required

`months` integer required

`ztppMonths` integer

`problems` object\[\] required

`code` null | string required

`text` string required

`payoutHaler` integer required

`balanceHaler` integer required

`shortfallHaler` integer required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`belowPayoutMinimum` boolean required

`formPending` boolean

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`calculatedAt` null | string required date-time

`approvedAt` null | string required date-time

`payoutRunId` null | string required

`paidAt` null | string required date-time

```bash
curl -X PATCH https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "requestedOn": "2026-10-30",
  "inputs": {
    "previousPayers": [
      {
        "name": "Pekárna U Lípy s.r.o.",
        "incomeHaler": 1210000,
        "advancesHaler": 1210000,
        "documentReceivedOn": "2026-10-30"
      }
    ],
    "filesReturn": false,
    "otherConcurrentPayer": false
  }
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "requestedOn": "2026-10-30",
    "inputs": {
      "previousPayers": [
        {
          "name": "Pekárna U Lípy s.r.o.",
          "incomeHaler": 1210000,
          "advancesHaler": 1210000,
          "documentReceivedOn": "2026-10-30"
        }
      ],
      "filesReturn": false,
      "otherConcurrentPayer": false
    }
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "requestedOn": "2026-10-30",
        "inputs": {
            "previousPayers": [
                {
                    "name": "Pekárna U Lípy s.r.o.",
                    "incomeHaler": 1210000,
                    "advancesHaler": 1210000,
                    "documentReceivedOn": "2026-10-30"
                }
            ],
            "filesReturn": False,
            "otherConcurrentPayer": False
        }
    },
)
data = response.json()
```

## Delete a settlement that has not been approved

DELETE `/v1/payroll/settlements/{id}`

Delete a settlement that has not been approved

IrreversibleThis operation cannot be undone. MCP clients ask for confirmation first.

MCP tool: `delete-payroll-tax-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.delete(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Approve a calculated settlement. A refund is then paid by the next payroll run that locks; with nothing to pay the settlement closes

POST `/v1/payroll/settlements/{id}/approve`

Approve a calculated settlement. A refund is then paid by the next payroll run that locks; with nothing to pay the settlement closes

MCP tool: `approve-payroll-tax-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string required

`taxYear` integer required

`status` string required

`requestedOn` string required date

`source` string required

`deadlines` object required

`requestBy` string required date

`calculateBy` string required date

`payWithWageOf` object required

`year` integer required

`month` integer | null required

`inputs` object required

`deductions` object

`interestHaler` integer required

`lifeInsuranceHaler` integer

`previousPayers` object\[\]

`name` null | string required

`incomeHaler` integer required

`advancesHaler` integer required

`documentReceivedOn` string required date

`spouse` null | object required

`lastName` null | string required

`firstName` null | string required

`birthNumberMasked` null | string required

`credits` object

`spouseMonths` integer required

`children` object\[\]

`months` integer required

`result` null | object required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`r23` integer

`r24` integer

`r25` integer

`r26` integer

`r27` integer

`r28` integer

`r29` integer

`r30` integer

`r31` integer

`r32a` integer

`r32b` integer

`year` integer required

`months` integer required

`credits` object required

`ztppMonths` integer required

`disabilityThirdMonths` integer required

`disabilityFirstSecondMonths` integer required

`studentMonths` integer

`spouseMonths` integer

`children` object\[\] required

`months` integer required

`ztppMonths` integer

`problems` object\[\] required

`code` null | string required

`text` string required

`payoutHaler` integer required

`balanceHaler` integer required

`shortfallHaler` integer required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`belowPayoutMinimum` boolean required

`formPending` boolean

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`calculatedAt` null | string required date-time

`approvedAt` null | string required date-time

`payoutRunId` null | string required

`paidAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/approve \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/approve', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/approve",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Calculate the settlement from the locked months of the tax year and the entered inputs. Returns whatever bars it in \`problems\`

POST `/v1/payroll/settlements/{id}/calculate`

Calculate the settlement from the locked months of the tax year and the entered inputs. Returns whatever bars it in \`problems\`

MCP tool: `calculate-payroll-tax-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string required

`taxYear` integer required

`status` string required

`requestedOn` string required date

`source` string required

`deadlines` object required

`requestBy` string required date

`calculateBy` string required date

`payWithWageOf` object required

`year` integer required

`month` integer | null required

`inputs` object required

`deductions` object

`interestHaler` integer required

`lifeInsuranceHaler` integer

`previousPayers` object\[\]

`name` null | string required

`incomeHaler` integer required

`advancesHaler` integer required

`documentReceivedOn` string required date

`spouse` null | object required

`lastName` null | string required

`firstName` null | string required

`birthNumberMasked` null | string required

`credits` object

`spouseMonths` integer required

`children` object\[\]

`months` integer required

`result` null | object required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`r23` integer

`r24` integer

`r25` integer

`r26` integer

`r27` integer

`r28` integer

`r29` integer

`r30` integer

`r31` integer

`r32a` integer

`r32b` integer

`year` integer required

`months` integer required

`credits` object required

`ztppMonths` integer required

`disabilityThirdMonths` integer required

`disabilityFirstSecondMonths` integer required

`studentMonths` integer

`spouseMonths` integer

`children` object\[\] required

`months` integer required

`ztppMonths` integer

`problems` object\[\] required

`code` null | string required

`text` string required

`payoutHaler` integer required

`balanceHaler` integer required

`shortfallHaler` integer required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`belowPayoutMinimum` boolean required

`formPending` boolean

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`calculatedAt` null | string required date-time

`approvedAt` null | string required date-time

`payoutRunId` null | string required

`paidAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/calculate \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/calculate', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/calculate",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Výpočet daně a daňového zvýhodnění of a settlement as PDF, by the rows of tiskopis 25 5460/1 vzor 29. The rows match, the page is not the printed form

GET `/v1/payroll/settlements/{id}/calculation.pdf`

Výpočet daně a daňového zvýhodnění of a settlement as PDF, by the rows of tiskopis 25 5460/1 vzor 29. The rows match, the page is not the printed form

MCP tool: `get-payroll-tax-settlement-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/calculation.pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/calculation.pdf', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/calculation.pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Return an approved settlement to calculated. Refused once a locked run has paid it: unlock that run first

POST `/v1/payroll/settlements/{id}/reopen`

Return an approved settlement to calculated. Refused once a locked run has paid it: unlock that run first

MCP tool: `reopen-payroll-tax-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`employeeId` string required

`employeeName` string required

`taxYear` integer required

`status` string required

`requestedOn` string required date

`source` string required

`deadlines` object required

`requestBy` string required date

`calculateBy` string required date

`payWithWageOf` object required

`year` integer required

`month` integer | null required

`inputs` object required

`deductions` object

`interestHaler` integer required

`lifeInsuranceHaler` integer

`previousPayers` object\[\]

`name` null | string required

`incomeHaler` integer required

`advancesHaler` integer required

`documentReceivedOn` string required date

`spouse` null | object required

`lastName` null | string required

`firstName` null | string required

`birthNumberMasked` null | string required

`credits` object

`spouseMonths` integer required

`children` object\[\]

`months` integer required

`result` null | object required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`r23` integer

`r24` integer

`r25` integer

`r26` integer

`r27` integer

`r28` integer

`r29` integer

`r30` integer

`r31` integer

`r32a` integer

`r32b` integer

`year` integer required

`months` integer required

`credits` object required

`ztppMonths` integer required

`disabilityThirdMonths` integer required

`disabilityFirstSecondMonths` integer required

`studentMonths` integer

`spouseMonths` integer

`children` object\[\] required

`months` integer required

`ztppMonths` integer

`problems` object\[\] required

`code` null | string required

`text` string required

`payoutHaler` integer required

`balanceHaler` integer required

`shortfallHaler` integer required

`bonusTopupHaler` integer required

`overpaymentHaler` integer required

`belowPayoutMinimum` boolean required

`formPending` boolean

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`calculatedAt` null | string required date-time

`approvedAt` null | string required date-time

`payoutRunId` null | string required

`paidAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Work out a settlement without recording it, also for a year whose form is not published yet (2027), with the student credit and the child placement credit (§ 35bc, § 35bd ZDP). Nothing is stored and no form or filing comes of it: \`formPending\` says so

POST `/v1/payroll/settlements/preview`

Work out a settlement without recording it, also for a year whose form is not published yet (2027), with the student credit and the child placement credit (§ 35bc, § 35bd ZDP). Nothing is stored and no form or filing comes of it: \`formPending\` says so

MCP tool: `preview-payroll-tax-settlement`

### Request body

`employeeId` string required

ID of the employee.

`taxYear` integer required min -9007199254740991 max 9007199254740991

`inputs` object

`previousPayers` object\[\]

`name` string required max 200 chars

`incomeHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`advancesHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`bonusesHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`documentReceivedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`filesReturn` boolean

`otherConcurrentPayer` boolean

`deductions` object

`donationsHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`interestHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`interestMonths` integer min 0 max 12

`pensionSupplementHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`supplementaryPensionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`pensionInstitutionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`lifeInsuranceHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`longTermInvestmentHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`longTermCareHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`credits` object

`stoppedExecutionHaler` integer min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`spouseMonths` integer min 0 max 12

`spouseZtppMonths` integer min 0 max 12

`disabilityFirstSecondMonths` integer min 0 max 12

`disabilityThirdMonths` integer min 0 max 12

`ztppMonths` integer min 0 max 12

`studentMonths` integer min 0 max 12

`childPlacement` object\[\]

`childName` string max 200 chars

`spentHaler` integer required min 0 max 9007199254740991

Integer amount in haléře: 100 = 1 Kč.

`households` integer min 1 max 10

`agreedCapHaler` integer | null

Integer amount in haléře: 100 = 1 Kč.

`spouse` object | null

`firstName` string required max 200 chars

`lastName` string required max 200 chars

`birthNumber` string | null

`birthDate` string | null

Date as YYYY-MM-DD.

`ztpp` boolean

`children` object\[\] | null

`months` integer required min 0 max 12

`ztppMonths` integer min 0 max 12

### Response · 200

`employeeId` null | string required

`taxYear` integer required

`months` integer required

`year` integer required

`formPending` boolean required

`rows` object required

`r1` integer required

`r2` integer required

`r3` integer required

`r4` integer required

`r5` integer required

`r6` integer required

`r7` integer required

`r8` integer required

`r9` integer required

`r10` integer required

`r11` integer required

`r12` integer required

`r13` integer required

`r14` integer required

`r15` integer required

`r16` integer required

`r17` integer required

`r18` integer required

`r19` integer required

`r20` integer required

`r21` integer required

`r22` integer required

`studentCreditHaler` integer required

`childPlacementHaler` integer required

`r23` integer required

`overpaymentHaler` integer required

`bonusTopupHaler` integer required

`payoutHaler` integer required

`shortfallHaler` integer required

`balanceHaler` integer required

`belowPayoutMinimum` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/settlements/preview \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "taxYear": 2026
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/settlements/preview', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "taxYear": 2026
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/settlements/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "employeeId": "yee_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "taxYear": 2026
    },
)
data = response.json()
```

## List eNeschopenka sick notes

GET `/v1/payroll/sick-notes`

List eNeschopenka sick notes

MCP tool: `list-payroll-sick-notes`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`status` "open" | "closed" | "cancelled"

### Response · 200

`data` object\[\] required

`object` "payroll\_sick\_note" required

`id` string required

`employeeId` null | string required

`decisionNumber` string required

`name` null | string required

`birthDate` null | string required date

`from` string required date

`to` string required date

`status` string required

`workAccident` boolean required

`note` null | string required

`insertedAt` string | null required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

More rows follow. Ask again with offset + the number of rows received.

```bash
curl https://api.damedoklad.cz/v1/payroll/sick-notes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/sick-notes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## HZUPN20: the employer's report when a sick note ends (§ 97 odst. 4 zák. 187/2006 Sb.), valid against the ČSSZ XSD. You send it: nothing goes to ČSSZ from here

POST `/v1/payroll/sick-notes/{id}/hzupn.xml`

HZUPN20: the employer's report when a sick note ends (§ 97 odst. 4 zák. 187/2006 Sb.), valid against the ČSSZ XSD. You send it: nothing goes to ČSSZ from here

MCP tool: `create-payroll-sick-end-xml`

### Path parameters

`id` string required

### Request body

`returned` boolean required

`returnDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`reason` string max 200 chars

`hoursWorked` number min 0 max 24

`shiftHours` number min 0 max 24

`workedIntervals` object\[\]

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`correction` boolean

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/sick-notes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/hzupn.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "returned": false
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/hzupn.xml', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "returned": false
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/sick-notes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/hzupn.xml",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "returned": False
    },
)
content = response.content
```

## Whether eNeschopenka notifications can be read straight from ČSSZ (DZDPN20-V2), on which channel, and the latest queries. Off unless the operator enabled it

GET `/v1/payroll/sick-notes/direct`

Whether eNeschopenka notifications can be read straight from ČSSZ (DZDPN20-V2), on which channel, and the latest queries. Off unless the operator enabled it

MCP tool: `get-payroll-dzdpn-status`

### Response · 200

`enabled` boolean required

`channelEnabled` boolean required

`mode` null | string required

`certificateSubject` null | string required

`certificateNotAfter` null | string required date-time

`queries` object\[\] required

`object` "payroll\_dzdpn\_query" required

`id` string required

`from` string required date

`to` string required date

`mode` string required

`status` string required

`message` null | string required

`notificationCount` integer required

`importedCount` integer required

`createdAt` string required date-time

`answeredAt` null | string required date-time

```bash
curl https://api.damedoklad.cz/v1/payroll/sick-notes/direct \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes/direct', {
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.get(
    "https://api.damedoklad.cz/v1/payroll/sick-notes/direct",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Ask ČSSZ for the eNeschopenka notifications of up to 31 days (DZDPN20-V2), signed and encrypted over the cssz\_vrep channel. ČSSZ answers later: read it with the poll operation. ČSSZ refuses a repeated request the same day, and so does the app

POST `/v1/payroll/sick-notes/direct`

Ask ČSSZ for the eNeschopenka notifications of up to 31 days (DZDPN20-V2), signed and encrypted over the cssz\_vrep channel. ČSSZ answers later: read it with the poll operation. ČSSZ refuses a repeated request the same day, and so does the app

MCP tool: `create-payroll-dzdpn-query`

### Request body

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`from` string required date

`to` string required date

`mode` string required

`status` string required

`message` null | string required

`notificationCount` integer required

`importedCount` integer required

`createdAt` string required date-time

`answeredAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/sick-notes/direct \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "from": "2026-10-30",
  "to": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes/direct', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "from": "2026-10-30",
    "to": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/sick-notes/direct",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "from": "2026-10-30",
        "to": "2026-10-30"
    },
)
data = response.json()
```

## See whether ČSSZ has answered a query. An answer is decrypted, read into sick notes as a file import would be, and the transaction closed. What was imported is matched to employees; the answer itself is not stored

POST `/v1/payroll/sick-notes/direct/{id}/poll`

See whether ČSSZ has answered a query. An answer is decrypted, read into sick notes as a file import would be, and the transaction closed. What was imported is matched to employees; the answer itself is not stored

MCP tool: `poll-payroll-dzdpn-query`

### Path parameters

`id` string required

### Response · 200

`id` string required

`from` string required date

`to` string required date

`mode` string required

`status` string required

`message` null | string required

`notificationCount` integer required

`importedCount` integer required

`createdAt` string required date-time

`answeredAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/sick-notes/direct/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/poll \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes/direct/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/poll', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
  },
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/sick-notes/direct/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/poll",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Read eNeschopenka notifications from ČSSZ, a data box XML or a DZDPN20-V2 answer, into sick notes, and match them to employees. Importing the same file again changes nothing. Nothing goes to ČSSZ

POST `/v1/payroll/sick-notes/import`

Read eNeschopenka notifications from ČSSZ, a data box XML or a DZDPN20-V2 answer, into sick notes, and match them to employees. Importing the same file again changes nothing. Nothing goes to ČSSZ

MCP tool: `import-payroll-sick-notes`

### Request body

`xml` string required max 5000000 chars

### Response · 201

`notificationCount` integer required

`imported` integer required

`updated` integer required

`ignored` integer required

`unmatched` object\[\] required

`object` "payroll\_sick\_note" required

`id` string required

`employeeId` null | string required

`decisionNumber` string required

`name` null | string required

`birthDate` null | string required date

`from` string required date

`to` string required date

`status` string required

`workAccident` boolean required

`note` null | string required

`insertedAt` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/sick-notes/import \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "xml": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes/import', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "xml": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/sick-notes/import",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "xml": "string"
    },
)
data = response.json()
```

## Mark the days of matched sick notes as sick in attendance. An open note runs to today, so inserting again extends it. A locked month or another absence on the day is left alone and reported

POST `/v1/payroll/sick-notes/insert`

Mark the days of matched sick notes as sick in attendance. An open note runs to today, so inserting again extends it. A locked month or another absence on the day is left alone and reported

MCP tool: `insert-payroll-sick-notes`

### Request body

`noteIds` string\[\]

### Response · 200

`insertedCount` integer required

`results` object\[\] required

`id` string required

`name` null | string required

`conflicts` string\[\] required

`lockedMonths` string\[\] required

```bash
curl -X POST https://api.damedoklad.cz/v1/payroll/sick-notes/insert \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "noteIds": [
    "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payroll/sick-notes/insert', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "noteIds": [
      "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payroll/sick-notes/insert",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "noteIds": [
            "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        ]
    },
)
data = response.json()
```
