# Accounting · DameDoklad API

> Operations in the Accounting group.

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

# Accounting

Operations in the Accounting group.

## Whether the books follow the business decree 500/2002 Sb., the non-profit decree 504/2002 Sb., or the contributory organisation forms of 410/2009 Sb.

GET `/v1/ledger/accounting-kind`

Whether the books follow the business decree 500/2002 Sb., the non-profit decree 504/2002 Sb., or the contributory organisation forms of 410/2009 Sb.

MCP tool: `get-accounting-kind`

### Response · 200

`kind` string required

`regime` string required

```bash
curl https://api.damedoklad.cz/v1/ledger/accounting-kind \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accounting-kind', {
  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/ledger/accounting-kind",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Set the books to the business, non-profit (504/2002 Sb.), or contributory organisation (410/2009 Sb.) chart and statements. Only while the books are empty

POST `/v1/ledger/accounting-kind`

Set the books to the business, non-profit (504/2002 Sb.), or contributory organisation (410/2009 Sb.) chart and statements. Only while the books are empty. Podvojné účetnictví only. It seeds the chart, the activities Hlavní and Hospodářská činnost, and the closing accounts of that decree: 961, 962, 963 for a non-profit, 491, 492, 493 for a contributory organisation.

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

MCP tool: `set-accounting-kind`

### Request body

`kind` "business" | "nonprofit" | "contributory" required

`confirm` true required

### Response · 200

`kind` string required

`regime` string required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/accounting-kind \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "business",
  "confirm": true
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accounting-kind', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "business",
    "confirm": true
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/accounting-kind",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "business",
        "confirm": True
    },
)
data = response.json()
```

## List the chart of accounts (účtová osnova), seeded with Czech synthetic accounts, plus analytic accounts

GET `/v1/ledger/accounts`

List the chart of accounts (účtová osnova), seeded with Czech synthetic accounts, plus analytic accounts

MCP tool: `list-accounts`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`type` "asset" | "liability" | "expense" | "revenue" | "closing" | "off\_balance"

`active` "true" | "false"

### Response · 200

`data` object\[\] required

`object` "account" required

`id` string required

`number` string required

`name` string required

`nameEn` null | string required

`type` string required

`isTaxable` boolean required

`isSystem` boolean required

`isActive` boolean required

`isAnalytic` boolean required

`statementRow` null | string required

`functionRow` null | string required

`trackSaldo` boolean 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/ledger/accounts \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accounts', {
  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/ledger/accounts",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create an analytic account under a synthetic one (343100) or a new synthetic account

POST `/v1/ledger/accounts`

Create an analytic account under a synthetic one (343100) or a new synthetic account

MCP tool: `create-account`

### Request body

`number` string required

`name` string required max 200 chars

`nameEn` string max 200 chars

`type` "asset" | "liability" | "expense" | "revenue" | "closing" | "off\_balance"

`isTaxable` boolean

`statementRow` string max 24 chars

### Response · 201

`id` string required

`number` string required

`name` string required

`nameEn` null | string required

`type` string required

`isTaxable` boolean required

`isSystem` boolean required

`isActive` boolean required

`isAnalytic` boolean required

`statementRow` null | string required

`functionRow` null | string required

`trackSaldo` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accounts', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "number": "518",
    "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/ledger/accounts",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "number": "518",
        "name": "Pekárna U Lípy s.r.o."
    },
)
data = response.json()
```

## Update an account you created. System synthetic accounts are read-only

PATCH `/v1/ledger/accounts/{id}`

Update an account you created. System synthetic accounts are read-only

MCP tool: `update-account`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`nameEn` string max 200 chars

`isTaxable` boolean

`isActive` boolean

`statementRow` string | null

`functionRow` string | null

`trackSaldo` boolean

### Response · 200

`id` string required

`number` string required

`name` string required

`nameEn` null | string required

`type` string required

`isTaxable` boolean required

`isSystem` boolean required

`isActive` boolean required

`isAnalytic` boolean required

`statementRow` null | string required

`functionRow` null | string required

`trackSaldo` boolean required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "nameEn": "Pekárna U Lípy s.r.o.",
  "isTaxable": false
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accounts/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.",
    "nameEn": "Pekárna U Lípy s.r.o.",
    "isTaxable": false
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "nameEn": "Pekárna U Lípy s.r.o.",
        "isTaxable": False
    },
)
data = response.json()
```

## Delete an unused account you created

DELETE `/v1/ledger/accounts/{id}`

Delete an unused account you created

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

MCP tool: `delete-account`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accounts/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/ledger/accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List časové rozlišení and dohadné položky with what is posted and what remains

GET `/v1/ledger/accruals`

List časové rozlišení and dohadné položky with what is posted and what remains

MCP tool: `list-accrual-schedules`

### 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` "active" | "finished" | "cancelled"

### Response · 200

`data` object\[\] required

`object` "accrual\_schedule" required

`id` string required

`kind` string required

`name` string required

`totalHaler` integer required

`balanceAccount` string required

`resultAccount` string required

`startMonth` string required

`months` integer required

`reverseOn` null | string required date

`initialEntryId` null | string required

`contactId` string | null required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`status` string required

`createdAt` string required date-time

`postedHaler` integer required

`remainingHaler` integer | null required

`nextDueOn` null | string required date

`lines` object\[\] required

`id` string required

`position` integer | null required

`kind` string required

`dueOn` null | string required date

`amountHaler` integer | null required

`entryId` null | string required

`postedAt` null | 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/ledger/accruals \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accruals', {
  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/ledger/accruals",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Schedule monthly entries for 381, 383, 384, or 385, or one estimate on 388 or 389 with an optional reversal. Whatever is already due posts at once

POST `/v1/ledger/accruals`

Schedule monthly entries for 381, 383, 384, or 385, or one estimate on 388 or 389 with an optional reversal. Whatever is already due posts at once. Set initialEntryDate when the document was booked straight to the result, so the whole amount moves to 381 or 384 first. The plan is equal months on the last day of each month, and the last month takes the rounding.

MCP tool: `create-accrual-schedule`

### Request body

`kind` "prepaid\_expense" | "accrued\_expense" | "deferred\_revenue" | "accrued\_revenue" | "estimated\_payable" | "estimated\_receivable" required

`name` string required max 200 chars

`totalHaler` integer required max 9007199254740991

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

`resultAccount` string required

`balanceAccount` string

`startMonth` string required

`months` integer min 1 max 120

`reverseOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`initialEntryDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`contactId` string

ID of the contact. Find it with list-contacts.

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

### Response · 201

`id` string required

`kind` string required

`name` string required

`totalHaler` integer required

`balanceAccount` string required

`resultAccount` string required

`startMonth` string required

`months` integer required

`reverseOn` null | string required date

`initialEntryId` null | string required

`contactId` string | null required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`status` string required

`createdAt` string required date-time

`postedHaler` integer required

`remainingHaler` integer | null required

`nextDueOn` null | string required date

`lines` object\[\] required

`id` string required

`position` integer | null required

`kind` string required

`dueOn` null | string required date

`amountHaler` integer | null required

`entryId` null | string required

`postedAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/accruals \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "kind": "prepaid_expense",
  "name": "Pekárna U Lípy s.r.o.",
  "totalHaler": 1210000,
  "resultAccount": "518",
  "startMonth": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accruals', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "kind": "prepaid_expense",
    "name": "Pekárna U Lípy s.r.o.",
    "totalHaler": 1210000,
    "resultAccount": "518",
    "startMonth": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/accruals",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "prepaid_expense",
        "name": "Pekárna U Lípy s.r.o.",
        "totalHaler": 1210000,
        "resultAccount": "518",
        "startMonth": "2026-10-30"
    },
)
data = response.json()
```

## Stop an accrual schedule. Rows already posted stay in the books; reverse them in the journal if they should go too

DELETE `/v1/ledger/accruals/{id}`

Stop an accrual schedule. Rows already posted stay in the books; reverse them in the journal if they should go too

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

MCP tool: `cancel-accrual-schedule`

### Path parameters

`id` string required

### Response · 200

`id` string required

`kind` string required

`name` string required

`totalHaler` integer required

`balanceAccount` string required

`resultAccount` string required

`startMonth` string required

`months` integer required

`reverseOn` null | string required date

`initialEntryId` null | string required

`contactId` string | null required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`status` string required

`createdAt` string required date-time

`postedHaler` integer required

`remainingHaler` integer | null required

`nextDueOn` null | string required date

`lines` object\[\] required

`id` string required

`position` integer | null required

`kind` string required

`dueOn` null | string required date

`amountHaler` integer | null required

`entryId` null | string required

`postedAt` null | string required date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/accruals/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/ledger/accruals/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Post every planned accrual row due by a date, for example everything up to the year end

POST `/v1/ledger/accruals/run`

Post every planned accrual row due by a date, for example everything up to the year end

MCP tool: `run-due-accruals`

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`posted` integer required

`skipped` object\[\] required

`scheduleId` string required

`dueOn` null | string required date

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/accruals/run \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/accruals/run",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30"
    },
)
data = response.json()
```

## List opravné položky with their balance, statutory and accounting ones apart

GET `/v1/ledger/allowances`

List opravné položky with their balance, statutory and accounting ones apart

MCP tool: `list-allowances`

### 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` "allowance" required

`id` string required

`kind` string required

`targetType` string required

`legalBasis` null | string required

`documentType` null | string required

`documentId` null | string required

`contactId` null | string required

`label` null | string required

`allowanceAccount` string required

`costAccount` string required

`baseHaler` integer | null required

`balanceHaler` integer required

`createdAt` string required date-time

`operations` object\[\] required

`object` "allowance\_operation" required

`id` string required

`allowanceId` string required

`kind` string required

`date` string required date

`amountHaler` integer | null required

`reason` null | string required

`note` null | string required

`journalEntryId` null | string required

`reversed` boolean 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/ledger/allowances \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances', {
  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/ledger/allowances",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create an opravná položka to a receivable or an asset and post MD 558 or 559 / D the allowance account

POST `/v1/ledger/allowances`

Create an opravná položka to a receivable or an asset and post MD 558 or 559 / D the allowance account. Statutory ones (zákon 593/1992 Sb.) are for receivables, are checked against § 8, § 8a, and § 8c, and are a tax cost. Accounting ones are not a tax cost and reach the income tax worksheet.

MCP tool: `create-allowance`

### Request body

`kind` "statutory" | "accounting" required

`targetType` "receivable" | "fixed\_intangible" | "fixed\_tangible" | "in\_progress\_intangible" | "in\_progress\_tangible" | "advance\_paid" | "financial" | "material" | "work\_in\_progress" | "semi\_finished" | "products" | "animals" | "goods" required

`legalBasis` "8" | "8a" | "8c"

`documentType` "invoice" | "other\_receivable" | "debit\_note"

`documentId` string

ID of the document.

`contactId` string

ID of the contact. Find it with list-contacts.

`label` string max 240 chars

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`amountHaler` integer required max 9007199254740991

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

`costAccount` string

`note` string max 240 chars

`insolvencyFiled` boolean

`notRelatedParty` boolean

### Response · 201

`id` string required

`kind` string required

`targetType` string required

`legalBasis` null | string required

`documentType` null | string required

`documentId` null | string required

`contactId` null | string required

`label` null | string required

`allowanceAccount` string required

`costAccount` string required

`baseHaler` integer | null required

`balanceHaler` integer required

`createdAt` string required date-time

`operations` object\[\] required

`object` "allowance\_operation" required

`id` string required

`allowanceId` string required

`kind` string required

`date` string required date

`amountHaler` integer | null required

`reason` null | string required

`note` null | string required

`journalEntryId` null | string required

`reversed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/allowances \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "kind": "statutory",
  "targetType": "receivable",
  "date": "2026-10-30",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "kind": "statutory",
    "targetType": "receivable",
    "date": "2026-10-30",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/allowances",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "statutory",
        "targetType": "receivable",
        "date": "2026-10-30",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Take back an allowance operation with a reversal entry. A newer operation has to go first

POST `/v1/ledger/allowances/{id}/operations/{operationId}/reverse`

Take back an allowance operation with a reversal entry. A newer operation has to go first

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

MCP tool: `reverse-allowance-operation`

### Path parameters

`id` string required

`operationId` string required

ID of the operation.

### Response · 200

`id` string required

`kind` string required

`targetType` string required

`legalBasis` null | string required

`documentType` null | string required

`documentId` null | string required

`contactId` null | string required

`label` null | string required

`allowanceAccount` string required

`costAccount` string required

`baseHaler` integer | null required

`balanceHaler` integer required

`createdAt` string required date-time

`operations` object\[\] required

`object` "allowance\_operation" required

`id` string required

`allowanceId` string required

`kind` string required

`date` string required date

`amountHaler` integer | null required

`reason` null | string required

`note` null | string required

`journalEntryId` null | string required

`reversed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/allowances/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/operations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/operations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse', {
  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/ledger/allowances/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/operations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Settle an opravná položka, in part or whole, when the receivable is paid or written off or the reason ends: MD allowance / D 558 or 559

POST `/v1/ledger/allowances/{id}/settle`

Settle an opravná položka, in part or whole, when the receivable is paid or written off or the reason ends: MD allowance / D 558 or 559. Writing off the receivable itself is createReceivableWriteOff, which settles its allowances on the way.

MCP tool: `settle-allowance`

### Path parameters

`id` string required

### Request body

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`amountHaler` integer required max 9007199254740991

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

`reason` "paid" | "written\_off" | "lapsed" | "no\_longer\_justified" | "other" required

`note` string max 240 chars

### Response · 201

`id` string required

`kind` string required

`targetType` string required

`legalBasis` null | string required

`documentType` null | string required

`documentId` null | string required

`contactId` null | string required

`label` null | string required

`allowanceAccount` string required

`costAccount` string required

`baseHaler` integer | null required

`balanceHaler` integer required

`createdAt` string required date-time

`operations` object\[\] required

`object` "allowance\_operation" required

`id` string required

`allowanceId` string required

`kind` string required

`date` string required date

`amountHaler` integer | null required

`reason` null | string required

`note` null | string required

`journalEntryId` null | string required

`reversed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/allowances/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/settle \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30",
  "amountHaler": 1210000,
  "reason": "paid"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/allowances/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/settle",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30",
        "amountHaler": 1210000,
        "reason": "paid"
    },
)
data = response.json()
```

## Unpaid receivables at a date, with the statutory allowance each one could have: § 8a at more than 18 or 30 months, § 8c for small claims

GET `/v1/ledger/allowances/candidates`

Unpaid receivables at a date, with the statutory allowance each one could have: § 8a at more than 18 or 30 months, § 8c for small claims. What the books show. Whether the debtor is a related person, or is in insolvency, you confirm when creating the allowance.

MCP tool: `get-allowance-candidates`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`rows` object\[\] required

`documentType` null | string required

`documentId` null | string required

`number` null | string required

`contactId` null | string required

`contactName` null | string required

`dueDate` null | string required date

`originalHaler` integer required

`unpaidHaler` integer required

`monthsPastDue` integer required

`statutoryBalanceHaler` integer required

`accountingBalanceHaler` integer required

`statutoryOptions` object\[\] required

`basis` string required

`percent` integer | null required

`maxHaler` integer required

`roomHaler` integer required

`hasDueDebtToDebtor` boolean required

`currency` null | string

`exchangeRate` null | string

`unpaidDocumentHaler` integer

`limitation` object

`basis` string required

`limitationDate` string required date

`daysLeft` integer required

`state` string required

`facts` any required

Null in every recorded response.

`allowanceToRelease` boolean

```bash
curl https://api.damedoklad.cz/v1/ledger/allowances/candidates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/candidates', {
  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/ledger/allowances/candidates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Promlčení of unpaid receivables at a date: when each one is time-barred, on what basis, and which allowances that cancels

GET `/v1/ledger/allowances/limitations`

Promlčení of unpaid receivables at a date: when each one is time-barred, on what basis, and which allowances that cancels. Three years from the due date (§ 629 občanského zákoníku) unless facts you recorded say otherwise. With \`days\`, only what ends within that many days, or is already barred or suspended.

MCP tool: `get-receivable-limitations`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`days` integer min 1 max 3650

### Response · 200

`date` string required date

`warningDays` integer required

`rows` object\[\] required

`documentType` null | string required

`documentId` null | string required

`number` null | string required

`contactId` null | string required

`contactName` null | string required

`dueDate` null | string required date

`currency` null | string required

`exchangeRate` null | string required

`unpaidDocumentHaler` integer required

`originalHaler` integer required

`unpaidHaler` integer required

`monthsPastDue` integer required

`statutoryBalanceHaler` integer required

`accountingBalanceHaler` integer required

`statutoryOptions` object\[\] required

`basis` string required

`percent` integer | null required

`maxHaler` integer required

`roomHaler` integer required

`hasDueDebtToDebtor` boolean required

`limitation` object required

`basis` string required

`limitationDate` null | string required date

`daysLeft` integer | null required

`state` string required

`facts` null | object required

`acknowledgedOn` null | string required date

`acknowledgedUntil` string | null required

`awardedDueOn` string | null required

`proceedingsFrom` null | string required date

`proceedingsTo` string | null required

`agreedYears` integer | null required

`note` null | string required

`suspendedSince` string date

`allowanceToRelease` boolean required

`counts` object required

`expired` integer required

`soon` integer required

`suspended` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/allowances/limitations \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/limitations', {
  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/ledger/allowances/limitations",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record what changes the promlčení of one receivable: an acknowledged debt, a decision, proceedings, or an agreed period

PUT `/v1/ledger/allowances/limitations/{id}`

Record what changes the promlčení of one receivable: an acknowledged debt, a decision, proceedings, or an agreed period. The id is the document. These are the facts a person knows; the date follows from them.

MCP tool: `set-receivable-limitation`

### Path parameters

`id` string required

### Request body

`documentType` "invoice" | "other\_receivable" | "debit\_note" required

`acknowledgedOn` string | null

Date as YYYY-MM-DD.

`acknowledgedUntil` string | null

`awardedDueOn` string | null

Date as YYYY-MM-DD.

`proceedingsFrom` string | null

Date as YYYY-MM-DD.

`proceedingsTo` string | null

Date as YYYY-MM-DD.

`agreedYears` integer | null

`note` string | null

### Response · 200

`documentId` null | string required

`documentType` null | string required

`facts` object required

`acknowledgedOn` null | string required date

`acknowledgedUntil` string | null required

`awardedDueOn` string | null required

`proceedingsFrom` null | string required date

`proceedingsTo` string | null required

`agreedYears` integer | null required

`note` null | string required

`limitation` object required

`basis` string required

`limitationDate` null | string required date

`daysLeft` integer | null required

`state` string required

`suspendedSince` string date

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/allowances/limitations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "documentType": "invoice"
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/allowances/limitations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "documentType": "invoice"
    },
)
data = response.json()
```

## What a year’s opravné položky do to the income tax base: creation of accounting ones added back, their release taken off

GET `/v1/ledger/allowances/tax-effect`

What a year’s opravné položky do to the income tax base: creation of accounting ones added back, their release taken off

MCP tool: `get-allowance-tax-effect`

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`year` integer required

`statutoryCreatedHaler` integer required

`statutoryReleasedHaler` integer required

`accountingCreatedHaler` integer required

`accountingReleasedHaler` integer required

`addBackHaler` integer required

`deductHaler` integer required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/tax-effect', {
  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/ledger/allowances/tax-effect",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List receivables written off, with the deductible part of each

GET `/v1/ledger/allowances/write-offs`

List receivables written off, with the deductible part of each

MCP tool: `list-receivable-write-offs`

### 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` "receivable\_write\_off" required

`id` string required

`documentType` null | string required

`documentId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`contactName` null | string required

`date` string required date

`ground` null | string required

`amountHaler` integer | null required

`deductibleHaler` integer required

`nonDeductibleHaler` integer required

`timeBarred` boolean required

`note` string | null required

`reversed` boolean required

`createdAt` 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/ledger/allowances/write-offs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/write-offs', {
  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/ledger/allowances/write-offs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Write off a receivable: MD 546100 tax-deductible or 546200 not / D 311, settling its allowances, and closing the document

POST `/v1/ledger/allowances/write-offs`

Write off a receivable: MD 546100 tax-deductible or 546200 not / D 311, settling its allowances, and closing the document. A ground 1 to 7 of § 24 odst. 2 písm. y) ZDP needs conditionsConfirmed: the books cannot show them. Without a ground only the part covered by a statutory allowance is deductible. VAT is untouched: § 46 ZDPH has its own correction.

MCP tool: `create-receivable-write-off`

### Request body

`documentType` "invoice" | "other\_receivable" | "debit\_note" required

`documentId` string required

ID of the document.

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`ground` "1" | "2" | "3" | "4" | "5" | "6" | "7" | "none" required

`amountHaler` integer max 9007199254740991

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

`note` string max 240 chars

`conditionsConfirmed` boolean

### Response · 201

`id` string required

`documentType` null | string required

`documentId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`contactName` null | string required

`date` string required date

`ground` null | string required

`amountHaler` integer | null required

`deductibleHaler` integer required

`nonDeductibleHaler` integer required

`timeBarred` boolean required

`note` string | null required

`reversed` boolean required

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/allowances/write-offs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "documentType": "invoice",
  "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "date": "2026-10-30",
  "ground": "1"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/write-offs', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "documentType": "invoice",
    "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "date": "2026-10-30",
    "ground": "1"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/allowances/write-offs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "documentType": "invoice",
        "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "date": "2026-10-30",
        "ground": "1"
    },
)
data = response.json()
```

## Take a write-off back: the document is open again and the allowance operations it settled are reversed

POST `/v1/ledger/allowances/write-offs/{id}/reverse`

Take a write-off back: the document is open again and the allowance operations it settled are reversed

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

MCP tool: `reverse-receivable-write-off`

### Path parameters

`id` string required

### Response · 200

`id` string required

`documentType` null | string required

`documentId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`contactName` null | string required

`date` string required date

`ground` null | string required

`amountHaler` integer | null required

`deductibleHaler` integer required

`nonDeductibleHaler` integer required

`timeBarred` boolean required

`note` string | null required

`reversed` boolean required

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/allowances/write-offs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/write-offs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse', {
  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/ledger/allowances/write-offs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The grounds of § 24 odst. 2 písm. y) ZDP on which writing off a receivable is a tax cost

GET `/v1/ledger/allowances/write-offs/grounds`

The grounds of § 24 odst. 2 písm. y) ZDP on which writing off a receivable is a tax cost

MCP tool: `get-write-off-grounds`

### Response · 200

`grounds` object\[\] required

`ground` null | string required

`cs` string required

`en` string required

```bash
curl https://api.damedoklad.cz/v1/ledger/allowances/write-offs/grounds \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/write-offs/grounds', {
  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/ledger/allowances/write-offs/grounds",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## What writing off a receivable would do: the tax-deductible part, the rest, the allowances it settles, and what to watch

GET `/v1/ledger/allowances/write-offs/preview`

What writing off a receivable would do: the tax-deductible part, the rest, the allowances it settles, and what to watch

MCP tool: `preview-receivable-write-off`

### Query parameters

`documentType` "invoice" | "other\_receivable" | "debit\_note" required

`documentId` string required

ID of the document.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`ground` "1" | "2" | "3" | "4" | "5" | "6" | "7" | "none" default `"none"`

### Response · 200

`documentType` null | string required

`documentId` null | string required

`number` null | string required

`contactName` null | string required

`currency` null | string required

`ground` null | string required

`groundText` null | object required

`cs` string required

`en` string required

`amountHaler` integer | null required

`amountCzkHaler` integer required

`deductibleHaler` integer required

`nonDeductibleHaler` integer required

`coveredHaler` integer required

`timeBarred` boolean required

`limitation` object required

`basis` string required

`limitationDate` string required date

`daysLeft` integer required

`state` string required

`facts` any required

Null in every recorded response.

`settlesStatutoryHaler` integer required

`settlesAccountingHaler` integer required

`warnings` object\[\] required

`code` null | string required

`message` null | string required

```bash
curl https://api.damedoklad.cz/v1/ledger/allowances/write-offs/preview \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/allowances/write-offs/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/ledger/allowances/write-offs/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List own analyses: rows of a label and a formula over account balances

GET `/v1/ledger/analyses`

List own analyses: rows of a label and a formula over account balances

MCP tool: `list-analyses`

### 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` "analysis" required

`id` string required

`name` null | string required

`rows` object\[\] required

`label` null | string required

`formula` string required

`createdAt` string required date-time

`updatedAt` 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/ledger/analyses \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/analyses', {
  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/ledger/analyses",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Save an own analysis. A formula uses numbers, + - \* /, brackets, Z(311) for a closing balance and O(6) for the year’s movement, debit positive; with a peněžní deník P(A01) for income and V(B04) for expenses by row of the přehled

POST `/v1/ledger/analyses`

Save an own analysis. A formula uses numbers, + - \* /, brackets, Z(311) for a closing balance and O(6) for the year’s movement, debit positive; with a peněžní deník P(A01) for income and V(B04) for expenses by row of the přehled

MCP tool: `create-analysis`

### Request body

`name` string required max 200 chars

`rows` object\[\] required

`label` string required max 120 chars

`formula` string required max 400 chars

### Response · 201

`id` string required

`name` null | string required

`rows` object\[\] required

`label` null | string required

`formula` string required

`createdAt` string required date-time

`updatedAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/analyses \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "rows": [
    {
      "label": "string",
      "formula": "string"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/analyses', {
  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.",
    "rows": [
      {
        "label": "string",
        "formula": "string"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/analyses",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "rows": [
            {
                "label": "string",
                "formula": "string"
            }
        ]
    },
)
data = response.json()
```

## Change an own analysis

PATCH `/v1/ledger/analyses/{id}`

Change an own analysis

MCP tool: `update-analysis`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`rows` object\[\]

`label` string required max 120 chars

`formula` string required max 400 chars

### Response · 200

`id` string required

`name` null | string required

`rows` object\[\] required

`label` null | string required

`formula` string required

`createdAt` string required date-time

`updatedAt` string required date-time

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/analyses/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "rows": [
    {
      "label": "string",
      "formula": "string"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/analyses/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.",
    "rows": [
      {
        "label": "string",
        "formula": "string"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/analyses/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "rows": [
            {
                "label": "string",
                "formula": "string"
            }
        ]
    },
)
data = response.json()
```

## Delete an own analysis

DELETE `/v1/ledger/analyses/{id}`

Delete an own analysis

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

MCP tool: `delete-analysis`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` null | string required

`rows` object\[\] required

`label` null | string required

`formula` string required

`createdAt` string required date-time

`updatedAt` string required date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/analyses/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/ledger/analyses/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Download an own analysis as a PDF

GET `/v1/ledger/analyses/{id}/pdf`

Download an own analysis as a PDF

MCP tool: `get-analysis-pdf`

### Path parameters

`id` string required

### Query parameters

`years` integer min 1 max 10

`toYear` integer min 2000 max 2100

### Response · 200

Returns a application/pdf file.

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/analyses/obj_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/ledger/analyses/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Compute an own analysis by year

GET `/v1/ledger/analyses/{id}/run`

Compute an own analysis by year

MCP tool: `run-analysis`

### Path parameters

`id` string required

### Query parameters

`years` integer min 1 max 10

`toYear` integer min 2000 max 2100

### Response · 200

`id` string required

`name` null | string required

`years` integer\[\] required

`rows` object\[\] required

`label` null | string required

`formula` string required

`values` object\[\] required

`year` integer required

`value` integer | null required

`source` string

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/analyses/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/run', {
  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/ledger/analyses/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/run",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Přehled o majetku a závazcích at the start and end of a period, for daňová evidence and jednoduché účetnictví

GET `/v1/ledger/assets-liabilities`

Přehled o majetku a závazcích at the start and end of a period, for daňová evidence and jednoduché účetnictví. Cash, bank, receivables, and payables (with unpaid payroll) come from the books, fixed assets from asset cards, inventory from stock movements, and loans from the loan register. Other rows are values you keep through updateBookBalances, which can also type over the computed asset, inventory, and loan rows for a period.

MCP tool: `get-assets-liabilities`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`regime` string required

`periodId` string required

`periodName` string required

`openingDate` null | string required date

`closingDate` string required date

`assets` object\[\] required

`key` string required

`label` null | string required

`labelEn` string required

`source` string required

`autoSource` string

`openingHaler` integer required

`closingHaler` integer required

`liabilities` object\[\] required

`key` string required

`label` null | string required

`labelEn` string required

`source` string required

`autoSource` string

`openingHaler` integer required

`closingHaler` integer required

`totals` object required

`assetsOpeningHaler` integer required

`assetsClosingHaler` integer required

`liabilitiesOpeningHaler` integer required

`liabilitiesClosingHaler` integer required

`differenceOpeningHaler` integer required

`differenceClosingHaler` integer required

`exceedsSingleEntryLimit` boolean

```bash
curl https://api.damedoklad.cz/v1/ledger/assets-liabilities \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/assets-liabilities', {
  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/ledger/assets-liabilities",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Set manual rows of the přehled o majetku a závazcích, or opening cash and bank (items cash and bank)

PUT `/v1/ledger/assets-liabilities`

Set manual rows of the přehled o majetku a závazcích, or opening cash and bank (items cash and bank)

MCP tool: `update-book-balances`

### Request body

`periodId` string

ID of the period. Find it with list-periods.

`items` object\[\] required

`item` string required max 32 chars

`openingHaler` integer min -9007199254740991 max 9007199254740991

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

`closingHaler` integer min -9007199254740991 max 9007199254740991

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

`clear` boolean

### Response · 200

`regime` string required

`periodId` string required

`periodName` string required

`openingDate` null | string required date

`closingDate` string required date

`assets` object\[\] required

`key` string required

`label` null | string required

`labelEn` string required

`source` string required

`autoSource` string

`openingHaler` integer required

`closingHaler` integer required

`liabilities` object\[\] required

`key` string required

`label` null | string required

`labelEn` string required

`source` string required

`autoSource` string

`openingHaler` integer required

`closingHaler` integer required

`totals` object required

`assetsOpeningHaler` integer required

`assetsClosingHaler` integer required

`liabilitiesOpeningHaler` integer required

`liabilitiesClosingHaler` integer required

`differenceOpeningHaler` integer required

`differenceClosingHaler` integer required

`exceedsSingleEntryLimit` boolean

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/assets-liabilities \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "item": "string"
    }
  ]
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/assets-liabilities",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "items": [
            {
                "item": "string"
            }
        ]
    },
)
data = response.json()
```

## List the peněžní deník: income and expense rows with bank and cash columns

GET `/v1/ledger/cash-book`

List the peněžní deník: income and expense rows with bank and cash columns

MCP tool: `list-cash-book-entries`

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

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`classification` "income\_taxable" | "income\_exempt" | "expense\_deductible" | "expense\_nondeductible" | "passthrough" | "transfer"

`moneyAccount` "bank" | "cash"

`direction` "in" | "out"

### Response · 200

`data` object\[\] required

`object` "cash\_book\_entry" required

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`direction` string required

`moneyAccount` string required

`classification` string required

`category` null | string required

`activityKind` string required

`amountHaler` integer required

`vatHaler` integer required

`baseHaler` integer | null required

`bankInHaler` integer required

`bankOutHaler` integer required

`cashInHaler` integer required

`cashOutHaler` integer required

`sourceType` string required

`sourceId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`reversalOfId` null | string required

`reversedById` string | null

`canReverse` boolean 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/ledger/cash-book \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/cash-book', {
  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/ledger/cash-book",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Write a manual peněžní deník row. A transfer writes both sides: out of moneyAccount and into the other one

POST `/v1/ledger/cash-book`

Write a manual peněžní deník row. A transfer writes both sides: out of moneyAccount and into the other one

MCP tool: `create-cash-book-entry`

### Request body

`entryDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`description` string required max 200 chars

`direction` "in" | "out" required

`moneyAccount` "bank" | "cash"

`classification` "income\_taxable" | "income\_exempt" | "expense\_deductible" | "expense\_nondeductible" | "passthrough" | "transfer" required

`amountHaler` integer required max 9007199254740991

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

`vatHaler` integer min 0 max 9007199254740991

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

`category` string

`activityKind` "main" | "economic"

`documentNumber` string max 64 chars

`contactId` string

ID of the contact. Find it with list-contacts.

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

### Response · 201

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`direction` string required

`moneyAccount` string required

`classification` string required

`category` null | string required

`activityKind` string required

`amountHaler` integer required

`vatHaler` integer required

`baseHaler` integer | null required

`bankInHaler` integer required

`bankOutHaler` integer required

`cashInHaler` integer required

`cashOutHaler` integer required

`sourceType` string required

`sourceId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`reversalOfId` null | string required

`reversedById` string | null

`canReverse` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/cash-book \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "entryDate": "2026-10-30",
  "description": "Pečivo, říjen",
  "direction": "in",
  "classification": "income_taxable",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/cash-book', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "entryDate": "2026-10-30",
    "description": "Pečivo, říjen",
    "direction": "in",
    "classification": "income_taxable",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/cash-book",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "entryDate": "2026-10-30",
        "description": "Pečivo, říjen",
        "direction": "in",
        "classification": "income_taxable",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Reclassify a peněžní deník row (daňový / nedaňový, row of the přehled, činnost, text). Amounts cannot change

PATCH `/v1/ledger/cash-book/{id}`

Reclassify a peněžní deník row (daňový / nedaňový, row of the přehled, činnost, text). Amounts cannot change

MCP tool: `update-cash-book-entry`

### Path parameters

`id` string required

### Request body

`classification` "income\_taxable" | "income\_exempt" | "expense\_deductible" | "expense\_nondeductible" | "passthrough" | "transfer"

`category` string | null

`activityKind` "main" | "economic"

`description` string max 200 chars

### Response · 200

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`direction` string required

`moneyAccount` string required

`classification` string required

`category` null | string required

`activityKind` string required

`amountHaler` integer required

`vatHaler` integer required

`baseHaler` integer | null required

`bankInHaler` integer required

`bankOutHaler` integer required

`cashInHaler` integer required

`cashOutHaler` integer required

`sourceType` string required

`sourceId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`reversalOfId` null | string required

`reversedById` string | null

`canReverse` boolean required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/cash-book/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "classification": "income_taxable",
  "category": "string",
  "activityKind": "main"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/cash-book/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "classification": "income_taxable",
    "category": "string",
    "activityKind": "main"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/cash-book/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "classification": "income_taxable",
        "category": "string",
        "activityKind": "main"
    },
)
data = response.json()
```

## Reverse a manual peněžní deník row with an opposite one. A transfer reverses both sides

POST `/v1/ledger/cash-book/{id}/reverse`

Reverse a manual peněžní deník row with an opposite one. A transfer reverses both sides

MCP tool: `reverse-cash-book-entry`

### Path parameters

`id` string required

### Response · 201

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`direction` string required

`moneyAccount` string required

`classification` string required

`category` null | string required

`activityKind` string required

`amountHaler` integer required

`vatHaler` integer required

`baseHaler` integer | null required

`bankInHaler` integer required

`bankOutHaler` integer required

`cashInHaler` integer required

`cashOutHaler` integer required

`sourceType` string required

`sourceId` null | string required

`documentNumber` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` string | null required

`projectId` string | null required

`reversalOfId` null | string required

`reversedById` string | null

`canReverse` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/cash-book/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/cash-book/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse', {
  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/ledger/cash-book/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Yearly peněžní deník totals: by classification, tax base, bank and cash balances, monthly income and expense

GET `/v1/ledger/cash-book/summary`

Yearly peněžní deník totals: by classification, tax base, bank and cash balances, monthly income and expense

MCP tool: `get-cash-book-summary`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`periodId` string required

`periodName` string required

`from` string required date

`to` string required date

`byClass` object required

`income_taxable` object required

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`income_exempt` object required

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`expense_deductible` object required

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`expense_nondeductible` object required

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`passthrough` object required

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`transfer` object required

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`expense_nontax` object

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`non_tax_transfer` object

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`income_nontax` object

`amountHaler` integer | null required

`vatHaler` integer | null required

`baseHaler` integer | null required

`taxableIncomeHaler` integer required

`deductibleExpenseHaler` integer required

`taxBaseHaler` integer required

`bank` object required

`openingHaler` integer required

`inHaler` integer required

`outHaler` integer required

`closingHaler` integer required

`cash` object required

`openingHaler` integer required

`inHaler` integer required

`outHaler` integer required

`closingHaler` integer required

`byMonth` object\[\] required

`month` null | string required

`incomeHaler` integer required

`expenseHaler` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/cash-book/summary \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/cash-book/summary', {
  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/ledger/cash-book/summary",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Decisions on the approval of the statements of a period, oldest first: a rejection and a later approval both stay

GET `/v1/ledger/contributory/approvals`

Decisions on the approval of the statements of a period, oldest first: a rejection and a later approval both stay

MCP tool: `list-contributory-approvals`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "contributory\_approval" required

`id` string required

`periodId` string required

`decision` string required

`decidedOn` string required date

`organ` string required

`persons` string\[\] required

`extraordinary` boolean required

`rejectionNote` null | string required

`rejectionDeadline` null | string required date

`evidence` null | string required

`unitStatement` null | string required

`votes` string | null required

`createdAt` 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/ledger/contributory/approvals \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/approvals', {
  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/ledger/contributory/approvals",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record the decision of the approving body per vyhláška 220/2013 Sb. § 6 and § 7: approved, rejected on substance or for missing papers, or not decided in time

POST `/v1/ledger/contributory/approvals`

Record the decision of the approving body per vyhláška 220/2013 Sb. § 6 and § 7: approved, rejected on substance or for missing papers, or not decided in time. A rejection needs its note and a deadline (§ 7 odst. 3). Part of the statements cannot be approved (§ 6 odst. 4), so a decision is always about all of them.

MCP tool: `create-contributory-approval`

### Request body

`periodId` string required

ID of the period. Find it with list-periods.

`decision` "approved" | "rejected\_substantive" | "rejected\_formal" | "not\_decided\_in\_time" required

`decidedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`organ` "PovereneOsoby" | "ZrizovatelOSS" | "ZrizovatelSPO" | "OrganDSO" | "ZastupitelstvoObce" | "RadaObce" | "ZastupitelstvoKraje" | "RadaKraje" | "ZastupitelstvoHMP" | "RadaHMP" required

`persons` string\[\] required

`extraordinary` boolean

`rejectionNote` string max 10000 chars

`rejectionDeadline` string YYYY-MM-DD

`evidence` string max 10000 chars

`unitStatement` string max 10000 chars

`votes` string max 10000 chars

### Response · 201

`id` string required

`periodId` string required

`decision` string required

`decidedOn` string required date

`organ` string required

`persons` string\[\] required

`extraordinary` boolean required

`rejectionNote` null | string required

`rejectionDeadline` null | string required date

`evidence` null | string required

`unitStatement` null | string required

`votes` string | null required

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/contributory/approvals \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "decision": "approved",
  "decidedOn": "2026-10-30",
  "organ": "PovereneOsoby",
  "persons": [
    "string"
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/approvals', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "decision": "approved",
    "decidedOn": "2026-10-30",
    "organ": "PovereneOsoby",
    "persons": [
      "string"
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/contributory/approvals",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "decision": "approved",
        "decidedOn": "2026-10-30",
        "organ": "PovereneOsoby",
        "persons": [
            "string"
        ]
    },
)
data = response.json()
```

## Protokol o schvalování účetní závěrky per § 11 odst. 2 of vyhláška 220/2013 Sb. as a PDF

GET `/v1/ledger/contributory/approvals/{id}/protocol`

Protokol o schvalování účetní závěrky per § 11 odst. 2 of vyhláška 220/2013 Sb. as a PDF

MCP tool: `download-contributory-approval-protocol`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/approvals/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protocol \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/approvals/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protocol', {
  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/ledger/contributory/approvals/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/protocol",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Výkaz peněžních příjmů a výdajů (C007) of vyhláška 272/2017 Sb., from the entries that moved money, with a person's moves between rows. A state organisation sends it, monthly or quarterly by its costs

GET `/v1/ledger/contributory/cash-report`

Výkaz peněžních příjmů a výdajů (C007) of vyhláška 272/2017 Sb., from the entries that moved money, with a person's moves between rows. A state organisation sends it, monthly or quarterly by its costs

MCP tool: `get-contributory-cash-report`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`asOf` string required date

`required` boolean required

`rows` object\[\] required

`code` null | string required

`label` null | string required

`level` integer required

`leaf` boolean required

`valueHaler` integer | null required

`moneyInHaler` integer required

`unclassified` object\[\] required

`account` null | string required

`amountHaler` integer | null required

`moves` object\[\] required

`to` string required

`from` string required

`amountHaler` integer | null required

`frequency` string required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/cash-report \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/cash-report', {
  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/ledger/contributory/cash-report",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The checks of Kontrolní vazby výkazů pro CSÚIS, verze 70, as far as this application holds their data: what the portal would refuse, before it is uploaded

GET `/v1/ledger/contributory/controls`

The checks of Kontrolní vazby výkazů pro CSÚIS, verze 70, as far as this application holds their data: what the portal would refuse, before it is uploaded

MCP tool: `get-contributory-controls`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`asOf` string required date

`version` integer required

`ok` boolean required

`checks` object\[\] required

`id` string required

`bond` integer required

`label` null | string required

`left` integer

`right` integer

`ok` boolean required

`differenceHaler` integer

`balanceHaler` integer

`accounts` string\[\]

`items` string\[\]

`failed` integer required

`overviewsDue` boolean

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/controls \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/controls', {
  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/ledger/contributory/controls",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## A further CSÚIS message for upload on its portal: příloha, approval, ROZP 1-01 SPO, PAP with its detail parts, the cash report C007, ZAM 1-04 U, and for 2025 and earlier the cash flow with equity changes. Validated against package 57, unsigned, sent nowhere

POST `/v1/ledger/contributory/csuis`

A further CSÚIS message for upload on its portal: příloha, approval, ROZP 1-01 SPO, PAP with its detail parts, the cash report C007, ZAM 1-04 U, and for 2025 and earlier the cash flow with equity changes. Validated against package 57, unsigned, sent nowhere

MCP tool: `export-csuis-report`

### Request body

`report` "cash\_flow" | "notes" | "approval" | "rozp" | "pap" | "pap\_x" | "pap\_xi" | "pap\_xii" | "pap\_xiii" | "pap\_xv" | "pap\_xvi" | "vppv" | "zam" required

`sequencePart` integer min 1 max 9007199254740991

`periodId` string required

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`personName` string required max 200 chars

`email` string required email

`personId` string required max 15 chars

ID of the person.

`phone` string max 30 chars

`chapter` string max 3 chars

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/contributory/csuis \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "report": "cash_flow",
  "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "personName": "Pekárna U Lípy s.r.o.",
  "email": "info@example.cz",
  "personId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/csuis', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "report": "cash_flow",
    "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "personName": "Pekárna U Lípy s.r.o.",
    "email": "info@example.cz",
    "personId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/contributory/csuis",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "report": "cash_flow",
        "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "personName": "Pekárna U Lípy s.r.o.",
        "email": "info@example.cz",
        "personId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
content = response.content
```

## ZAM 1-04 U of vyhláška 5/2014 Sb. as entered: the headcount of a state organisation whose employment the government regulates, per quarter

GET `/v1/ledger/contributory/employment`

ZAM 1-04 U of vyhláška 5/2014 Sb. as entered: the headcount of a state organisation whose employment the government regulates, per quarter

MCP tool: `get-contributory-employment`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`asOf` string required date

`required` boolean required

`quarter` null | string required

`columns` object\[\] required

`key` string required

`label` null | string required

`rows` object required

`employment` object required

`budget` integer required

`budgetEu` integer required

`adjusted` integer required

`adjustedEu` integer required

`actual` number required

`limitEu` number required

`limitOther` number required

`unspentEu` integer required

`unspentOther` integer required

`outsideEu` integer required

`outsideOther` integer required

`end` integer required

`endEu` integer required

`civil` object required

`budget` integer required

`budgetEu` integer required

`adjusted` integer required

`adjustedEu` integer required

`actual` integer required

`limitEu` integer required

`limitOther` integer required

`unspentEu` integer required

`unspentOther` integer required

`outsideEu` integer required

`outsideOther` integer required

`end` integer required

`endEu` integer required

`total` object required

`budget` integer required

`budgetEu` integer required

`adjusted` integer required

`adjustedEu` integer required

`actual` number required

`limitEu` number required

`limitOther` number required

`unspentEu` integer required

`unspentOther` integer required

`outsideEu` integer required

`outsideOther` integer required

`end` integer required

`endEu` integer required

`firstQuarter` object required

`employment` object required

`budget` integer required

`budgetEu` integer required

`adjusted` integer required

`adjustedEu` integer required

`actual` number required

`limitEu` integer required

`limitOther` number required

`unspentEu` integer required

`unspentOther` integer required

`outsideEu` integer required

`outsideOther` integer required

`end` integer required

`endEu` integer required

`civil` object required

`budget` integer required

`budgetEu` integer required

`adjusted` integer required

`adjustedEu` integer required

`actual` integer required

`limitEu` integer required

`limitOther` integer required

`unspentEu` integer required

`unspentOther` integer required

`outsideEu` integer required

`outsideOther` integer required

`end` integer required

`endEu` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/employment \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/employment', {
  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/ledger/contributory/employment",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Reverse a transfer or fund posting made by a guide

POST `/v1/ledger/contributory/entries/{id}/reverse`

Reverse a transfer or fund posting made by a guide

MCP tool: `reverse-contributory-entry`

### Path parameters

`id` string required

### Response · 200

`entryId` null | string required

`reversalId` string required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/contributory/entries/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/entries/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse', {
  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/ledger/contributory/entries/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Post a creation or use of a fund per ČÚS 704: the guide picks the accounts by the founder and the kind, and the amount lands on its row of part F of the příloha

POST `/v1/ledger/contributory/funds/post`

Post a creation or use of a fund per ČÚS 704: the guide picks the accounts by the founder and the kind, and the amount lands on its row of part F of the příloha

MCP tool: `post-contributory-fund`

### Request body

`kind` string required max 40 chars

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`amountHaler` integer required max 9007199254740991

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

`reserveAccount` "413" | "414"

`revenueAccount` "671" | "672"

`moneyAccount` string

`row` string

`description` string max 200 chars

### Response · 201

`entryId` null | string required

`kind` string required

`ref` string required

`lines` object\[\] required

`accountNumber` null | string required

`debitHaler` integer required

`creditHaler` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/contributory/funds/post \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "string",
  "date": "2026-10-30",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/funds/post', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "string",
    "date": "2026-10-30",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/contributory/funds/post",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "string",
        "date": "2026-10-30",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## What was saved for the příloha, the equity overview, ROZP 1-01 SPO, PAP, the cash report or ZAM 1-04 U of a period

GET `/v1/ledger/contributory/inputs`

What was saved for the příloha, the equity overview, ROZP 1-01 SPO, PAP, the cash report or ZAM 1-04 U of a period

MCP tool: `get-contributory-inputs`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`report` string required

`data` object required

`e` object

`E1` object\[\] required

`item` string required

`comment` null | string required

`amountHaler` integer | null required

`itemMap` object

`quarters` object

`allocation` object

`A.I.2.` object required

`increaseHaler` integer required

`partI` object

`partII` object

`changes` object\[\]

`part` integer required

`item` string required

`changeType` string required

`amountHaler` integer | null required

`partner` string

`assetPartner` string

`texts` object

`A.1.` string required

`d` object

`d2` integer required

`accountPartners` object

`moves` object\[\]

`from` string required

`to` string required

`amountHaler` integer | null required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/inputs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/inputs', {
  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/ledger/contributory/inputs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Save what the books cannot say: texts and breakdowns of the příloha, the allocation of equity movements, the budget of ROZP 1-01 SPO, the change types and partners of PAP, moves in the cash report, the headcount of ZAM 1-04 U

PUT `/v1/ledger/contributory/inputs`

Save what the books cannot say: texts and breakdowns of the příloha, the allocation of equity movements, the budget of ROZP 1-01 SPO, the change types and partners of PAP, moves in the cash report, the headcount of ZAM 1-04 U

MCP tool: `save-contributory-inputs`

### Request body

`periodId` string required

ID of the period. Find it with list-periods.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam" required

`data` object required

### Response · 200

`periodId` string required

`report` string required

`data` object required

`e` object

`E1` object\[\] required

`item` string required

`comment` null | string required

`amountHaler` integer | null required

`itemMap` object

`quarters` object

`allocation` object

`A.I.2.` object required

`increaseHaler` integer required

`partI` object

`partII` object

`changes` object\[\]

`part` integer required

`item` string required

`changeType` string required

`amountHaler` integer | null required

`partner` string

`assetPartner` string

`texts` object

`A.1.` string required

`d` object

`d2` integer required

`accountPartners` object

`moves` object\[\]

`from` string required

`to` string required

`amountHaler` integer | null required

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/contributory/inputs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "report": "notes",
  "data": {}
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/inputs', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "report": "notes",
    "data": {}
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/contributory/inputs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "report": "notes",
        "data": {}
    },
)
data = response.json()
```

## Příloha per § 45 and Příloha 5 of vyhláška 410/2009 Sb.: off-balance accounts, transfers, funds, buildings and land from the books, the texts as saved

GET `/v1/ledger/contributory/notes`

Příloha per § 45 and Příloha 5 of vyhláška 410/2009 Sb.: off-balance accounts, transfers, funds, buildings and land from the books, the texts as saved

MCP tool: `get-contributory-notes`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`periodName` string required

`asOf` string required date

`structure` string required

`founder` string required

`entity` object required

`name` null | string required

`ico` null | string required

`texts` object\[\] required

`code` null | string required

`label` null | string required

`hint` string required

`text` string required

`a4` object\[\] required

`code` null | string required

`label` null | string required

`level` integer required

`currentHaler` integer required

`priorHaler` integer required

`account` null | string

`partC` object\[\] required

`code` null | string required

`label` null | string required

`currentHaler` integer required

`priorHaler` integer required

`b3` object required

`code` null | string required

`label` null | string required

`valueHaler` integer | null required

`text` string required

`d` object required

`d1` object required

`code` null | string required

`label` null | string required

`value` integer required

`text` string required

`d2` object required

`code` null | string required

`label` null | string required

`value` integer required

`d3` object required

`code` null | string required

`label` null | string required

`valueHaler` integer | null required

`d4` object required

`code` null | string required

`label` null | string required

`value` integer required

`d5` object required

`code` null | string required

`label` null | string required

`valueHaler` integer | null required

`d7` object required

`code` null | string required

`label` null | string required

`text` string required

`d6` object required

`code` null | string required

`label` null | string required

`valueHaler` integer | null required

`e` object required

`E1` object\[\] required

`item` string required

`comment` null | string required

`amountHaler` integer | null required

`E2` any\[\] required

`E3` any\[\] required

`E4` any\[\] required

`funds` object\[\] required

`letter` string required

`title` null | string required

`rows` object\[\] required

`code` null | string required

`label` null | string required

`valueHaler` integer | null required

`level` integer required

`g` object required

`letter` string required

`title` null | string required

`total` object required

`code` null | string required

`label` null | string required

`grossHaler` integer required

`correctionHaler` integer required

`netHaler` integer required

`priorNetHaler` integer required

`rows` object\[\] required

`code` null | string required

`label` null | string required

`grossHaler` integer required

`correctionHaler` integer required

`priorNetHaler` integer required

`netHaler` integer required

`h` object required

`letter` string required

`title` null | string required

`total` object required

`code` null | string required

`label` null | string required

`grossHaler` integer required

`correctionHaler` integer required

`netHaler` integer required

`priorNetHaler` integer required

`rows` object\[\] required

`code` null | string required

`label` null | string required

`grossHaler` integer required

`correctionHaler` integer required

`priorNetHaler` integer required

`netHaler` integer required

`i` object\[\] required

`code` null | string required

`label` null | string required

`currentHaler` integer required

`priorHaler` integer required

`j` object\[\] required

`code` null | string required

`label` null | string required

`currentHaler` integer required

`priorHaler` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/notes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/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/ledger/contributory/notes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Příloha of a contributory organisation as a PDF

GET `/v1/ledger/contributory/notes/pdf`

Příloha of a contributory organisation as a PDF

MCP tool: `download-contributory-notes`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/notes/pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/notes/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/ledger/contributory/notes/pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Pomocný analytický přehled of vyhláška 383/2009 Sb. Parts I to III and the breakdowns by partner in X, XI, XV and XVI from the books, the change types of IV to VIII and their partners in XII and XIII as entered

GET `/v1/ledger/contributory/pap`

Pomocný analytický přehled of vyhláška 383/2009 Sb. Parts I to III and the breakdowns by partner in X, XI, XV and XVI from the books, the change types of IV to VIII and their partners in XII and XIII as entered. Part XIV is for organisational units of the state and territorial self-governing units only, so a contributory organisation has none.

MCP tool: `get-contributory-pap`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`asOf` string required date

`part1` object\[\] required

`item` string required

`opening` integer required

`debit` integer required

`credit` integer required

`closing` integer required

`part2` object\[\] required

`item` string required

`main` integer required

`economic` integer required

`part3` object\[\] required

`item` string required

`main` integer required

`economic` integer required

`parts` object required

`required` boolean required

`part10` object\[\]

`item` string required

`partner` string required

`partnerName` null | string required

`opening` integer required

`debit` integer required

`credit` integer required

`closing` integer required

`unidentified` boolean required

`marker` string required

`contract` any required

Null in every recorded response.

`part11` object\[\]

`item` string required

`partner` string required

`partnerName` string required

`main` integer required

`economic` integer required

`unidentified` boolean required

`marker` string required

`part12` object\[\]

`item` string required

`changeType` string required

`partner` string required

`partnerName` any required

Null in every recorded response.

`amountHaler` integer | null required

`unidentified` boolean required

`part13` object\[\]

`item` string required

`changeType` string required

`assetPartner` string required

`partner` string required

`partnerName` any required

Null in every recorded response.

`assetPartnerName` any required

Null in every recorded response.

`amountHaler` integer | null required

`unidentified` boolean required

`part15` object\[\]

`item` string required

`label` null | string required

`opening` integer required

`closing` integer required

`part16` object\[\]

`item` string required

`partner` string required

`partnerName` null | string required

`opening` integer required

`closing` integer required

`unidentified` boolean required

`unassigned` object\[\]

`account` null | string required

`synthetic` string required

`itemMap` object

`accountPartners` object

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/pap \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/pap', {
  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/ledger/contributory/pap",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The form of PAP itself: the items of parts I to III and XV with their partner markers, what each of parts IV to VIII lists, and the change types

GET `/v1/ledger/contributory/pap/form`

The form of PAP itself: the items of parts I to III and XV with their partner markers, what each of parts IV to VIII lists, and the change types

MCP tool: `get-contributory-pap-form`

### Response · 200

`part1` object\[\] required

`item` string required

`label` null | string required

`marker` null | string required

`part2` object\[\] required

`item` string required

`label` null | string required

`marker` null | string required

`part3` object\[\] required

`item` string required

`label` null | string required

`marker` null | string required

`part15` object\[\] required

`item` string required

`label` null | string required

`marker` string required

`ranges` object required

`changeCodes` object required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/pap/form \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/pap/form', {
  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/ledger/contributory/pap/form",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Costs and income of the period by účelový znak: every line marked with a project that has one, invoices and payroll included

GET `/v1/ledger/contributory/purpose-codes`

Costs and income of the period by účelový znak: every line marked with a project that has one, invoices and payroll included

MCP tool: `get-contributory-purpose-codes`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`data` object\[\] required

`purposeCode` null | string required

`name` null | string required

`costHaler` integer required

`incomeHaler` integer required

`advanceHaler` integer required

`differenceHaler` integer required

`total` integer required

`hasMore` boolean required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/purpose-codes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/purpose-codes', {
  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/ledger/contributory/purpose-codes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## ROZP 1-01 SPO of vyhláška 5/2014 Sb.: last year from the books, the budget as entered. It replaced nothing for territorial organisations, which send no financial statement

GET `/v1/ledger/contributory/rozp`

ROZP 1-01 SPO of vyhláška 5/2014 Sb.: last year from the books, the budget as entered. It replaced nothing for territorial organisations, which send no financial statement. FIN 2-04 U no longer exists: the CSÚIS manual lists it as abolished.

MCP tool: `get-contributory-rozp`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`report` "notes" | "equity" | "rozp" | "pap" | "vppv" | "zam"

### Response · 200

`periodId` string required

`founder` string required

`required` boolean required

`partI` object\[\] required

`number` integer | null required

`label` null | string required

`account` null | string required

`actual` integer required

`budget` integer required

`next1` integer required

`next2` integer required

`partII` object\[\] required

`number` integer | null required

`label` null | string required

`actual` integer required

`budget` integer required

`next1` integer required

`next2` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/rozp \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/rozp', {
  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/ledger/contributory/rozp",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Founder of a contributory organisation (state or territorial), which decides the fund tables, ROZP 1-01 SPO and whether PAP is due, with the guides on offer

GET `/v1/ledger/contributory/settings`

Founder of a contributory organisation (state or territorial), which decides the fund tables, ROZP 1-01 SPO and whether PAP is due, with the guides on offer

MCP tool: `get-contributory-settings`

### Response · 200

`founder` string required

`chapter` null | string required

`transferSteps` string\[\]

`fundPostings` object\[\]

`key` string required

`ref` string required

`label` null | string required

`table` null | string required

`rowChoice` array | null required

`fromReserve` boolean required

`revenueAccount` boolean required

`approvalOrgans` string\[\]

`approvalDecisions` string\[\]

`papChangeCodes` object

`employmentRegulated` boolean

```bash
curl https://api.damedoklad.cz/v1/ledger/contributory/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/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/ledger/contributory/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Say who founded the contributory organisation, its budget chapter if the state did, and whether the government regulates its employment, which brings ZAM 1-04 U

PUT `/v1/ledger/contributory/settings`

Say who founded the contributory organisation, its budget chapter if the state did, and whether the government regulates its employment, which brings ZAM 1-04 U

MCP tool: `update-contributory-settings`

### Request body

`founder` "state" | "territorial" required

`chapter` string | null

`employmentRegulated` boolean

### Response · 200

`founder` string required

`chapter` null | string required

`transferSteps` string\[\]

`fundPostings` object\[\]

`key` string required

`ref` string required

`label` null | string required

`table` null | string required

`rowChoice` array | null required

`fromReserve` boolean required

`revenueAccount` boolean required

`approvalOrgans` string\[\]

`approvalDecisions` string\[\]

`papChangeCodes` object

`employmentRegulated` boolean

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/contributory/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "founder": "state"
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/contributory/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "founder": "state"
    },
)
data = response.json()
```

## Transfers received, with the entries each one made

GET `/v1/ledger/contributory/transfers`

Transfers received, with the entries each one made

MCP tool: `list-contributory-transfers`

### 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` "contributory\_transfer" required

`id` string required

`name` string required

`providerName` string required

`providerIco` null | string required

`purposeCode` null | string required

`projectId` null | string required

`kind` string required

`revenueAccount` string required

`receivableAccount` string required

`amountHaler` integer required

`year` integer required

`entries` object\[\] required

`id` string required

`date` string required date

`number` integer | null required

`description` null | string required

`step` string required

`reversed` boolean 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/ledger/contributory/transfers \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/transfers', {
  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/ledger/contributory/transfers",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Record a transfer received: operating or for fixed assets, with its provider and účelový znak. Nothing posts until a step does

POST `/v1/ledger/contributory/transfers`

Record a transfer received: operating or for fixed assets, with its provider and účelový znak. Nothing posts until a step does

MCP tool: `create-contributory-transfer`

### Request body

`name` string required max 200 chars

`providerName` string required max 200 chars

`providerIco` string

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

`purposeCode` string

`kind` "operating" | "investment" required

`revenueAccount` "671" | "672"

`receivableAccount` "344" | "346" | "348"

`amountHaler` integer min -9007199254740991 max 9007199254740991 default `0`

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

`year` integer required min 2000 max 2100

### Response · 201

`id` string required

`name` string required

`providerName` string required

`providerIco` null | string required

`purposeCode` null | string required

`projectId` null | string required

`kind` string required

`revenueAccount` string required

`receivableAccount` string required

`amountHaler` integer required

`year` integer required

`entries` object\[\] required

`id` string required

`date` string required date

`number` integer | null required

`description` null | string required

`step` string required

`reversed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/contributory/transfers \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "providerName": "Pekárna U Lípy s.r.o.",
  "kind": "operating",
  "year": 2026
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/transfers', {
  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.",
    "providerName": "Pekárna U Lípy s.r.o.",
    "kind": "operating",
    "year": 2026
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/contributory/transfers",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "providerName": "Pekárna U Lípy s.r.o.",
        "kind": "operating",
        "year": 2026
    },
)
data = response.json()
```

## Post one step of a transfer per ČÚS 703: advance, settlement, surplus returned, estimate, no-settlement claim, money received, or release of 403 to income

POST `/v1/ledger/contributory/transfers/{id}/post`

Post one step of a transfer per ČÚS 703: advance, settlement, surplus returned, estimate, no-settlement claim, money received, or release of 403 to income. Points 5.3.1 to 5.3.7, 5.5.1 and 4.17 for a recipient that is no organisational unit of the state. Reverse a step with reverseContributoryEntry.

MCP tool: `post-contributory-transfer-step`

### Path parameters

`id` string required

### Request body

`step` "advance\_received" | "long\_advance\_received" | "settled\_in\_year" | "advance\_cleared" | "long\_advance\_cleared" | "surplus\_returned" | "top\_up\_received" | "estimate" | "settled\_later" | "no\_settlement" | "received" | "release" required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`amountHaler` integer required max 9007199254740991

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

`estimateHaler` integer min -9007199254740991 max 9007199254740991

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

`moneyAccount` string

`description` string max 200 chars

### Response · 201

`transferId` string required

`entryId` null | string required

`step` string required

`lines` object\[\] required

`accountNumber` null | string required

`debitHaler` integer required

`creditHaler` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/contributory/transfers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/post \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "step": "advance_received",
  "date": "2026-10-30",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/contributory/transfers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/post', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "step": "advance_received",
    "date": "2026-10-30",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/contributory/transfers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/post",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "step": "advance_received",
        "date": "2026-10-30",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## The rozvaha or výkaz zisku a ztráty of a contributory organisation as an XML message for CSÚIS, for upload on its portal

POST `/v1/ledger/csuis/export`

The rozvaha or výkaz zisku a ztráty of a contributory organisation as an XML message for CSÚIS, for upload on its portal. Validated against package no. 57 of the XSD schemas of the Státní pokladna. Unsigned, and nothing is sent: the responsible person uploads it. personId is the number CSÚIS gave that person.

MCP tool: `export-csuis-statement`

### Request body

`report` "balance\_sheet" | "income\_statement" required

`periodId` string required

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`personName` string required max 200 chars

`email` string required email

`personId` string required max 15 chars

ID of the person.

`phone` string max 30 chars

`chapter` string max 3 chars

### Response · 200

Returns a application/xml file.

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/csuis/export \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "report": "balance_sheet",
  "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "personName": "Pekárna U Lípy s.r.o.",
  "email": "info@example.cz",
  "personId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}' \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/csuis/export', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "report": "balance_sheet",
    "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "personName": "Pekárna U Lípy s.r.o.",
    "email": "info@example.cz",
    "personId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const file = await response.arrayBuffer();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/csuis/export",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "report": "balance_sheet",
        "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "personName": "Pekárna U Lípy s.r.o.",
        "email": "info@example.cz",
        "personId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
content = response.content
```

## Who a contributory organisation last sent as the responsible person of a CSÚIS message

GET `/v1/ledger/csuis/sender`

Who a contributory organisation last sent as the responsible person of a CSÚIS message

MCP tool: `get-csuis-sender`

### Response · 200

`ico` null | string required

`name` null | string required

`email` null | string

`personId` string

`personName` string

```bash
curl https://api.damedoklad.cz/v1/ledger/csuis/sender \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/csuis/sender', {
  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/ledger/csuis/sender",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List střediska, činnosti, and zakázky

GET `/v1/ledger/dimensions`

List střediska, činnosti, and zakázky

MCP tool: `list-dimensions`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`kind` "center" | "activity" | "project"

`active` "true" | "false"

### Response · 200

`data` object\[\] required

`object` "dimension" required

`id` string required

`kind` string required

`code` string required

`name` string required

`isActive` boolean required

`purposeCode` string | null

`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/ledger/dimensions \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/dimensions', {
  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/ledger/dimensions",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create a středisko (center), činnost (activity), or zakázka (project)

POST `/v1/ledger/dimensions`

Create a středisko (center), činnost (activity), or zakázka (project)

MCP tool: `create-dimension`

### Request body

`kind` "center" | "activity" | "project" required

`code` string required max 24 chars

`name` string required max 200 chars

`purposeCode` string

### Response · 201

`id` string required

`kind` string required

`code` string required

`name` string required

`isActive` boolean required

`purposeCode` string | null

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/dimensions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "center",
    "code": "string",
    "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/ledger/dimensions",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "center",
        "code": "string",
        "name": "Pekárna U Lípy s.r.o."
    },
)
data = response.json()
```

## Get a středisko, činnost, or zakázka

GET `/v1/ledger/dimensions/{id}`

Get a středisko, činnost, or zakázka

MCP tool: `get-dimension`

### Path parameters

`id` string required

### Response · 200

`id` string required

`kind` string required

`code` string required

`name` string required

`isActive` boolean required

`purposeCode` string | null

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/dimensions/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/ledger/dimensions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Rename or deactivate a středisko, činnost, or zakázka

PATCH `/v1/ledger/dimensions/{id}`

Rename or deactivate a středisko, činnost, or zakázka

MCP tool: `update-dimension`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`isActive` boolean

`purposeCode` string | null

### Response · 200

`id` string required

`kind` string required

`code` string required

`name` string required

`isActive` boolean required

`purposeCode` string | null

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/dimensions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "isActive": false,
  "purposeCode": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/dimensions/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.",
    "isActive": false,
    "purposeCode": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/dimensions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "isActive": False,
        "purposeCode": "string"
    },
)
data = response.json()
```

## Delete a dimension nothing has been posted to. Otherwise deactivate it

DELETE `/v1/ledger/dimensions/{id}`

Delete a dimension nothing has been posted to. Otherwise deactivate it

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

MCP tool: `delete-dimension`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/dimensions/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/ledger/dimensions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The ČNB rate list for a date. Fetches and caches it when it is not stored yet

GET `/v1/ledger/exchange-rates`

The ČNB rate list for a date. Fetches and caches it when it is not stored yet

MCP tool: `list-exchange-rates`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "exchange\_rate" required

`currency` string required

`country` null | string

`currencyName` string

`amount` integer required

`rate` number required

`ratePerUnit` number required

`source` string required

`id` null | string

`date` string date

`validDate` string date

`stale` boolean

`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/ledger/exchange-rates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-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/ledger/exchange-rates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Set a manual rate for a currency and date, for currencies or days ČNB does not publish

POST `/v1/ledger/exchange-rates`

Set a manual rate for a currency and date, for currencies or days ČNB does not publish

MCP tool: `set-exchange-rate`

### Request body

`currency` string required 3 chars

ISO 4217 currency code, for example CZK or EUR.

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`rate` number required

`amount` integer max 9007199254740991

### Response · 201

`currency` string required

`country` null | string

`currencyName` string

`amount` integer required

`rate` number required

`ratePerUnit` number required

`source` string required

`id` null | string

`date` string date

`validDate` string date

`stale` boolean

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/exchange-rates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "currency": "CZK",
  "date": "2026-10-30",
  "rate": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-rates', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "currency": "CZK",
    "date": "2026-10-30",
    "rate": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/exchange-rates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "currency": "CZK",
        "date": "2026-10-30",
        "rate": 1
    },
)
data = response.json()
```

## Download the ČNB daily rates for a date and cache them. Manual rates stay

POST `/v1/ledger/exchange-rates/fetch`

Download the ČNB daily rates for a date and cache them. Manual rates stay

MCP tool: `fetch-exchange-rates`

### Request body

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`validDate` string required date

`count` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/exchange-rates/fetch \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/exchange-rates/fetch",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30"
    },
)
data = response.json()
```

## List the pevné kurzy this firm uses during the year

GET `/v1/ledger/exchange-rates/fixed`

List the pevné kurzy this firm uses during the year

MCP tool: `list-fixed-rates`

### 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` "fx\_fixed\_rate" required

`id` string required

`currency` string required

`validFrom` string required date

`validTo` string required date

`amount` integer required

`rate` number required

`ratePerUnit` number required

`sourceValidDate` string required date

`createdAt` 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/ledger/exchange-rates/fixed \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-rates/fixed', {
  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/ledger/exchange-rates/fixed",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Use a pevný kurz for a currency over a period: the ČNB rate of its first day, ending at the latest with the accounting period

POST `/v1/ledger/exchange-rates/fixed`

Use a pevný kurz for a currency over a period: the ČNB rate of its first day, ending at the latest with the accounting period. Zákon 563/1991 Sb. § 24d odst. 4 fixes the rate to the one published for the first day, so it cannot be typed in. Documents and payments dated in the period use it. The balance sheet date keeps the general rate. Banks, insurers, and similar institutions may not use a pevný kurz (§ 24d odst. 5).

MCP tool: `create-fixed-rate`

### Request body

`currency` string required 3 chars

ISO 4217 currency code, for example CZK or EUR.

`validFrom` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`validTo` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`currency` string required

`validFrom` string required date

`validTo` string required date

`amount` integer required

`rate` number required

`ratePerUnit` number required

`sourceValidDate` string required date

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/exchange-rates/fixed \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "currency": "CZK",
  "validFrom": "2026-10-30",
  "validTo": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-rates/fixed', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "currency": "CZK",
    "validFrom": "2026-10-30",
    "validTo": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/exchange-rates/fixed",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "currency": "CZK",
        "validFrom": "2026-10-30",
        "validTo": "2026-10-30"
    },
)
data = response.json()
```

## Stop using a pevný kurz. Anything already posted keeps the rate it was posted at

DELETE `/v1/ledger/exchange-rates/fixed/{id}`

Stop using a pevný kurz. Anything already posted keeps the rate it was posted at

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

MCP tool: `delete-fixed-rate`

### Path parameters

`id` string required

### Response · 200

`id` string required

`currency` string required

`validFrom` string required date

`validTo` string required date

`amount` integer required

`rate` number required

`ratePerUnit` number required

`sourceValidDate` string required date

`createdAt` string required date-time

```bash
curl -X DELETE https://api.damedoklad.cz/v1/ledger/exchange-rates/fixed/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-rates/fixed/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/ledger/exchange-rates/fixed/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The rate for a currency on a date, for filling exchangeRate on a document

GET `/v1/ledger/exchange-rates/lookup`

The rate for a currency on a date, for filling exchangeRate on a document. ratePerUnit is CZK per one unit of the currency. stale means ČNB was unreachable and a recent rate stands in.

MCP tool: `lookup-exchange-rate`

### Query parameters

`currency` string required 3 chars

ISO 4217 currency code, for example CZK or EUR.

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`currency` string required

`country` null | string

`currencyName` string

`amount` integer required

`rate` number required

`ratePerUnit` number required

`source` string required

`id` null | string

`date` string date

`validDate` string date

`stale` boolean

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-rates/lookup', {
  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/ledger/exchange-rates/lookup",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The ČNB monthly list of other currencies (kurzy ostatních měn), published on the last working day of a month for the whole next month

GET `/v1/ledger/exchange-rates/monthly`

The ČNB monthly list of other currencies (kurzy ostatních měn), published on the last working day of a month for the whole next month. year and month name the month of publication. Rate lookups use the list automatically for currencies outside the daily rates.

MCP tool: `list-monthly-exchange-rates`

### Query parameters

`year` integer required min 2000 max 2100

`month` integer required min 1 max 12

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "exchange\_rate" required

`currency` string required

`country` null | string

`currencyName` string

`amount` integer required

`rate` number required

`ratePerUnit` number required

`source` string required

`id` null | string

`date` string date

`validDate` string date

`stale` boolean

`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/ledger/exchange-rates/monthly \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exchange-rates/monthly', {
  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/ledger/exchange-rates/monthly",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Download an accounting report as CSV (semicolons, decimal comma, UTF-8 with BOM)

GET `/v1/ledger/exports/{report}/csv`

Download an accounting report as CSV (semicolons, decimal comma, UTF-8 with BOM). report: balance-sheet, income-statement, income-statement-functional, cash-flow, equity-changes, trial-balance, journal, cash-book, receivables, payables, income-expense, assets-liabilities. Takes the same filters as the report, plus unit and lang.

MCP tool: `export-accounting-report-csv`

### Path parameters

`report` string required

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`structure` "full" | "short" | "micro"

`level` "analytic" | "synthetic"

`unit` "czk" | "thousands"

`lang` "cs" | "en"

`account` string max 8 chars

`sourceType` string max 32 chars

`search` string max 200 chars

### Response · 200

Returns a text/csv; charset=utf-8 file.

```bash
curl https://api.damedoklad.cz/v1/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/csv \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/csv', {
  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/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/csv",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Download an accounting report as a printable PDF, such as the rozvaha or výkaz zisku a ztráty in the statutory layout

GET `/v1/ledger/exports/{report}/pdf`

Download an accounting report as a printable PDF, such as the rozvaha or výkaz zisku a ztráty in the statutory layout. Same reports and filters as the CSV export. unit=thousands prints whole thousands of CZK, as the statements are filed.

MCP tool: `export-accounting-report-pdf`

### Path parameters

`report` string required

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`structure` "full" | "short" | "micro"

`level` "analytic" | "synthetic"

`unit` "czk" | "thousands"

`lang` "cs" | "en"

`account` string max 8 chars

`sourceType` string max 32 chars

`search` string max 200 chars

### Response · 200

Returns a application/pdf file.

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exports/obj_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/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Download an accounting report as an Excel workbook

GET `/v1/ledger/exports/{report}/xlsx`

Download an accounting report as an Excel workbook. Same reports and filters as the CSV export. Money cells are real numbers.

MCP tool: `export-accounting-report-xlsx`

### Path parameters

`report` string required

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`structure` "full" | "short" | "micro"

`level` "analytic" | "synthetic"

`unit` "czk" | "thousands"

`lang` "cs" | "en"

`account` string max 8 chars

`sourceType` string max 32 chars

`search` string max 200 chars

### Response · 200

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

```bash
curl https://api.damedoklad.cz/v1/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/xlsx \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/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/ledger/exports/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/xlsx",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Hlavní kniha for one account: opening balance, movements with running balance, monthly turnover

GET `/v1/ledger/general-ledger/{number}`

Hlavní kniha for one account: opening balance, movements with running balance, monthly turnover. A synthetic number includes its analytic accounts.

MCP tool: `get-account-ledger`

### Path parameters

`number` string required

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`account` null | object required

`number` null | string required

`name` null | string required

`nameEn` null | string required

`type` string required

`periodId` string required

`periodName` string required

`from` string required date

`to` string required date

`openingHaler` integer required

`debitHaler` integer required

`creditHaler` integer required

`closingHaler` integer required

`movements` object\[\] required

`id` string required

`entryId` null | string required

`entryNumber` integer required

`entryDate` string required date

`accountNumber` null | string required

`description` null | string required

`documentNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`debitHaler` integer required

`creditHaler` integer required

`contactId` null | string required

`centerId` null | string required

`activityId` string | null required

`projectId` null | string required

`balanceHaler` integer required

`byMonth` object\[\] required

`month` null | string required

`debitHaler` integer required

`creditHaler` integer required

`balanceHaler` integer required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/general-ledger/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/ledger/general-ledger/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Výkaz o příjmech a výdajích for jednoduché účetnictví, by hlavní and hospodářská činnost

GET `/v1/ledger/income-expense-statement`

Výkaz o příjmech a výdajích for jednoduché účetnictví, by hlavní and hospodářská činnost

MCP tool: `get-income-expense-statement`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`periodId` string required

`periodName` string required

`income` object required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`mainHaler` integer required

`economicHaler` integer required

`totalHaler` integer | null required

`total` object required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`mainHaler` integer required

`economicHaler` integer required

`totalHaler` integer | null required

`expense` object required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`mainHaler` integer required

`economicHaler` integer required

`totalHaler` integer | null required

`total` object required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`mainHaler` integer required

`economicHaler` integer required

`totalHaler` integer | null required

`difference` object required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`mainHaler` integer required

`economicHaler` integer required

`totalHaler` integer | null required

`exceedsSingleEntryLimit` boolean required

```bash
curl https://api.damedoklad.cz/v1/ledger/income-expense-statement \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/income-expense-statement', {
  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/ledger/income-expense-statement",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List the účetní deník with lines. Filter by period, dates, account, contact, source, or dimension

GET `/v1/ledger/journal`

List the účetní deník with lines. Filter by period, dates, account, contact, source, or dimension

MCP tool: `list-journal-entries`

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

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`account` string max 8 chars

`periodId` string

ID of the period. Find it with list-periods.

`sourceType` string max 32 chars

`contactId` string

ID of the contact. Find it with list-contacts.

### Response · 200

`data` object\[\] required

`object` "journal\_entry" required

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`sourceType` string required

`sourceId` null | string required

`sourceEvent` null | string required

`documentNumber` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`canReverse` boolean required

`totalHaler` integer | null required

`lines` object\[\] required

`object` "journal\_line" required

`id` string required

`accountNumber` string required

`debitHaler` integer required

`creditHaler` integer required

`description` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` null | string required

`projectId` null | string required

`currency` null | string required

`foreignAmount` null | number 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/ledger/journal \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/journal', {
  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/ledger/journal",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Post an interní doklad: a balanced manual entry with at least two lines

POST `/v1/ledger/journal`

Post an interní doklad: a balanced manual entry with at least two lines. Debit must equal credit. Set isOpening for počáteční stavy of the first year in the app, posted against 701. Accounts 702 and 710 belong to the year-end close.

MCP tool: `create-journal-entry`

### Request body

`entryDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`description` string required max 200 chars

`documentNumber` string max 64 chars

`isOpening` boolean

`lines` object\[\] required

`accountNumber` string required

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

`debitHaler` integer min 0 max 9007199254740991

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

`creditHaler` integer min 0 max 9007199254740991

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

`description` string max 240 chars

`contactId` string

ID of the contact. Find it with list-contacts.

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`pairingSymbol` string max 32 chars

### Response · 201

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`sourceType` string required

`sourceId` null | string required

`sourceEvent` null | string required

`documentNumber` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`canReverse` boolean required

`totalHaler` integer | null required

`lines` object\[\] required

`object` "journal\_line" required

`id` string required

`accountNumber` string required

`debitHaler` integer required

`creditHaler` integer required

`description` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` null | string required

`projectId` null | string required

`currency` null | string required

`foreignAmount` null | number required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/journal \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "entryDate": "2026-10-30",
  "description": "Pečivo, říjen",
  "lines": [
    {
      "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "accountNumber": "518"
    },
    {
      "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "accountNumber": "518"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/journal', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "entryDate": "2026-10-30",
    "description": "Pečivo, říjen",
    "lines": [
      {
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "accountNumber": "518"
      },
      {
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "accountNumber": "518"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/journal",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "entryDate": "2026-10-30",
        "description": "Pečivo, říjen",
        "lines": [
            {
                "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "accountNumber": "518"
            },
            {
                "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "accountNumber": "518"
            }
        ]
    },
)
data = response.json()
```

## Get one journal entry with its lines

GET `/v1/ledger/journal/{id}`

Get one journal entry with its lines

MCP tool: `get-journal-entry`

### Path parameters

`id` string required

### Response · 200

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`sourceType` string required

`sourceId` null | string required

`sourceEvent` null | string required

`documentNumber` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`canReverse` boolean required

`totalHaler` integer | null required

`lines` object\[\] required

`object` "journal\_line" required

`id` string required

`accountNumber` string required

`debitHaler` integer required

`creditHaler` integer required

`description` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` null | string required

`projectId` null | string required

`currency` null | string required

`foreignAmount` null | number required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/journal/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/ledger/journal/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Reverse a manual entry with swapped sides. Posted entries are never edited

POST `/v1/ledger/journal/{id}/reverse`

Reverse a manual entry with swapped sides. Posted entries are never edited. Entries that came from a document, the close, or a revaluation are undone from there instead.

MCP tool: `reverse-journal-entry`

### Path parameters

`id` string required

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`description` string max 200 chars

### Response · 201

`id` string required

`periodId` string required

`number` integer required

`entryDate` string required date

`description` string required

`sourceType` string required

`sourceId` null | string required

`sourceEvent` null | string required

`documentNumber` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`canReverse` boolean required

`totalHaler` integer | null required

`lines` object\[\] required

`object` "journal\_line" required

`id` string required

`accountNumber` string required

`debitHaler` integer required

`creditHaler` integer required

`description` null | string required

`contactId` null | string required

`centerId` null | string required

`activityId` null | string required

`projectId` null | string required

`currency` null | string required

`foreignAmount` null | number required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/journal/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30",
  "description": "Pečivo, říjen"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/journal/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "date": "2026-10-30",
    "description": "Pečivo, říjen"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/journal/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reverse",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30",
        "description": "Pečivo, říjen"
    },
)
data = response.json()
```

## List úvěry and zápůjčky of daňová evidence and jednoduché účetnictví with their balances

GET `/v1/ledger/loans`

List úvěry and zápůjčky of daňová evidence and jednoduché účetnictví with their balances

MCP tool: `list-loans`

### 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` "ledger\_loan" required

`id` string required

`kind` string required

`name` string required

`contactId` string | null required

`balanceHaler` integer required

`movements` object\[\] required

`object` "ledger\_loan\_movement" required

`id` string required

`movedOn` string required date

`kind` string required

`amountHaler` integer required

`moneyAccount` null | string required

`cashEntryId` null | string 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/ledger/loans \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/loans', {
  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/ledger/loans",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Add a loan received or granted. Its movements feed the přehled o majetku a závazcích

POST `/v1/ledger/loans`

Add a loan received or granted. Its movements feed the přehled o majetku a závazcích

MCP tool: `create-loan`

### Request body

`kind` "received" | "granted" required

`name` string required max 200 chars

`contactId` string

ID of the contact. Find it with list-contacts.

### Response · 201

`id` string required

`kind` string required

`name` string required

`contactId` string | null required

`balanceHaler` integer required

`movements` object\[\] required

`object` "ledger\_loan\_movement" required

`id` string required

`movedOn` string required date

`kind` string required

`amountHaler` integer required

`moneyAccount` null | string required

`cashEntryId` null | string required

`note` string | null required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/loans', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "kind": "received",
    "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/ledger/loans",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "received",
        "name": "Pekárna U Lípy s.r.o."
    },
)
data = response.json()
```

## Record a loan movement: an opening balance, a drawdown, or a repayment. With moneyAccount it also writes the pass-through peněžní deník row

POST `/v1/ledger/loans/{id}/movements`

Record a loan movement: an opening balance, a drawdown, or a repayment. With moneyAccount it also writes the pass-through peněžní deník row. Loan principal is neither income nor an expense, so the row is a pass-through. Interest is an ordinary expense row of its own.

MCP tool: `create-loan-movement`

### Path parameters

`id` string required

### Request body

`movedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`kind` "opening" | "drawdown" | "repayment" required

`amountHaler` integer required max 9007199254740991

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

`moneyAccount` "bank" | "cash"

`note` string max 240 chars

### Response · 201

`id` string required

`kind` string required

`name` string required

`contactId` string | null required

`balanceHaler` integer required

`movements` object\[\] required

`object` "ledger\_loan\_movement" required

`id` string required

`movedOn` string required date

`kind` string required

`amountHaler` integer required

`moneyAccount` null | string required

`cashEntryId` null | string required

`note` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/loans/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/movements \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "movedOn": "2026-10-30",
  "kind": "opening",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/loans/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/movements', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "movedOn": "2026-10-30",
    "kind": "opening",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/loans/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/movements",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "movedOn": "2026-10-30",
        "kind": "opening",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Remove a loan movement, reversing its peněžní deník row, while its period is open

DELETE `/v1/ledger/loans/{id}/movements/{movementId}`

Remove a loan movement, reversing its peněžní deník row, while its period is open

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

MCP tool: `delete-loan-movement`

### Path parameters

`id` string required

`movementId` string required

ID of the movement. Find it with list-movements.

### Response · 200

`id` string required

`kind` string required

`name` string required

`contactId` string | null required

`balanceHaler` integer required

`movements` object\[\] required

`object` "ledger\_loan\_movement" required

`id` string required

`movedOn` string required date

`kind` string required

`amountHaler` integer required

`moneyAccount` null | string required

`cashEntryId` null | string required

`note` string | null required

```bash
curl -X DELETE https://api.damedoklad.cz/v1/ledger/loans/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/movements/mov_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/loans/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/movements/mov_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/ledger/loans/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/movements/mov_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List date locks by area (books, stock, orders, assets, vat, service) and the single records that are locked

GET `/v1/ledger/locks`

List date locks by area (books, stock, orders, assets, vat, service) and the single records that are locked

MCP tool: `list-date-locks`

### 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` "date\_lock" required

`id` string required

`area` string required

`lockedThrough` string required date

`level` integer required

`note` null | string required

`appliesToMe` boolean required

`updatedAt` 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/ledger/locks \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/locks', {
  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/ledger/locks",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Lock an area up to a date, or move the lock. Level 1 leaves owner and accountant free to write, level 2 stops everyone

PUT `/v1/ledger/locks/{area}`

Lock an area up to a date, or move the lock. Level 1 leaves owner and accountant free to write, level 2 stops everyone. The books lock also stops automatic postings dated inside it. Moving the date back reopens those days, and the change is in the audit log.

MCP tool: `set-date-lock`

### Path parameters

`area` string required

### Request body

`lockedThrough` string required YYYY-MM-DD

`level` 1 | 2 default `1`

`note` string max 240 chars

### Response · 200

`id` string required

`area` string required

`lockedThrough` string required date

`level` integer required

`note` null | string required

`appliesToMe` boolean required

`updatedAt` string required date-time

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/locks/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "lockedThrough": "2026-10-30"
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/locks/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "lockedThrough": "2026-10-30"
    },
)
data = response.json()
```

## Remove the date lock of an area

DELETE `/v1/ledger/locks/{area}`

Remove the date lock of an area

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

MCP tool: `delete-date-lock`

### Path parameters

`area` string required

### Response · 200

`id` string required

`area` string required

`deleted` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/locks/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/ledger/locks/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List single records that are locked

GET `/v1/ledger/locks/records`

List single records that are locked

MCP tool: `list-record-locks`

### 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` "record\_lock" required

`id` string required

`objectType` null | string required

`objectId` null | string required

`label` null | string required

`level` integer required

`note` null | string required

`createdAt` 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/ledger/locks/records \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/locks/records', {
  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/ledger/locks/records",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Lock one record by its id: a document, stock document, asset, journal entry, complaint, service job, or bank movement. Every write addressed to it is refused until unlocked, and so is paying a locked document from the bank or the till

POST `/v1/ledger/locks/records`

Lock one record by its id: a document, stock document, asset, journal entry, complaint, service job, or bank movement. Every write addressed to it is refused until unlocked, and so is paying a locked document from the bank or the till

MCP tool: `create-record-lock`

### Request body

`objectId` string required

ID of the object.

`level` 1 | 2 default `1`

`note` string max 240 chars

### Response · 201

`id` string required

`objectType` null | string required

`objectId` null | string required

`label` null | string required

`level` integer required

`note` null | string required

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/locks/records \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "objectId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

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

```python
import os
import requests

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

## Unlock one record, by the id of the lock

DELETE `/v1/ledger/locks/records/{id}`

Unlock one record, by the id of the lock

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

MCP tool: `delete-record-lock`

### Path parameters

`id` string required

### Response · 200

`id` string required

`objectType` null | string required

`objectId` null | string required

`label` null | string required

`level` integer required

`note` null | string required

`createdAt` string required date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/locks/records/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/ledger/locks/records/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Lock a VAT month once filed: documents reported in it are refused until it is unlocked

POST `/v1/ledger/locks/vat/period`

Lock a VAT month once filed: documents reported in it are refused until it is unlocked. A quarterly payer locks the whole quarter. A correction of a filed month is a dodatečné přiznání, so unlock first, or date the correction in an open month where the law allows it.

MCP tool: `lock-vat-period`

### Request body

`year` integer required min 2000 max 2100

`month` integer required min 1 max 12

`level` 1 | 2 default `1`

### Response · 200

`id` string required

`area` string required

`lockedThrough` string required date

`level` integer required

`note` null | string required

`appliesToMe` boolean required

`updatedAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/locks/vat/period \
  -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/ledger/locks/vat/period', {
  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/ledger/locks/vat/period",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "year": 2026,
        "month": 1
    },
)
data = response.json()
```

## The opening balances posted through the migration screen, if any

GET `/v1/ledger/opening-balances`

The opening balances posted through the migration screen, if any

MCP tool: `get-opening-balances`

### Response · 200

`posted` boolean required

`date` null | string required date

`entryIds` string\[\] required

`resultHaler` integer

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/opening-balances', {
  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/ledger/opening-balances",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Post opening balances for a company migrating mid-life: balance sheet accounts through 701, and result accounts of a year under way as turnover

POST `/v1/ledger/opening-balances`

Post opening balances for a company migrating mid-life: balance sheet accounts through 701, and result accounts of a year under way as turnover. Debits must equal credits across all rows. Allowed once; undo it to enter it again. A stated opening balance of a bank account or register in these rows gives way to them.

MCP tool: `post-opening-balances`

### Request body

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`documentNumber` string max 64 chars

`rows` object\[\] required

`accountNumber` string required

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

`debitHaler` integer min 0 max 9007199254740991

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

`creditHaler` integer min 0 max 9007199254740991

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

### Response · 201

`posted` boolean required

`date` null | string required date

`entryIds` string\[\] required

`resultHaler` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/opening-balances \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30",
  "rows": [
    {
      "accountNumber": "518"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/opening-balances', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "date": "2026-10-30",
    "rows": [
      {
        "accountNumber": "518"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/opening-balances",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30",
        "rows": [
            {
                "accountNumber": "518"
            }
        ]
    },
)
data = response.json()
```

## Undo the opening balances with reversal entries, while their period is open

DELETE `/v1/ledger/opening-balances`

Undo the opening balances with reversal entries, while their period is open

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

MCP tool: `undo-opening-balances`

### Response · 200

`posted` boolean required

`date` null | string required date

`entryIds` string\[\] required

`resultHaler` integer

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/opening-balances', {
  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/ledger/opening-balances",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Check opening balances before posting: the difference that must be zero, the running result, and the entries that would post

POST `/v1/ledger/opening-balances/preview`

Check opening balances before posting: the difference that must be zero, the running result, and the entries that would post

MCP tool: `preview-opening-balances`

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`documentNumber` string max 64 chars

`rows` object\[\] required

`accountNumber` string required

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

`debitHaler` integer min 0 max 9007199254740991

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

`creditHaler` integer min 0 max 9007199254740991

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

### Response · 200

`differenceHaler` integer required

`resultHaler` integer required

`openingLines` object\[\] required

`accountNumber` null | string required

`debitHaler` integer

`creditHaler` integer

`description` null | string

`turnoverLines` object\[\] required

`accountNumber` null | string required

`creditHaler` integer

`debitHaler` integer

`description` null | string

`canPost` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/opening-balances/preview \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "rows": [
    {
      "accountNumber": "518"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/opening-balances/preview', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "rows": [
      {
        "accountNumber": "518"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/opening-balances/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "rows": [
            {
                "accountNumber": "518"
            }
        ]
    },
)
data = response.json()
```

## Kniha závazků at any date, derived from received invoices and their settlements. Without a journal it also holds what payroll still owes

GET `/v1/ledger/payables`

Kniha závazků at any date, derived from received invoices and their settlements. Without a journal it also holds what payroll still owes

MCP tool: `get-payables-book`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`contactId` string

ID of the contact. Find it with list-contacts.

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

### Response · 200

`date` string required date

`rows` object\[\] required

`id` string required

`number` null | string required

`contactId` null | string required

`contactName` null | string required

`issueDate` null | string required date

`dueDate` null | string required date

`currency` null | string required

`totalHaler` integer | null required

`paidHaler` integer required

`openHaler` integer required

`openCzkHaler` integer required

`overdueDays` integer required

`type` string

`kind` string

`totals` object required

`openCzkHaler` integer required

`overdueCzkHaler` integer required

`payrollCzkHaler` integer

`retainedCzkHaler` integer

`total` integer required

`hasMore` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/payables', {
  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/ledger/payables",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List accounting periods with their status, entry counts, and year-end close

GET `/v1/ledger/periods`

List accounting periods with their status, entry counts, and year-end close

MCP tool: `list-periods`

### 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` "period" required

`id` string required

`name` string required

`startsOn` string required date

`endsOn` string required date

`closedAt` null | string required date-time

`status` string required

`journalEntryCount` integer required

`cashEntryCount` integer required

`closing` null | object required

`id` string required

`resultHaler` integer required

`createdAt` string required date-time

`earlierPeriodOpen` boolean required

`laterPeriodClosed` boolean 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/ledger/periods \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods', {
  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/ledger/periods",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## What must be done before the year-end close: unpaired movements, drafts, depreciation, stocktake, revaluation, accruals, VAT, income tax

GET `/v1/ledger/periods/{id}/checklist`

What must be done before the year-end close: unpaired movements, drafts, depreciation, stocktake, revaluation, accruals, VAT, income tax. Each item says done, todo, or not\_applicable, how many things are open, and where to fix them. Items the books cannot prove are confirmed by hand with confirmYearEndChecklistItem. The checklist advises and never blocks the close.

MCP tool: `get-year-end-checklist`

### Path parameters

`id` string required

### Response · 200

`periodId` string required

`periodName` string required

`items` object\[\] required

`params` object required

`months` string\[\]

`from` string date

`to` string date

`accounts` any\[\]

`periods` string\[\]

`date` string date

`key` string required

`status` string required

`count` integer required

`action` object required

`path` null | string

`tab` string

`canConfirm` boolean required

`confirmation` null | object required

`at` string required date-time

`note` null | string required

`openCount` integer required

`ready` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/checklist', {
  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/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/checklist",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Confirm or clear one item of the year-end checklist that a person has to vouch for

PUT `/v1/ledger/periods/{id}/checklist/{item}`

Confirm or clear one item of the year-end checklist that a person has to vouch for

MCP tool: `confirm-year-end-checklist-item`

### Path parameters

`id` string required

`item` string required

### Request body

`confirmed` boolean required

`note` string max 500 chars

### Response · 200

`periodId` string required

`periodName` string required

`items` object\[\] required

`params` object required

`months` string\[\]

`from` string date

`to` string date

`accounts` any\[\]

`periods` string\[\]

`date` string date

`key` string required

`status` string required

`count` integer required

`action` object required

`path` null | string

`tab` string

`canConfirm` boolean required

`confirmation` null | object required

`at` string required date-time

`note` null | string required

`openCount` integer required

`ready` boolean required

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/checklist/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "confirmed": false
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/checklist/itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "confirmed": False
    },
)
data = response.json()
```

## Lock a period of daňová evidence or jednoduché účetnictví. Podvojné účetnictví closes through the year-end close

POST `/v1/ledger/periods/{id}/close`

Lock a period of daňová evidence or jednoduché účetnictví. Podvojné účetnictví closes through the year-end close

MCP tool: `close-period`

### Path parameters

`id` string required

### Request body

`confirm` true required

### Response · 200

`id` string required

`name` string required

`startsOn` string required date

`endsOn` string required date

`closedAt` null | string required date-time

`status` string required

`journalEntryCount` integer required

`cashEntryCount` integer required

`closing` null | object required

`id` string required

`resultHaler` integer required

`createdAt` string required date-time

`earlierPeriodOpen` boolean required

`laterPeriodClosed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/close \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "confirm": true
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/close', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "confirm": true
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Year-end close preview: the result, the 710, 702, and 701 entries, and blocking errors and warnings

GET `/v1/ledger/periods/{id}/closing`

Year-end close preview: the result, the 710, 702, and 701 entries, and blocking errors and warnings

MCP tool: `preview-closing`

### Path parameters

`id` string required

### Response · 200

`periodId` string required

`periodName` string required

`closingDate` string required date

`openingDate` null | string required date

`nextPeriodName` string required

`resultHaler` integer required

`legalForm` string required

`entries` object required

`resultCarry` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`debitHaler` integer required

`creditHaler` integer required

`profitAndLoss` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`debitHaler` integer required

`creditHaler` integer required

`resultTransfer` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`debitHaler` integer required

`creditHaler` integer required

`balanceSheet` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`debitHaler` integer required

`creditHaler` integer required

`opening` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`debitHaler` integer required

`creditHaler` integer required

`ownerTransfer` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`debitHaler` integer required

`creditHaler` integer required

`errors` object\[\] required

`code` null | string required

`message` null | string required

`params` object required

`differenceHaler` integer

`period` string

`warnings` object\[\] required

`code` null | string required

`message` null | string required

`params` object required

`count` integer

`accounts` object\[\]

`accountNumber` null | string required

`balanceHaler` integer required

`date` string date

`missingRates` any\[\]

`canClose` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closing', {
  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/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closing",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Run the year-end close: post 710 and 702 closing entries and 701 opening entries, carry the result to 431 (491 for a sole trader), lock the period

POST `/v1/ledger/periods/{id}/closing`

Run the year-end close: post 710 and 702 closing entries and 701 opening entries, carry the result to 431 (491 for a sole trader), lock the period. Creates the next period if needed. An earlier result still on 431 moves to 428 or 429 (491 for a sole trader), per ČÚS 018 bod 3.1.11. A v.o.s. must post the partners share first. Can be undone until something else is posted into the next period.

MCP tool: `run-closing`

### Path parameters

`id` string required

### Request body

`confirm` true required

### Response · 201

`id` string required

`name` string required

`startsOn` string required date

`endsOn` string required date

`closedAt` null | string required date-time

`status` string required

`journalEntryCount` integer required

`cashEntryCount` integer required

`closing` null | object required

`id` string required

`resultHaler` integer required

`createdAt` string required date-time

`earlierPeriodOpen` boolean required

`laterPeriodClosed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closing \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "confirm": true
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closing', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "confirm": true
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Undo the year-end close with reversal entries and reopen the period, if nothing else is posted into the next period

DELETE `/v1/ledger/periods/{id}/closing`

Undo the year-end close with reversal entries and reopen the period, if nothing else is posted into the next period

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

MCP tool: `undo-closing`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` string required

`startsOn` string required date

`endsOn` string required date

`closedAt` null | string required date-time

`status` string required

`journalEntryCount` integer required

`cashEntryCount` integer required

`closing` null | object required

`id` string required

`resultHaler` integer required

`createdAt` string required date-time

`earlierPeriodOpen` boolean required

`laterPeriodClosed` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closing', {
  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/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closing",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Reopen the latest closed period. A year-end close must be undone instead

POST `/v1/ledger/periods/{id}/reopen`

Reopen the latest closed period. A year-end close must be undone instead

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

MCP tool: `reopen-period`

### Path parameters

`id` string required

### Request body

`confirm` true required

### Response · 200

`id` string required

`name` string required

`startsOn` string required date

`endsOn` string required date

`closedAt` null | string required date-time

`status` string required

`journalEntryCount` integer required

`cashEntryCount` integer required

`closing` null | object required

`id` string required

`resultHaler` integer required

`createdAt` string required date-time

`earlierPeriodOpen` boolean required

`laterPeriodClosed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "confirm": true
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reopen', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "confirm": true
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## The result before and after tax, the legal form, and the tax, provision, and partner share postings already made for a period

GET `/v1/ledger/periods/{id}/year-end`

The result before and after tax, the legal form, and the tax, provision, and partner share postings already made for a period

MCP tool: `get-year-end-overview`

### Path parameters

`id` string required

### Response · 200

`periodId` string required

`periodName` string required

`legalForm` string required

`resultHaler` integer required

`taxHaler` integer required

`shareHaler` integer required

`beforeTaxHaler` integer required

`beforeShareHaler` integer required

`steps` object\[\] required

`object` "year\_end\_step" required

`id` string required

`periodId` string required

`kind` string required

`date` string required date

`amountHaler` integer required

`details` object required

`resultHaler` integer

`sharePercent` integer

`kind` string

`note` null | string

`allocations` object\[\]

`amountHaler` integer required

`accountNumber` null | string required

`entryId` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

```bash
curl https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end', {
  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/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Transfer the partners share of the result through 596: all of it for a v.o.s., the komplementář percentage for a k.s.

POST `/v1/ledger/periods/{id}/year-end/partner-share`

Transfer the partners share of the result through 596: all of it for a v.o.s., the komplementář percentage for a k.s.

MCP tool: `create-partner-share`

### Path parameters

`id` string required

### Request body

`sharePercent` number max 100

### Response · 201

`id` string required

`periodId` string required

`kind` string required

`date` string required date

`amountHaler` integer required

`details` object required

`resultHaler` integer

`sharePercent` integer

`kind` string

`note` null | string

`allocations` object\[\]

`amountHaler` integer required

`accountNumber` null | string required

`entryId` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end/partner-share \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "sharePercent": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end/partner-share', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "sharePercent": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end/partner-share",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "sharePercent": 1
    },
)
data = response.json()
```

## Post income tax (591/341), an income tax provision (599/453) or its release (453/599), a statutory provision (552/451), or another provision (554/459) at the last day of the period

POST `/v1/ledger/periods/{id}/year-end/steps`

Post income tax (591/341), an income tax provision (599/453) or its release (453/599), a statutory provision (552/451), or another provision (554/459) at the last day of the period

MCP tool: `create-year-end-step`

### Path parameters

`id` string required

### Request body

`kind` "income\_tax" | "tax\_provision" | "tax\_provision\_release" | "statutory\_provision" | "other\_provision" required

`amountHaler` integer required max 9007199254740991

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

`description` string max 200 chars

### Response · 201

`id` string required

`periodId` string required

`kind` string required

`date` string required date

`amountHaler` integer required

`details` object required

`resultHaler` integer

`sharePercent` integer

`kind` string

`note` null | string

`allocations` object\[\]

`amountHaler` integer required

`accountNumber` null | string required

`entryId` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end/steps \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "income_tax",
  "amountHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end/steps', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "kind": "income_tax",
    "amountHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/periods/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/year-end/steps",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "income_tax",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Create the accounting period after the latest one

POST `/v1/ledger/periods/next`

Create the accounting period after the latest one

MCP tool: `create-next-period`

### Response · 201

`id` string required

`name` string required

`startsOn` string required date

`endsOn` string required date

`closedAt` null | string required date-time

`status` string required

`journalEntryCount` integer required

`cashEntryCount` integer required

`closing` null | object required

`id` string required

`resultHaler` integer required

`createdAt` string required date-time

`earlierPeriodOpen` boolean required

`laterPeriodClosed` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/periods/next \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/periods/next', {
  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/ledger/periods/next",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Ekonomické ukazatele by year: liquidity, profitability, activity, and debt, each with its stated formula

GET `/v1/ledger/ratios`

Ekonomické ukazatele by year: liquidity, profitability, activity, and debt, each with its stated formula. Textbook formulas, stated on every row. Read from balances before the closing entries; the current year is a running figure.

MCP tool: `get-economic-ratios`

### Query parameters

`years` integer min 1 max 10

`toYear` integer min 2000 max 2100

### Response · 200

`years` integer\[\] required

`currentYear` integer required

`ratios` object\[\] required

`key` string required

`group` string required

`cs` string required

`en` string required

`formula` object required

`cs` string required

`en` string required

`unit` null | string required

`values` object\[\] required

`year` integer required

`value` null | number required

`longTerm` object\[\]

`year` integer required

`receivablesHaler` integer required

`payablesHaler` integer required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/ratios', {
  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/ledger/ratios",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Download the ekonomické ukazatele as a PDF

GET `/v1/ledger/ratios/pdf`

Download the ekonomické ukazatele as a PDF

MCP tool: `get-economic-ratios-pdf`

### Query parameters

`years` integer min 1 max 10

`toYear` integer min 2000 max 2100

### Response · 200

Returns a application/pdf file.

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/ratios/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/ledger/ratios/pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Kniha pohledávek at any date, derived from issued invoices and credit notes and their payments

GET `/v1/ledger/receivables`

Kniha pohledávek at any date, derived from issued invoices and credit notes and their payments

MCP tool: `get-receivables-book`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`contactId` string

ID of the contact. Find it with list-contacts.

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

### Response · 200

`date` string required date

`rows` object\[\] required

`id` string required

`number` null | string required

`contactId` null | string required

`contactName` null | string required

`issueDate` null | string required date

`dueDate` null | string required date

`currency` null | string required

`totalHaler` integer | null required

`paidHaler` integer required

`openHaler` integer required

`openCzkHaler` integer required

`overdueDays` integer required

`retentions` object\[\]

`amountHaler` integer | null required

`dueDate` null | string required date

`retainedNotDueHaler` integer

`retainedNotDueCzkHaler` integer

`retainedHaler` integer

`retainedCzkHaler` integer

`totals` object required

`openCzkHaler` integer required

`overdueCzkHaler` integer required

`retainedCzkHaler` integer

`total` integer required

`hasMore` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/receivables', {
  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/ledger/receivables",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List batch re-classifications: who moved what, when, and why

GET `/v1/ledger/reclassifications`

List batch re-classifications: who moved what, when, and why

MCP tool: `list-reclassifications`

### 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` "reclassification\_batch" required

`id` string required

`date` string required date

`reason` string required

`toAccount` null | string required

`toCenterId` null | string required

`toActivityId` string | null required

`toProjectId` string | null required

`filters` object required

`to` string required date

`from` string required date

`search` string

`account` null | string required

`lineCount` integer required

`amountHaler` integer required

`entryId` null | string required

`createdById` null | string required

`createdAt` string required date-time

`undoneAt` null | 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/ledger/reclassifications \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/reclassifications', {
  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/ledger/reclassifications",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Move selected journal lines to another account or dimension with one correcting entry. Originals stay, and the batch is recorded in the audit log

POST `/v1/ledger/reclassifications`

Move selected journal lines to another account or dimension with one correcting entry. Originals stay, and the batch is recorded in the audit log. The entry date must be in the same open period as every line, because moving a cost across years would change a result that is already reported.

MCP tool: `create-reclassification`

### Request body

`filter` object required

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`account` string required min 3 chars max 8 chars

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`contactId` string

ID of the contact. Find it with list-contacts.

`search` string max 200 chars

`target` object required

`toAccount` string

`toCenterId` string | null

ID of the to center.

`toActivityId` string | null

ID of the to activity.

`toProjectId` string | null

ID of the to project.

`lineIds` string\[\] required

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`reason` string required max 200 chars

### Response · 201

`id` string required

`date` string required date

`reason` string required

`toAccount` null | string required

`toCenterId` null | string required

`toActivityId` string | null required

`toProjectId` string | null required

`filters` object required

`to` string required date

`from` string required date

`search` string

`account` null | string required

`lineCount` integer required

`amountHaler` integer required

`entryId` null | string required

`createdById` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/reclassifications \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "filter": {
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "account": "string",
    "from": "2026-10-30",
    "to": "2026-10-30"
  },
  "target": {
    "toAccount": "518",
    "toCenterId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "toActivityId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  },
  "lineIds": [
    "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  ],
  "date": "2026-10-30",
  "reason": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/reclassifications', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "filter": {
      "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "account": "string",
      "from": "2026-10-30",
      "to": "2026-10-30"
    },
    "target": {
      "toAccount": "518",
      "toCenterId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "toActivityId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
    "lineIds": [
      "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    ],
    "date": "2026-10-30",
    "reason": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/reclassifications",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "filter": {
            "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
            "account": "string",
            "from": "2026-10-30",
            "to": "2026-10-30"
        },
        "target": {
            "toAccount": "518",
            "toCenterId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
            "toActivityId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        },
        "lineIds": [
            "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        ],
        "date": "2026-10-30",
        "reason": "string"
    },
)
data = response.json()
```

## Undo a batch re-classification with a reversal entry, which frees its lines to be moved again

DELETE `/v1/ledger/reclassifications/{id}`

Undo a batch re-classification with a reversal entry, which frees its lines to be moved again

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

MCP tool: `undo-reclassification`

### Path parameters

`id` string required

### Response · 200

`id` string required

`date` string required date

`reason` string required

`toAccount` null | string required

`toCenterId` null | string required

`toActivityId` string | null required

`toProjectId` string | null required

`filters` object required

`to` string required date

`from` string required date

`search` string

`account` null | string required

`lineCount` integer required

`amountHaler` integer required

`entryId` null | string required

`createdById` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/reclassifications/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/ledger/reclassifications/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The journal lines a batch re-classification could move: account, date range, and optional dimension, contact, and text filters

GET `/v1/ledger/reclassifications/preview`

The journal lines a batch re-classification could move: account, date range, and optional dimension, contact, and text filters. Lines of closed periods, reversed entries, and the year-end close are left out. Control accounts that a document payment reads (311, 321, 314, 051, 052, 151, 152, 153, 324, 343) cannot be moved.

MCP tool: `preview-reclassification`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`account` string required min 3 chars max 8 chars

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`contactId` string

ID of the contact. Find it with list-contacts.

`search` string max 200 chars

### Response · 200

`truncated` boolean required

`lineCount` integer required

`debitHaler` integer required

`creditHaler` integer required

`lines` object\[\] required

`id` string required

`entryId` null | string required

`date` string required date

`documentNumber` string | null required

`description` null | string required

`accountNumber` null | string required

`debitHaler` integer required

`creditHaler` integer required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`sourceType` null | string required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/reclassifications/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/ledger/reclassifications/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Reconcile synthetic and analytic accounts, and 311 and 315, 321 and 325, fixed assets, and inventories against their own records

GET `/v1/ledger/reconciliation`

Reconcile synthetic and analytic accounts, and 311 and 315, 321 and 325, fixed assets, and inventories against their own records. A synthetic account with analytics should hold nothing directly. A difference on a subledger row means the ledger and the record disagree: a year-end revaluation of foreign documents is one honest cause, and způsob B inventories another.

MCP tool: `get-ledger-reconciliation`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`periodId` string required

`periodName` string required

`date` string required date

`accounts` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`balanceHaler` integer required

`analyticHaler` integer required

`unassignedHaler` integer required

`usesAnalytics` boolean required

`analytics` object\[\] required

`accountNumber` null | string required

`balanceHaler` integer required

`inChart` boolean required

`ok` boolean required

`subledgers` object\[\] required

`key` string required

`label` null | string required

`labelEn` string required

`ledgerHaler` integer required

`subledgerHaler` integer required

`differenceHaler` integer required

`ok` boolean required

`ok` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/reconciliation', {
  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/ledger/reconciliation",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## List recurring internal documents

GET `/v1/ledger/recurring-documents`

List recurring internal documents

MCP tool: `list-recurring-journal-documents`

### 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` "recurring\_journal\_document" required

`id` string required

`name` string required

`description` string required

`frequency` string required

`nextDate` string required date

`endDate` null | string required date

`status` string required

`lines` object\[\] required

`debitHaler` integer

`accountNumber` null | string required

`creditHaler` integer

`lastPostedOn` null | string required date

`lastError` null | string required

`createdAt` 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/ledger/recurring-documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/recurring-documents', {
  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/ledger/recurring-documents",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create a recurring internal document: balanced lines posted monthly, quarterly, or yearly from a start date

POST `/v1/ledger/recurring-documents`

Create a recurring internal document: balanced lines posted monthly, quarterly, or yearly from a start date. Dates already due post at once. The hourly job posts the rest, once per date.

MCP tool: `create-recurring-journal-document`

### Request body

`name` string required max 200 chars

`description` string required max 200 chars

`frequency` "monthly" | "quarterly" | "yearly" required

`startDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`lines` object\[\] required

`accountNumber` string required

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

`debitHaler` integer min 0 max 9007199254740991

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

`creditHaler` integer min 0 max 9007199254740991

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

`description` string max 240 chars

`contactId` string

ID of the contact. Find it with list-contacts.

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`pairingSymbol` string max 32 chars

### Response · 201

`id` string required

`name` string required

`description` string required

`frequency` string required

`nextDate` string required date

`endDate` null | string required date

`status` string required

`lines` object\[\] required

`debitHaler` integer

`accountNumber` null | string required

`creditHaler` integer

`lastPostedOn` null | string required date

`lastError` null | string required

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/recurring-documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "description": "Pečivo, říjen",
  "frequency": "monthly",
  "startDate": "2026-10-30",
  "lines": [
    {
      "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "accountNumber": "518"
    },
    {
      "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "accountNumber": "518"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/recurring-documents', {
  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.",
    "description": "Pečivo, říjen",
    "frequency": "monthly",
    "startDate": "2026-10-30",
    "lines": [
      {
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "accountNumber": "518"
      },
      {
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "accountNumber": "518"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/recurring-documents",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "description": "Pečivo, říjen",
        "frequency": "monthly",
        "startDate": "2026-10-30",
        "lines": [
            {
                "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "accountNumber": "518"
            },
            {
                "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "accountNumber": "518"
            }
        ]
    },
)
data = response.json()
```

## Change, pause, or resume a recurring internal document. Entries already posted do not change

PATCH `/v1/ledger/recurring-documents/{id}`

Change, pause, or resume a recurring internal document. Entries already posted do not change

MCP tool: `update-recurring-journal-document`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`description` string max 200 chars

`frequency` "monthly" | "quarterly" | "yearly"

`nextDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string | null

Date as YYYY-MM-DD.

`status` "active" | "paused"

`lines` object\[\]

`accountNumber` string required

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

`debitHaler` integer min 0 max 9007199254740991

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

`creditHaler` integer min 0 max 9007199254740991

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

`description` string max 240 chars

`contactId` string

ID of the contact. Find it with list-contacts.

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`pairingSymbol` string max 32 chars

### Response · 200

`id` string required

`name` string required

`description` string required

`frequency` string required

`nextDate` string required date

`endDate` null | string required date

`status` string required

`lines` object\[\] required

`debitHaler` integer

`accountNumber` null | string required

`creditHaler` integer

`lastPostedOn` null | string required date

`lastError` null | string required

`createdAt` string required date-time

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/recurring-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Pekárna U Lípy s.r.o.",
  "description": "Pečivo, říjen",
  "frequency": "monthly"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/recurring-documents/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.",
    "description": "Pečivo, říjen",
    "frequency": "monthly"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/recurring-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "description": "Pečivo, říjen",
        "frequency": "monthly"
    },
)
data = response.json()
```

## Post every recurring internal document due by a date

POST `/v1/ledger/recurring-documents/run`

Post every recurring internal document due by a date

MCP tool: `run-due-recurring-journal-documents`

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`documents` integer required

`posted` integer required

`failed` object\[\] required

`documentId` string required

`date` string required date

`error` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/recurring-documents/run \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/recurring-documents/run",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30"
    },
)
data = response.json()
```

## The transition to accounting of this company, if any, with its tax adjustment plan by year

GET `/v1/ledger/regime-transition`

The transition to accounting of this company, if any, with its tax adjustment plan by year

MCP tool: `get-regime-transition`

### Response · 200

`id` null | string required

`status` string required

`effectiveFrom` null | string date

`method` null | string

`snapshot` null | object

`payables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`adjustment` object required

`netHaler` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`spreadableHaler` integer required

`immediateIncreaseHaler` integer required

`fromRegime` string required

`receivables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`advancesPaid` any\[\] required

`inventoryHaler` integer required

`advancesReceived` any\[\] required

`plan` object\[\]

`year` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`increaseHaler` integer

`decreaseHaler` integer

`journalEntryId` null | string

`endedYear` integer | null

`postedAt` null | string date-time

```bash
curl https://api.damedoklad.cz/v1/ledger/regime-transition \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/regime-transition', {
  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/ledger/regime-transition",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Move from daňová evidence or jednoduché účetnictví to podvojné účetnictví from the first day of a period: post the opening entry against 701 and 491, keep the Příloha 3 adjustment for the tax return, and switch the regime

POST `/v1/ledger/regime-transition`

Move from daňová evidence or jednoduché účetnictví to podvojné účetnictví from the first day of a period: post the opening entry against 701 and 491, keep the Příloha 3 adjustment for the tax return, and switch the regime. One-off, or § 23 odst. 14 ZDP over 9 tax periods for zásoby and pohledávky. The date must have arrived and hold no cash book rows. The tax base is adjusted in the return, not in the books.

MCP tool: `start-regime-transition`

### Request body

`effectiveFrom` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`method` "one\_off" | "spread" default `"one_off"`

`inventoryHaler` integer min 0 max 9007199254740991

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

`stampsHaler` integer min 0 max 9007199254740991

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

`advancesPaidTangibleHaler` integer min 0 max 9007199254740991

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

`other` object\[\]

`accountNumber` string required

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

`side` "debit" | "credit" required

`amountHaler` integer required max 9007199254740991

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

`description` string max 240 chars

`confirm` true required

### Response · 201

`id` null | string required

`status` string required

`effectiveFrom` null | string date

`method` null | string

`snapshot` null | object

`payables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`adjustment` object required

`netHaler` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`spreadableHaler` integer required

`immediateIncreaseHaler` integer required

`fromRegime` string required

`receivables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`advancesPaid` any\[\] required

`inventoryHaler` integer required

`advancesReceived` any\[\] required

`plan` object\[\]

`year` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`increaseHaler` integer

`decreaseHaler` integer

`journalEntryId` null | string

`endedYear` integer | null

`postedAt` null | string date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/regime-transition \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "effectiveFrom": "2026-10-30",
  "confirm": true
}'
```

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

```python
import os
import requests

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

## Undo the transition while nothing else is posted in its period: reverse the opening entry and go back to daňová evidence

DELETE `/v1/ledger/regime-transition/{id}`

Undo the transition while nothing else is posted in its period: reverse the opening entry and go back to daňová evidence

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

MCP tool: `undo-regime-transition`

### Path parameters

`id` string required

### Response · 200

`id` null | string required

`status` string required

`effectiveFrom` null | string date

`method` null | string

`snapshot` null | object

`payables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`adjustment` object required

`netHaler` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`spreadableHaler` integer required

`immediateIncreaseHaler` integer required

`fromRegime` string required

`receivables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`advancesPaid` any\[\] required

`inventoryHaler` integer required

`advancesReceived` any\[\] required

`plan` object\[\]

`year` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`increaseHaler` integer

`decreaseHaler` integer

`journalEntryId` null | string

`endedYear` integer | null

`postedAt` null | string date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/regime-transition/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/ledger/regime-transition/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Say the activity ended or stopped: § 23 odst. 14 ZDP brings the rest of the zásoby and pohledávky into that tax year

POST `/v1/ledger/regime-transition/{id}/end-spread`

Say the activity ended or stopped: § 23 odst. 14 ZDP brings the rest of the zásoby and pohledávky into that tax year

MCP tool: `end-regime-transition-spread`

### Path parameters

`id` string required

### Request body

`endedYear` integer required min 2000 max 2100

`confirm` true required

### Response · 200

`id` null | string required

`status` string required

`effectiveFrom` null | string date

`method` null | string

`snapshot` null | object

`payables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`adjustment` object required

`netHaler` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`spreadableHaler` integer required

`immediateIncreaseHaler` integer required

`fromRegime` string required

`receivables` object\[\] required

`number` null | string required

`netHaler` integer required

`contactOid` string required

`amountHaler` integer | null required

`contactName` null | string required

`description` null | string required

`pairingSymbol` null | string required

`advancesPaid` any\[\] required

`inventoryHaler` integer required

`advancesReceived` any\[\] required

`plan` object\[\]

`year` integer required

`decreaseHaler` integer required

`increaseHaler` integer required

`increaseHaler` integer

`decreaseHaler` integer

`journalEntryId` null | string

`endedYear` integer | null

`postedAt` null | string date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/regime-transition/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/end-spread \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "endedYear": 2026,
  "confirm": true
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/regime-transition/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/end-spread', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "endedYear": 2026,
    "confirm": true
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/regime-transition/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/end-spread",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "endedYear": 2026,
        "confirm": True
    },
)
data = response.json()
```

## Přechod z daňové evidence nebo jednoduchého účetnictví na účetnictví: the opening entry and the tax adjustment under Příloha 3 ZDP for a date. Posts nothing

GET `/v1/ledger/regime-transition/preview`

Přechod z daňové evidence nebo jednoduchého účetnictví na účetnictví: the opening entry and the tax adjustment under Příloha 3 ZDP for a date. Posts nothing

MCP tool: `preview-regime-transition`

### Query parameters

`effectiveFrom` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`effectiveFrom` null | string required date

`closingDate` string required date

`money` object\[\] required

`accountNumber` null | string required

`amountHaler` integer | null required

`description` null | string required

`receivables` object\[\] required

`amountHaler` integer | null required

`contactOid` string required

`description` null | string required

`pairingSymbol` null | string required

`netHaler` integer required

`number` null | string required

`contactName` null | string required

`payables` object\[\] required

`amountHaler` integer | null required

`contactOid` string required

`description` null | string required

`pairingSymbol` null | string required

`netHaler` integer required

`number` null | string required

`contactName` null | string required

`advancesReceived` any\[\] required

`advancesPaid` any\[\] required

`inventoryHaler` integer required

`inventory` object\[\] required

`accountNumber` null | string required

`amountHaler` integer | null required

`description` null | string required

`assets` any\[\] required

`loans` any\[\] required

`entry` object required

`lines` object\[\] required

`accountNumber` null | string required

`debitHaler` integer required

`creditHaler` integer required

`contactOid` string

`description` null | string required

`pairingSymbol` null | string

`equityHaler` integer required

`debitHaler` integer required

`adjustment` object required

`increaseHaler` integer required

`decreaseHaler` integer required

`netHaler` integer required

`spreadableHaler` integer required

`immediateIncreaseHaler` integer required

`plans` object required

`one_off` object\[\] required

`year` integer required

`increaseHaler` integer required

`decreaseHaler` integer required

`spread` object\[\] required

`year` integer required

`increaseHaler` integer required

`decreaseHaler` integer required

`warnings` object\[\] required

`code` null | string required

`message` null | string required

```bash
curl https://api.damedoklad.cz/v1/ledger/regime-transition/preview \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/regime-transition/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/ledger/regime-transition/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## What is on 431 at a date, which accounts it can go to, and the distributions already posted

GET `/v1/ledger/result-distribution`

What is on 431 at a date, which accounts it can go to, and the distributions already posted

MCP tool: `get-result-distribution`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`legalForm` string required

`balanceHaler` integer required

`kind` string required

`earlierOpenPeriod` null | string required

`targets` object\[\] required

`accountNumber` null | string required

`name` null | string required

`nameEn` null | string required

`distributions` any\[\] required

```bash
curl https://api.damedoklad.cz/v1/ledger/result-distribution \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/result-distribution', {
  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/ledger/result-distribution",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Post the owners decision on the result on 431: to 428, 429, 364, or funds. Every haléř must be allocated

POST `/v1/ledger/result-distribution`

Post the owners decision on the result on 431: to 428, 429, 364, or funds. Every haléř must be allocated. A dividend goes to 364 gross. Withholding tax under § 36 ZDP is a separate entry when it is paid out. Sole traders move the result to 491 at opening instead, and a v.o.s. uses 596.

MCP tool: `distribute-result`

### Request body

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`note` string max 500 chars

`allocations` object\[\] required

`accountNumber` string required

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

`amountHaler` integer required max 9007199254740991

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

`description` string max 240 chars

### Response · 201

`id` string required

`periodId` string required

`kind` string required

`date` string required date

`amountHaler` integer required

`details` object required

`resultHaler` integer

`sharePercent` integer

`kind` string

`note` null | string

`allocations` object\[\]

`amountHaler` integer required

`accountNumber` null | string required

`entryId` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/result-distribution \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30",
  "allocations": [
    {
      "accountNumber": "518",
      "amountHaler": 1210000
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/result-distribution', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "date": "2026-10-30",
    "allocations": [
      {
        "accountNumber": "518",
        "amountHaler": 1210000
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/result-distribution",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30",
        "allocations": [
            {
                "accountNumber": "518",
                "amountHaler": 1210000
            }
        ]
    },
)
data = response.json()
```

## List posted revaluations of foreign-currency documents

GET `/v1/ledger/revaluations`

List posted revaluations of foreign-currency documents

MCP tool: `list-revaluations`

### 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/ledger/revaluations \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/revaluations', {
  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/ledger/revaluations",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Revalue open foreign-currency receivables and payables, and foreign bank and cash balances, at the ČNB rate of a date, posting to 563 and 663

POST `/v1/ledger/revaluations`

Revalue open foreign-currency receivables and payables, and foreign bank and cash balances, at the ČNB rate of a date, posting to 563 and 663. One entry per document or money account. Later payments differ from the restated value. Zákon 563/1991 Sb. § 24 odst. 2 písm. b) and § 24c odst. 1.

MCP tool: `post-revaluation`

### Request body

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`date` string required date

`gainHaler` integer required

`lossHaler` integer required

`documentCount` integer required

`createdAt` string required date-time

`undoneAt` null | string required date-time

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

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

```python
import os
import requests

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

## Undo a revaluation with reversal entries, while its period is open and its documents have no later postings

DELETE `/v1/ledger/revaluations/{id}`

Undo a revaluation with reversal entries, while its period is open and its documents have no later postings

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

MCP tool: `undo-revaluation`

### Path parameters

`id` string required

### Response · 200

`id` string required

`date` string required date

`gainHaler` integer required

`lossHaler` integer required

`documentCount` integer required

`createdAt` string required date-time

`undoneAt` null | string required date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/revaluations/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/ledger/revaluations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## What a year-end revaluation of open foreign-currency receivables and payables, and foreign bank and cash balances, would post to 563 and 663

GET `/v1/ledger/revaluations/preview`

What a year-end revaluation of open foreign-currency receivables and payables, and foreign bank and cash balances, would post to 563 and 663

MCP tool: `preview-revaluation`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`gainHaler` integer required

`lossHaler` integer required

`missingRates` string\[\] required

`notes` object\[\] required

`accountNumber` null | string required

`name` null | string required

`code` null | string required

`message` null | string required

`documents` object\[\] required

`sourceType` null | string required

`sourceId` null | string required

`documentNumber` null | string required

`accountNumber` null | string required

`currency` null | string required

`balanceForeign` integer required

`balanceCzkHaler` integer required

`rate` number required

`rateAmount` integer required

`rateValidDate` string required date

`restatedCzkHaler` integer required

`adjustmentHaler` integer required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/revaluations/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/ledger/revaluations/preview",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Saldo at a date on any account: journal lines grouped by párovací symbol, else by document number, with what stays open

GET `/v1/ledger/saldo`

Saldo at a date on any account: journal lines grouped by párovací symbol, else by document number, with what stays open. With no accountNumber it reads accounts marked trackSaldo, and 311, 314, 315, 321, 324, 325. Periods run together, so an item stays open across a year end.

MCP tool: `get-saldo`

### Query parameters

`accountNumber` string

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

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`toleranceHaler` integer min 0 max 9007199254740991

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

`settled` "true" | "false"

`byContact` "true" | "false"

`detail` "true" | "false"

`format` "csv" | "xlsx"

### Response · 200

`date` string required date

`rows` object\[\] required

`accountNumber` null | string required

`symbol` string required

`contactId` null | string required

`contactName` null | string required

`debitHaler` integer required

`creditHaler` integer required

`balanceHaler` integer required

`firstDate` string required date

`lastDate` string required date

`currency` null | string required

`foreignBalance` integer | null required

`settled` boolean required

`lines` object\[\]

`accountNumber` null | string required

`pairingSymbol` null | string required

`contactName` string | null required

`debitHaler` integer required

`creditHaler` integer required

`currency` string | null required

`foreignAmount` string | null required

`description` string | null required

`entryDate` string required date

`documentNumber` string | null required

`entryNumber` integer required

`entryId` null | string required

`contactId` string | null required

`foreignBalances` object\[\]

`currency` null | string required

`balance` integer required

`documentType` null | string

`documentId` null | string

`totals` object required

`debitHaler` integer required

`creditHaler` integer required

`balanceHaler` integer required

`foreign` object\[\]

`currency` null | string required

`balance` integer required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/saldo', {
  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/ledger/saldo",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The párovací symbol set on a document, or null when it groups by its number

GET `/v1/ledger/saldo/documents/{id}/symbol`

The párovací symbol set on a document, or null when it groups by its number

MCP tool: `get-document-pairing-symbol`

### Path parameters

`id` string required

### Response · 200

`documentId` null | string required

`documentType` null | string required

`symbol` null | string required

```bash
curl https://api.damedoklad.cz/v1/ledger/saldo/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/symbol \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/saldo/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/symbol', {
  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/ledger/saldo/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/symbol",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Put a párovací symbol on a document, or clear it: every line of the document and its payments then groups under it in saldo

PUT `/v1/ledger/saldo/documents/{id}/symbol`

Put a párovací symbol on a document, or clear it: every line of the document and its payments then groups under it in saldo. Nothing posted changes: saldo reads the symbol through the document, so this also works on an issued document in a closed period. A symbol typed on a journal line goes first.

MCP tool: `set-document-pairing-symbol`

### Path parameters

`id` string required

### Request body

`documentType` "invoice" | "received\_invoice" | "credit\_note" | "proforma" | "supplier\_advance" | "other\_receivable" | "other\_payable" | "debit\_note" required

`symbol` string | null required

### Response · 200

`documentId` null | string required

`documentType` null | string required

`symbol` null | string required

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/saldo/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/symbol \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "documentType": "invoice",
  "symbol": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/saldo/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/symbol', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "documentType": "invoice",
    "symbol": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/saldo/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/symbol",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "documentType": "invoice",
        "symbol": "string"
    },
)
data = response.json()
```

## Download the saldo as CSV or XLSX

GET `/v1/ledger/saldo/export`

Download the saldo as CSV or XLSX

MCP tool: `export-saldo`

### Query parameters

`accountNumber` string

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

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`toleranceHaler` integer min 0 max 9007199254740991

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

`settled` "true" | "false"

`byContact` "true" | "false"

`detail` "true" | "false"

`format` "csv" | "xlsx"

### Response · 200

Returns a text/csv file.

```bash
curl https://api.damedoklad.cz/v1/ledger/saldo/export \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/saldo/export', {
  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/ledger/saldo/export",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## Legal form and size category the year-end close and the příloha depend on

GET `/v1/ledger/settings`

Legal form and size category the year-end close and the příloha depend on

MCP tool: `get-ledger-settings`

### Response · 200

`legalForm` string required

`entitySize` string required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/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/ledger/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Set the legal form (company, sole\_trader, vos, ks) and size category (micro, small, medium, large)

PUT `/v1/ledger/settings`

Set the legal form (company, sole\_trader, vos, ks) and size category (micro, small, medium, large)

MCP tool: `update-ledger-settings`

### Request body

`legalForm` "company" | "sole\_trader" | "vos" | "ks"

`entitySize` "micro" | "small" | "medium" | "large"

### Response · 200

`legalForm` string required

`entitySize` string required

```bash
curl -X PUT https://api.damedoklad.cz/v1/ledger/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "legalForm": "company",
  "entitySize": "micro"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/settings', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "legalForm": "company",
    "entitySize": "micro"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/ledger/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "legalForm": "company",
        "entitySize": "micro"
    },
)
data = response.json()
```

## List balance sheet and income statement rows an account can be mapped to through statementRow

GET `/v1/ledger/statement-rows`

List balance sheet and income statement rows an account can be mapped to through statementRow

MCP tool: `get-statement-rows`

### Response · 200

`data` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`statement` string required

`side` string

`functionRows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`hasMore` boolean required

```bash
curl https://api.damedoklad.cz/v1/ledger/statement-rows \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statement-rows', {
  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/ledger/statement-rows",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Rozvaha in the statutory layout of vyhláška 500/2002 Sb. with brutto, korekce, netto, and the prior period

GET `/v1/ledger/statements/balance-sheet`

Rozvaha in the statutory layout of vyhláška 500/2002 Sb. with brutto, korekce, netto, and the prior period. structure: full (plný rozsah), short (zkrácený), micro (písmena). Every row has exact haléře and a \`thousands\` block in whole thousands of CZK, footed as the law requires. Filter by dimension for an internal view.

MCP tool: `get-balance-sheet`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`structure` "full" | "short" | "micro"

### Response · 200

`entity` object required

`name` null | string required

`ico` null | string required

`dic` null | string required

`regime` string required

`periodId` string required

`periodName` string required

`periodFrom` null | string required date

`periodTo` null | string required date

`asOf` string required date

`priorPeriodName` null | string required

`priorAsOf` null | string required date

`structure` string required

`currency` null | string required

`legalBasis` null | string required

`assets` object required

`total` object required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`grossHaler` integer required

`correctionHaler` integer required

`netHaler` integer required

`priorNetHaler` integer required

`thousands` object required

`gross` integer required

`correction` integer required

`net` integer required

`priorNet` integer required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`grossHaler` integer required

`correctionHaler` integer required

`netHaler` integer required

`priorNetHaler` integer required

`thousands` object required

`gross` integer required

`correction` integer required

`net` integer required

`priorNet` integer required

`liabilities` object required

`total` object required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

`balanced` boolean required

`differenceHaler` integer required

`unmappedAccounts` any\[\] required

```bash
curl https://api.damedoklad.cz/v1/ledger/statements/balance-sheet \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/balance-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/ledger/statements/balance-sheet",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Přehled o peněžních tocích by the indirect method (§§ 40–43 of vyhláška 500/2002 Sb., ČÚS 023), reconciled to the real closing cash

GET `/v1/ledger/statements/cash-flow`

Přehled o peněžních tocích by the indirect method (§§ 40–43 of vyhláška 500/2002 Sb., ČÚS 023), reconciled to the real closing cash

MCP tool: `get-cash-flow-statement`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`entity` object required

`name` null | string required

`ico` null | string required

`dic` null | string required

`regime` string required

`periodId` string required

`periodName` string required

`periodFrom` null | string required date

`periodTo` null | string required date

`asOf` string required date

`priorPeriodName` null | string required

`priorAsOf` null | string required date

`structure` string required

`currency` null | string required

`legalBasis` null | string required

`method` null | string required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`kind` string required

`valueHaler` integer | null required

`thousands` object required

`value` integer required

`openingCashHaler` integer required

`closingCashHaler` integer required

`computedClosingHaler` integer

`differenceHaler` integer required

`balanced` boolean required

`voluntary` boolean

```bash
curl https://api.damedoklad.cz/v1/ledger/statements/cash-flow \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/cash-flow', {
  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/ledger/statements/cash-flow",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Přehled o změnách vlastního kapitálu (§ 44 of vyhláška 500/2002 Sb.): opening, increases, decreases, and closing of each equity item

GET `/v1/ledger/statements/equity-changes`

Přehled o změnách vlastního kapitálu (§ 44 of vyhláška 500/2002 Sb.): opening, increases, decreases, and closing of each equity item

MCP tool: `get-equity-changes-statement`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`entity` object required

`name` null | string required

`ico` null | string required

`dic` null | string required

`regime` string required

`periodId` string required

`periodName` string required

`periodFrom` null | string required date

`periodTo` null | string required date

`asOf` string required date

`priorPeriodName` null | string required

`priorAsOf` null | string required date

`structure` string required

`currency` null | string required

`legalBasis` null | string required

`resultHaler` integer required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`openingHaler` integer required

`increaseHaler` integer required

`decreaseHaler` integer required

`closingHaler` integer required

`thousands` object

`opening` integer required

`increase` integer required

`decrease` integer required

`closing` integer required

`level` integer

`kind` string

`leaf` boolean

`total` object required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`openingHaler` integer required

`increaseHaler` integer required

`decreaseHaler` integer required

`closingHaler` integer required

`level` integer

`kind` string

`balanced` boolean

`mismatched` any\[\]

`issues` any\[\]

`voluntary` boolean

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/equity-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/ledger/statements/equity-changes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Výkaz zisku a ztráty (druhové členění) in the statutory layout of vyhláška 500/2002 Sb. with the prior period

GET `/v1/ledger/statements/income-statement`

Výkaz zisku a ztráty (druhové členění) in the statutory layout of vyhláška 500/2002 Sb. with the prior period. structure: full or short (římské číslice, písmena, výpočtové řádky). Same amount blocks as the balance sheet.

MCP tool: `get-income-statement`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

`structure` "full" | "short" | "micro"

### Response · 200

`entity` object required

`name` null | string required

`ico` null | string required

`dic` null | string required

`regime` string required

`periodId` string required

`periodName` string required

`periodFrom` null | string required date

`periodTo` null | string required date

`asOf` string required date

`priorPeriodName` null | string required

`priorAsOf` null | string required date

`structure` string required

`currency` null | string required

`legalBasis` null | string required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`kind` string required

`level` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

`mainHaler` integer

`economicHaler` integer

`priorMainHaler` integer

`priorEconomicHaler` integer

`resultHaler` integer required

`priorResultHaler` integer

`netTurnoverHaler` integer

`unmappedAccounts` any\[\] required

`main` object

`beforeTaxHaler` integer required

`afterTaxHaler` integer required

`economic` object

`beforeTaxHaler` integer required

`afterTaxHaler` integer required

`costs` object\[\]

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`kind` string required

`mainHaler` integer required

`economicHaler` integer required

`priorMainHaler` integer required

`priorEconomicHaler` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

`revenue` object\[\]

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`kind` string required

`mainHaler` integer required

`economicHaler` integer required

`priorMainHaler` integer required

`priorEconomicHaler` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

`result` array | null

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`level` integer required

`kind` string required

`mainHaler` integer required

`economicHaler` integer required

`priorMainHaler` integer required

`priorEconomicHaler` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/statements/income-statement \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/income-statement', {
  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/ledger/statements/income-statement",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Výkaz zisku a ztráty in účelové členění (příloha č. 3 of vyhláška 500/2002 Sb.) with the prior period. Same result as the druhové výkaz

GET `/v1/ledger/statements/income-statement-functional`

Výkaz zisku a ztráty in účelové členění (příloha č. 3 of vyhláška 500/2002 Sb.) with the prior period. Same result as the druhové výkaz. The decree does not say which cost is sales, distribution, or administration. defaultedAccounts counts cost accounts still on the default split; point an account elsewhere with functionRow.

MCP tool: `get-functional-income-statement`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`entity` object required

`name` null | string required

`ico` null | string required

`dic` null | string required

`regime` string required

`periodId` string required

`periodName` string required

`periodFrom` null | string required date

`periodTo` null | string required date

`asOf` string required date

`priorPeriodName` any required

Null in every recorded response.

`priorAsOf` any required

Null in every recorded response.

`structure` string required

`currency` null | string required

`legalBasis` null | string required

`rows` object\[\] required

`key` string required

`code` null | string required

`label` null | string required

`labelEn` string required

`kind` string required

`level` integer required

`valueHaler` integer | null required

`priorHaler` integer required

`thousands` object required

`value` integer required

`prior` integer required

`resultHaler` integer required

`priorResultHaler` integer required

`netTurnoverHaler` integer required

`defaultedAccounts` integer required

`unmappedAccounts` any\[\] required

```bash
curl https://api.damedoklad.cz/v1/ledger/statements/income-statement-functional \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/income-statement-functional', {
  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/ledger/statements/income-statement-functional",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## The saved příloha k účetní závěrce for a period, or a fresh draft generated from the books if none is saved yet

GET `/v1/ledger/statements/notes`

The saved příloha k účetní závěrce for a period, or a fresh draft generated from the books if none is saved yet

MCP tool: `get-statement-notes`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

### Response · 200

`id` null | string required

`periodId` string required

`periodName` string required

`category` string required

`sections` object\[\] required

`key` string required

`legal` string

`title` null | string required

`titleEn` string

`source` string

`text` string required

`edited` boolean

`generatedAt` null | string required date-time

`updatedAt` null | string required date-time

`openSections` integer required

```bash
curl https://api.damedoklad.cz/v1/ledger/statements/notes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/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/ledger/statements/notes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Generate and save the příloha k účetní závěrce from the books. An edited příloha stays unless regenerate is set

POST `/v1/ledger/statements/notes`

Generate and save the příloha k účetní závěrce from the books. An edited příloha stays unless regenerate is set

MCP tool: `generate-statement-notes`

### Request body

`periodId` string

ID of the period. Find it with list-periods.

`category` "micro" | "small" | "medium" | "large"

`regenerate` boolean

### Response · 201

`id` null | string required

`periodId` string required

`periodName` string required

`category` string required

`sections` object\[\] required

`key` string required

`legal` string

`title` null | string required

`titleEn` string

`source` string

`text` string required

`edited` boolean

`generatedAt` null | string required date-time

`updatedAt` null | string required date-time

`openSections` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/statements/notes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "category": "micro",
  "regenerate": false
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/notes', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "category": "micro",
    "regenerate": false
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/statements/notes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "periodId": "per_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "category": "micro",
        "regenerate": False
    },
)
data = response.json()
```

## Save edited text of příloha sections. Sections not named stay as they are

PATCH `/v1/ledger/statements/notes`

Save edited text of příloha sections. Sections not named stay as they are

MCP tool: `update-statement-notes`

### Request body

`periodId` string

ID of the period. Find it with list-periods.

`sections` object\[\] required

`key` string required max 40 chars

`text` string required max 20000 chars

### Response · 200

`id` null | string required

`periodId` string required

`periodName` string required

`category` string required

`sections` object\[\] required

`key` string required

`legal` string

`title` null | string required

`titleEn` string

`source` string

`text` string required

`edited` boolean

`generatedAt` null | string required date-time

`updatedAt` null | string required date-time

`openSections` integer required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/statements/notes \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "sections": [
    {
      "key": "string",
      "text": "string"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/notes', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "sections": [
      {
        "key": "string",
        "text": "string"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/statements/notes",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "sections": [
            {
                "key": "string",
                "text": "string"
            }
        ]
    },
)
data = response.json()
```

## Download the saved příloha k účetní závěrce as a PDF

GET `/v1/ledger/statements/notes/pdf`

Download the saved příloha k účetní závěrce as a PDF. Sign it and file it yourself. Refused while sections still hold bracketed prompts.

MCP tool: `download-statement-notes`

### Query parameters

`periodId` string

ID of the period. Find it with list-periods.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/ledger/statements/notes/pdf \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/statements/notes/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/ledger/statements/notes/pdf",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
content = response.content
```

## List předkontace: which accounts each document type posts to

GET `/v1/ledger/templates`

List předkontace: which accounts each document type posts to

MCP tool: `list-accounting-templates`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`documentType` "issued\_invoice" | "received\_invoice" | "credit\_note" | "proforma"

### Response · 200

`data` object\[\] required

`object` "accounting\_template" required

`id` string required

`code` string required

`name` string required

`documentType` string required

`debitAccount` string required

`creditAccount` string required

`isDefault` boolean required

`isSystem` boolean 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/ledger/templates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/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/ledger/templates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Create a předkontace. Set isDefault to use it for documents of that type that name none

POST `/v1/ledger/templates`

Create a předkontace. Set isDefault to use it for documents of that type that name none

MCP tool: `create-accounting-template`

### Request body

`code` string required max 24 chars

`name` string required max 200 chars

`documentType` "issued\_invoice" | "received\_invoice" | "credit\_note" | "proforma" required

`debitAccount` string required

`creditAccount` string required

`isDefault` boolean

### Response · 201

`id` string required

`code` string required

`name` string required

`documentType` string required

`debitAccount` string required

`creditAccount` string required

`isDefault` boolean required

`isSystem` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/ledger/templates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "code": "string",
  "name": "Pekárna U Lípy s.r.o.",
  "documentType": "issued_invoice",
  "debitAccount": "518",
  "creditAccount": "518"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/templates', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "code": "string",
    "name": "Pekárna U Lípy s.r.o.",
    "documentType": "issued_invoice",
    "debitAccount": "518",
    "creditAccount": "518"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/ledger/templates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "code": "string",
        "name": "Pekárna U Lípy s.r.o.",
        "documentType": "issued_invoice",
        "debitAccount": "518",
        "creditAccount": "518"
    },
)
data = response.json()
```

## Update a předkontace. It applies to documents posted from now on

PATCH `/v1/ledger/templates/{id}`

Update a předkontace. It applies to documents posted from now on

MCP tool: `update-accounting-template`

### Path parameters

`id` string required

### Request body

`code` string max 24 chars

`name` string max 200 chars

`debitAccount` string

`creditAccount` string

`isDefault` boolean

### Response · 200

`id` string required

`code` string required

`name` string required

`documentType` string required

`debitAccount` string required

`creditAccount` string required

`isDefault` boolean required

`isSystem` boolean required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/ledger/templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "code": "string",
  "name": "Pekárna U Lípy s.r.o.",
  "debitAccount": "518"
}'
```

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

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/ledger/templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "code": "string",
        "name": "Pekárna U Lípy s.r.o.",
        "debitAccount": "518"
    },
)
data = response.json()
```

## Delete a předkontace no document uses

DELETE `/v1/ledger/templates/{id}`

Delete a předkontace no document uses

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

MCP tool: `delete-accounting-template`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/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/ledger/templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Obratová předvaha: opening balance, debit and credit turnover, closing balance per account

GET `/v1/ledger/trial-balance`

Obratová předvaha: opening balance, debit and credit turnover, closing balance per account. Filter by period, dates, and dimension. level=synthetic folds analytic accounts into their parent.

MCP tool: `get-trial-balance`

### Query parameters

`centerId` string

ID of the center.

`activityId` string

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

`projectId` string

ID of the project.

`periodId` string

ID of the period. Find it with list-periods.

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`level` "analytic" | "synthetic"

### Response · 200

`periodId` null | string required

`periodName` string required

`from` string required date

`to` string required date

`provisionalResultHaler` integer required

`rows` object\[\] required

`accountNumber` null | string required

`openingHaler` integer required

`debitHaler` integer required

`creditHaler` integer required

`name` null | string required

`openingDebitHaler` integer required

`openingCreditHaler` integer required

`closingHaler` integer required

`closingDebitHaler` integer required

`closingCreditHaler` integer required

`nameEn` null | string required

`totals` object required

`openingDebitHaler` integer required

`openingCreditHaler` integer required

`debitHaler` integer required

`creditHaler` integer required

`closingDebitHaler` integer required

`closingCreditHaler` integer required

`balanced` boolean required

```bash
curl https://api.damedoklad.cz/v1/ledger/trial-balance \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/trial-balance', {
  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/ledger/trial-balance",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```

## Undo a tax, provision, partner share, or result distribution posting with a reversal entry, while its period is open

DELETE `/v1/ledger/year-end/steps/{id}`

Undo a tax, provision, partner share, or result distribution posting with a reversal entry, while its period is open

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

MCP tool: `undo-year-end-step`

### Path parameters

`id` string required

### Response · 200

`id` string required

`periodId` string required

`kind` string required

`date` string required date

`amountHaler` integer required

`details` object required

`resultHaler` integer

`sharePercent` integer

`kind` string

`note` null | string

`allocations` object\[\]

`amountHaler` integer required

`accountNumber` null | string required

`entryId` null | string required

`createdAt` string required date-time

`undoneAt` null | string required date-time

```bash
curl -X DELETE https://api.damedoklad.cz/v1/ledger/year-end/steps/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/ledger/year-end/steps/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/ledger/year-end/steps/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
)
data = response.json()
```
