# Bank and cash · DameDoklad API

> Operations in the Bank and cash group.

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

# Bank and cash

Operations in the Bank and cash group.

## List own bank accounts with current balance and the number of unmatched movements

GET `/v1/bank-accounts`

List own bank accounts with current balance and the number of unmatched movements

MCP tool: `list-bank-accounts`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

### Response · 200

`data` object\[\] required

`object` "bank\_account" required

`id` string required

`contactId` null | string

`label` null | string

`accountNumber` null | string required

`bankCode` null | string required

`iban` null | string required

`currency` string required

`isDefault` boolean required

`publishedFromRegistry` boolean

`bic` null | string

`bankName` null | string

`bankStreet` string | null

`bankCity` string | null

`name` string

`swift` null | string

`ledgerAccount` string

`isActive` boolean

`openingBalanceHaler` integer

`openingDate` null | string date

`openingExchangeRate` string | null

`openingState` string

`bankBalanceHaler` integer | null

`bankBalanceOn` null | string date

`fio` object

`configured` boolean required

`enabled` boolean required

`lastSyncedAt` null | string required date-time

`lastSyncedOn` null | string required date

`lastError` null | string required

`createdAt` string date-time

`balanceHaler` integer

`unmatchedCount` integer

`balanceDiffHaler` integer | null

`sepaCreditorId` null | string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a bank account. The analytic 221xxx account and the IBAN are filled in when omitted. A stated opening balance posts MD 221xxx / D 701, or the opening bank of the peněžní deník, unless opening entries already hold the account

POST `/v1/bank-accounts`

Create a bank account. The analytic 221xxx account and the IBAN are filled in when omitted. A stated opening balance posts MD 221xxx / D 701, or the opening bank of the peněžní deník, unless opening entries already hold the account

MCP tool: `create-bank-account`

### Request body

`name` string required max 200 chars

`accountNumber` string required

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

`bankCode` string required

`iban` string max 42 chars

IBAN without spaces.

`swift` string

`sepaCreditorId` string min 5 chars max 35 chars

Identifier of the creditor in SEPA direct debit (CID), issued through the bank

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`ledgerAccount` string

`isDefault` boolean

`openingBalanceHaler` integer min -9007199254740991 max 9007199254740991

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

`openingDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`openingExchangeRate` number max 100000

### Response · 201

`id` string required

`contactId` null | string

`label` null | string

`accountNumber` null | string required

`bankCode` null | string required

`iban` null | string required

`currency` string required

`isDefault` boolean required

`publishedFromRegistry` boolean

`bic` null | string

`bankName` null | string

`bankStreet` string | null

`bankCity` string | null

`name` string

`swift` null | string

`ledgerAccount` string

`isActive` boolean

`openingBalanceHaler` integer

`openingDate` null | string date

`openingExchangeRate` string | null

`openingState` string

`bankBalanceHaler` integer | null

`bankBalanceOn` null | string date

`fio` object

`configured` boolean required

`enabled` boolean required

`lastSyncedAt` null | string required date-time

`lastSyncedOn` null | string required date

`lastError` null | string required

`createdAt` string date-time

`balanceHaler` integer

`unmatchedCount` integer

`balanceDiffHaler` integer | null

`sepaCreditorId` null | string

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/bank-accounts', {
  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.",
    "accountNumber": "string",
    "bankCode": "0100"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/bank-accounts",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "accountNumber": "string",
        "bankCode": "0100"
    },
)
data = response.json()
```

## Get one bank account

GET `/v1/bank-accounts/{id}`

Get one bank account

MCP tool: `get-bank-account`

### Path parameters

`id` string required

### Response · 200

`id` string required

`contactId` null | string

`label` null | string

`accountNumber` null | string required

`bankCode` null | string required

`iban` null | string required

`currency` string required

`isDefault` boolean required

`publishedFromRegistry` boolean

`bic` null | string

`bankName` null | string

`bankStreet` string | null

`bankCity` string | null

`name` string

`swift` null | string

`ledgerAccount` string

`isActive` boolean

`openingBalanceHaler` integer

`openingDate` null | string date

`openingExchangeRate` string | null

`openingState` string

`bankBalanceHaler` integer | null

`bankBalanceOn` null | string date

`fio` object

`configured` boolean required

`enabled` boolean required

`lastSyncedAt` null | string required date-time

`lastSyncedOn` null | string required date

`lastError` null | string required

`createdAt` string date-time

`balanceHaler` integer

`unmatchedCount` integer

`balanceDiffHaler` integer | null

`sepaCreditorId` null | string

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

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

## Update a bank account. Currency and the analytic account are locked once movements are paired. A changed opening balance reverses what it posted and posts anew

PATCH `/v1/bank-accounts/{id}`

Update a bank account. Currency and the analytic account are locked once movements are paired. A changed opening balance reverses what it posted and posts anew

MCP tool: `update-bank-account`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`accountNumber` string

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

`bankCode` string

`iban` string | null

IBAN without spaces.

`swift` string | null

`sepaCreditorId` string min 5 chars max 35 chars

Identifier of the creditor in SEPA direct debit (CID), issued through the bank

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`ledgerAccount` string

`isDefault` boolean

`openingBalanceHaler` integer min -9007199254740991 max 9007199254740991

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

`openingDate` string | null

Date as YYYY-MM-DD.

`openingExchangeRate` number max 100000

`isActive` boolean

### Response · 200

`id` string required

`contactId` null | string

`label` null | string

`accountNumber` null | string required

`bankCode` null | string required

`iban` null | string required

`currency` string required

`isDefault` boolean required

`publishedFromRegistry` boolean

`bic` null | string

`bankName` null | string

`bankStreet` string | null

`bankCity` string | null

`name` string

`swift` null | string

`ledgerAccount` string

`isActive` boolean

`openingBalanceHaler` integer

`openingDate` null | string date

`openingExchangeRate` string | null

`openingState` string

`bankBalanceHaler` integer | null

`bankBalanceOn` null | string date

`fio` object

`configured` boolean required

`enabled` boolean required

`lastSyncedAt` null | string required date-time

`lastSyncedOn` null | string required date

`lastError` null | string required

`createdAt` string date-time

`balanceHaler` integer

`unmatchedCount` integer

`balanceDiffHaler` integer | null

`sepaCreditorId` null | string

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/bank-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.",
    "accountNumber": "string",
    "bankCode": "0100"
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Delete a bank account that has no movements, statements, or payment orders. Its posted opening balance is reversed

DELETE `/v1/bank-accounts/{id}`

Delete a bank account that has no movements, statements, or payment orders. Its posted opening balance is reversed

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

MCP tool: `delete-bank-account`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## Save the Fio API token of an account and turn automatic sync on or off. The token is stored encrypted and never returned

PUT `/v1/bank-accounts/{id}/fio`

Save the Fio API token of an account and turn automatic sync on or off. The token is stored encrypted and never returned

MCP tool: `update-bank-account-fio`

### Path parameters

`id` string required

### Request body

`token` string

`enabled` boolean

### Response · 200

`id` string required

`contactId` null | string

`label` null | string

`accountNumber` null | string required

`bankCode` null | string required

`iban` null | string required

`currency` string required

`isDefault` boolean required

`publishedFromRegistry` boolean

`bic` null | string

`bankName` null | string

`bankStreet` string | null

`bankCity` string | null

`name` string

`swift` null | string

`ledgerAccount` string

`isActive` boolean

`openingBalanceHaler` integer

`openingDate` null | string date

`openingExchangeRate` string | null

`openingState` string

`bankBalanceHaler` integer | null

`bankBalanceOn` null | string date

`fio` object

`configured` boolean required

`enabled` boolean required

`lastSyncedAt` null | string required date-time

`lastSyncedOn` null | string required date

`lastError` null | string required

`createdAt` string date-time

`balanceHaler` integer

`unmatchedCount` integer

`balanceDiffHaler` integer | null

`sepaCreditorId` null | string

```bash
curl -X PUT https://api.damedoklad.cz/v1/bank-accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/fio \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "token": "string",
  "enabled": false
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/bank-accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/fio', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "token": "string",
    "enabled": false
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/bank-accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/fio",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "token": "string",
        "enabled": False
    },
)
data = response.json()
```

## Download new movements of a Fio account now. Fio allows one call per token in 30 seconds

POST `/v1/bank-accounts/{id}/fio/sync`

Download new movements of a Fio account now. Fio allows one call per token in 30 seconds

MCP tool: `sync-bank-account-fio`

### Path parameters

`id` string required

### Response · 200

`bankAccountId` string required

`from` string required date

`to` string required date

`importedCount` integer required

`duplicateCount` integer required

`autoMatchedCount` integer required

`closingBalanceHaler` integer | null required

`warnings` any\[\] required

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-accounts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/fio/sync \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## The predefined choices for movements without a document: bank fee, interest, taxes, own transfer

GET `/v1/bank-categories`

The predefined choices for movements without a document: bank fee, interest, taxes, own transfer

MCP tool: `list-bank-categories`

### 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` "bank\_category" required

`id` string required

`direction` string required

`accountNumber` null | string required

`classification` null | string required

`nameCs` string required

`nameEn` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Unpaid issued invoices, debit notes, and other receivables ready for a příkaz k inkasu. \`hasBankAccount\` tells whether the customer has a Czech account, \`mandates\` how many active SEPA mandates

GET `/v1/bank-collectable-documents`

Unpaid issued invoices, debit notes, and other receivables ready for a příkaz k inkasu. \`hasBankAccount\` tells whether the customer has a Czech account, \`mandates\` how many active SEPA mandates

MCP tool: `list-collectable-documents`

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

`dueTo` string YYYY-MM-DD

Date as YYYY-MM-DD.

`dueFrom` string YYYY-MM-DD

Date as YYYY-MM-DD.

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

### Response · 200

`data` object\[\] required

`object` "collectable\_document" required

`kind` string required

`id` string required

`number` null | string required

`contactId` null | string required

`contactName` null | string required

`variableSymbol` null | string required

`dueDate` null | string required date

`currency` null | string required

`totalHaler` integer | null required

`remainingHaler` integer | null required

`hasBankAccount` boolean required

`mandates` integer required

`inPayment` boolean required

`paymentOrderId` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

```bash
curl https://api.damedoklad.cz/v1/bank-collectable-documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## List bank movements across accounts with their pairing and suggested matches. status=open means anything not fully paired

GET `/v1/bank-movements`

List bank movements across accounts with their pairing and suggested matches. status=open means anything not fully paired

MCP tool: `list-bank-movements`

### 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` "unmatched" | "partial" | "matched" | "non\_document" | "open"

`bankAccountId` string

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

`statementId` string

ID of the statement.

### Response · 200

`data` object\[\] required

`object` "bank\_movement" required

`id` string required

`bankAccountId` string required

`statementId` null | string required

`source` string required

`externalId` null | string required

`bookedOn` string required date

`valueDate` string | null required

`amountHaler` integer required

`currency` string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`counterpartyName` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`bankType` null | string required

`isReversal` boolean required

`status` string required

`allocatedHaler` integer required

`remainingHaler` integer | null required

`createdAt` string required date-time

`allocations` object\[\] required

`object` "bank\_allocation" required

`id` string required

`kind` string required

`documentId` null | string required

`documentNumber` null | string required

`paymentId` null | string required

`amountHaler` integer required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`counterBankAccountId` null | string required

`exchangeRate` null | number required

`orderItemId` null | string required

`confidence` null | number required

`matchedBy` string required

`note` null | string required

`createdAt` string required date-time

`suggestions` object\[\] required

`type` string required

`kind` string

`documentId` null | string

`number` null | string

`contactName` null | string

`orderItemId` null | string

`amountHaler` integer required

`remainingHaler` integer | null

`confidence` null | number required

`level` string required

`reason` null | string required

`source` string

`accountNumber` null | string

`classification` string | null

`category` null | string

`counterBankAccountId` null | string

`ruleId` string

`ruleName` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Add one movement by hand, for a bank that gives no export

POST `/v1/bank-movements`

Add one movement by hand, for a bank that gives no export

MCP tool: `create-bank-movement`

### Request body

`bankAccountId` string required

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

`bookedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`amountHaler` integer required min -9007199254740991 max 9007199254740991

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

`counterpartyAccount` string max 42 chars

`counterpartyBankCode` string

`counterpartyName` string max 200 chars

`variableSymbol` string

`constantSymbol` string

`specificSymbol` string

`message` string max 400 chars

### Response · 201

`id` string required

`bankAccountId` string required

`statementId` null | string required

`source` string required

`externalId` null | string required

`bookedOn` string required date

`valueDate` string | null required

`amountHaler` integer required

`currency` string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`counterpartyName` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`bankType` null | string required

`isReversal` boolean required

`status` string required

`allocatedHaler` integer required

`remainingHaler` integer | null required

`createdAt` string required date-time

`allocations` object\[\] required

`object` "bank\_allocation" required

`id` string required

`kind` string required

`documentId` null | string required

`documentNumber` null | string required

`paymentId` null | string required

`amountHaler` integer required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`counterBankAccountId` null | string required

`exchangeRate` null | number required

`orderItemId` null | string required

`confidence` null | number required

`matchedBy` string required

`note` null | string required

`createdAt` string required date-time

`suggestions` object\[\] required

`type` string required

`kind` string

`documentId` null | string

`number` null | string

`contactName` null | string

`orderItemId` null | string

`amountHaler` integer required

`remainingHaler` integer | null

`confidence` null | number required

`level` string required

`reason` null | string required

`source` string

`accountNumber` null | string

`classification` string | null

`category` null | string

`counterBankAccountId` null | string

`ruleId` string

`ruleName` string

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-movements \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "bookedOn": "2026-10-30",
  "amountHaler": 1210000
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/bank-movements",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "bookedOn": "2026-10-30",
        "amountHaler": 1210000
    },
)
data = response.json()
```

## Get one bank movement with its pairing and suggestions

GET `/v1/bank-movements/{id}`

Get one bank movement with its pairing and suggestions

MCP tool: `get-bank-movement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`bankAccountId` string required

`statementId` null | string required

`source` string required

`externalId` null | string required

`bookedOn` string required date

`valueDate` string | null required

`amountHaler` integer required

`currency` string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`counterpartyName` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`bankType` null | string required

`isReversal` boolean required

`status` string required

`allocatedHaler` integer required

`remainingHaler` integer | null required

`createdAt` string required date-time

`allocations` object\[\] required

`object` "bank\_allocation" required

`id` string required

`kind` string required

`documentId` null | string required

`documentNumber` null | string required

`paymentId` null | string required

`amountHaler` integer required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`counterBankAccountId` null | string required

`exchangeRate` null | number required

`orderItemId` null | string required

`confidence` null | number required

`matchedBy` string required

`note` null | string required

`createdAt` string required date-time

`suggestions` object\[\] required

`type` string required

`kind` string

`documentId` null | string

`number` null | string

`contactName` null | string

`orderItemId` null | string

`amountHaler` integer required

`remainingHaler` integer | null

`confidence` null | number required

`level` string required

`reason` null | string required

`source` string

`accountNumber` null | string

`classification` string | null

`category` null | string

`counterBankAccountId` null | string

`ruleId` string

`ruleName` string

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

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

## Book a movement without a document: bank fee, interest, tax payment, transfer between own accounts, or a chosen account

POST `/v1/bank-movements/{id}/classify`

Book a movement without a document: bank fee, interest, tax payment, transfer between own accounts, or a chosen account

MCP tool: `classify-bank-movement`

### Path parameters

`id` string required

### Request body

`category` "bank\_fee" | "interest\_received" | "interest\_paid" | "interest\_tax" | "tax\_vat" | "tax\_income" | "tax\_payroll" | "tax\_road" | "insurance\_social" | "insurance\_health" | "insurance\_social\_own" | "insurance\_health\_own" | "card\_settlement" | "own\_transfer" | "reversal" | "other" required

`amountHaler` integer max 9007199254740991

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

`accountNumber` string

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

`classification` "income\_taxable" | "income\_nontax" | "expense\_deductible" | "expense\_nontax" | "transfer"

`counterBankAccountId` string

ID of the counter bank account.

`exchangeRate` number max 100000

`feeHaler` integer max 9007199254740991

For category card\_settlement: what the provider kept. The clearing account clears by the payout and this, and this goes on the fee account

`note` string max 2000 chars

`pairingSymbol` string max 32 chars

### Response · 200

`id` string required

`bankAccountId` string required

`statementId` null | string required

`source` string required

`externalId` null | string required

`bookedOn` string required date

`valueDate` string | null required

`amountHaler` integer required

`currency` string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`counterpartyName` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`bankType` null | string required

`isReversal` boolean required

`status` string required

`allocatedHaler` integer required

`remainingHaler` integer | null required

`createdAt` string required date-time

`allocations` object\[\] required

`object` "bank\_allocation" required

`id` string required

`kind` string required

`documentId` null | string required

`documentNumber` null | string required

`paymentId` null | string required

`amountHaler` integer required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`counterBankAccountId` null | string required

`exchangeRate` null | number required

`orderItemId` null | string required

`confidence` null | number required

`matchedBy` string required

`note` null | string required

`createdAt` string required date-time

`suggestions` object\[\] required

`type` string required

`kind` string

`documentId` null | string

`number` null | string

`contactName` null | string

`orderItemId` null | string

`amountHaler` integer required

`remainingHaler` integer | null

`confidence` null | number required

`level` string required

`reason` null | string required

`source` string

`accountNumber` null | string

`classification` string | null

`category` null | string

`counterBankAccountId` null | string

`ruleId` string

`ruleName` string

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/classify \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "category": "bank_fee"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/classify",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "category": "bank_fee"
    },
)
data = response.json()
```

## Pair a movement with one document, or split it across several. Also confirms a suggestion. Posts to the books, except kind hand\_payment: the line takes over a payment typed by hand, which already did. When that line is for less, on another account or on another date (code hand\_payment\_other\_date, the date of the statement coming first), resolution keep lets the payment stand, with the rest waiting and the money moved across analytics; resolution correct redoes the payment from the line

POST `/v1/bank-movements/{id}/match`

Pair a movement with one document, or split it across several. Also confirms a suggestion. Posts to the books, except kind hand\_payment: the line takes over a payment typed by hand, which already did. When that line is for less, on another account or on another date (code hand\_payment\_other\_date, the date of the statement coming first), resolution keep lets the payment stand, with the rest waiting and the money moved across analytics; resolution correct redoes the payment from the line

MCP tool: `match-bank-movement`

### Path parameters

`id` string required

### Request body

`allocations` object\[\] required

`kind` "invoice" | "received\_invoice" | "proforma" | "proforma\_refund" | "supplier\_advance" | "supplier\_advance\_refund" | "credit\_note" | "debit\_note" | "other\_receivable" | "other\_payable" | "payroll\_payment" | "travel\_order" | "travel\_advance" | "hand\_payment" required

`documentId` string required

ID of the document.

`amountHaler` integer max 9007199254740991

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

`documentAmountHaler` integer max 9007199254740991

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

`resolution` "keep" | "correct"

`note` string max 2000 chars

### Response · 200

`id` string required

`bankAccountId` string required

`statementId` null | string required

`source` string required

`externalId` null | string required

`bookedOn` string required date

`valueDate` string | null required

`amountHaler` integer required

`currency` string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`counterpartyName` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`bankType` null | string required

`isReversal` boolean required

`status` string required

`allocatedHaler` integer required

`remainingHaler` integer | null required

`createdAt` string required date-time

`allocations` object\[\] required

`object` "bank\_allocation" required

`id` string required

`kind` string required

`documentId` null | string required

`documentNumber` null | string required

`paymentId` null | string required

`amountHaler` integer required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`counterBankAccountId` null | string required

`exchangeRate` null | number required

`orderItemId` null | string required

`confidence` null | number required

`matchedBy` string required

`note` null | string required

`createdAt` string required date-time

`suggestions` object\[\] required

`type` string required

`kind` string

`documentId` null | string

`number` null | string

`contactName` null | string

`orderItemId` null | string

`amountHaler` integer required

`remainingHaler` integer | null

`confidence` null | number required

`level` string required

`reason` null | string required

`source` string

`accountNumber` null | string

`classification` string | null

`category` null | string

`counterBankAccountId` null | string

`ruleId` string

`ruleName` string

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/match \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "allocations": [
    {
      "kind": "invoice",
      "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/match', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "allocations": [
      {
        "kind": "invoice",
        "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/match",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "allocations": [
            {
                "kind": "invoice",
                "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
            }
        ]
    },
)
data = response.json()
```

## The rest of a payment typed by hand will not arrive: the payment shrinks to what statement lines confirmed, and the rest is open on the document again

POST `/v1/bank-movements/{id}/release-rest`

The rest of a payment typed by hand will not arrive: the payment shrinks to what statement lines confirmed, and the rest is open on the document again

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

MCP tool: `release-hand-payment-rest`

### Path parameters

`id` string required

### Response · 200

`released` integer required

`confirmedCount` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/release-rest \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Undo the pairing of a movement, or one part of a split. Reverses the postings

POST `/v1/bank-movements/{id}/unmatch`

Undo the pairing of a movement, or one part of a split. Reverses the postings

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

MCP tool: `unmatch-bank-movement`

### Path parameters

`id` string required

### Request body

`allocationId` string

ID of the allocation.

### Response · 200

`id` string required

`bankAccountId` string required

`statementId` null | string required

`source` string required

`externalId` null | string required

`bookedOn` string required date

`valueDate` string | null required

`amountHaler` integer required

`currency` string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`counterpartyName` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`bankType` null | string required

`isReversal` boolean required

`status` string required

`allocatedHaler` integer required

`remainingHaler` integer | null required

`createdAt` string required date-time

`allocations` object\[\] required

`object` "bank\_allocation" required

`id` string required

`kind` string required

`documentId` null | string required

`documentNumber` null | string required

`paymentId` null | string required

`amountHaler` integer required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`counterBankAccountId` null | string required

`exchangeRate` null | number required

`orderItemId` null | string required

`confidence` null | number required

`matchedBy` string required

`note` null | string required

`createdAt` string required date-time

`suggestions` object\[\] required

`type` string required

`kind` string

`documentId` null | string

`number` null | string

`contactName` null | string

`orderItemId` null | string

`amountHaler` integer required

`remainingHaler` integer | null

`confidence` null | number required

`level` string required

`reason` null | string required

`source` string

`accountNumber` null | string

`classification` string | null

`category` null | string

`counterBankAccountId` null | string

`ruleId` string

`ruleName` string

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-movements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unmatch \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "allocationId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

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

```python
import os
import requests

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

## Run automatic pairing over all open movements. Only exact matches above the safe threshold are paired

POST `/v1/bank-movements/auto-match`

Run automatic pairing over all open movements. Only exact matches above the safe threshold are paired

MCP tool: `auto-match-bank-movements`

### Response · 200

`checkedCount` integer required

`matchedCount` integer required

`movementIds` string\[\] required

```bash
curl -X POST https://api.damedoklad.cz/v1/bank-movements/auto-match \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Unpaid documents a movement can be paired with. direction=in lists issued invoices, proformas, debit notes, other receivables, and refunds of advances from suppliers; out lists received invoices, advances to suppliers, credit notes, other payables, payroll payments, and advances on business trips. Business trips follow their own side, and payments typed by hand (hand\_payment) wait on either for the line that takes them over

GET `/v1/bank-open-documents`

Unpaid documents a movement can be paired with. direction=in lists issued invoices, proformas, debit notes, other receivables, and refunds of advances from suppliers; out lists received invoices, advances to suppliers, credit notes, other payables, payroll payments, and advances on business trips. Business trips follow their own side, and payments typed by hand (hand\_payment) wait on either for the line that takes them over

MCP tool: `list-bank-open-documents`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`direction` "in" | "out"

### Response · 200

`data` object\[\] required

`object` "open\_document" required

`kind` string required

`id` string required

`number` null | string required

`variableSymbol` null | string required

`currency` null | string required

`totalHaler` integer | null required

`remainingHaler` integer | null required

`issueDate` null | string required date

`dueDate` null | string required date

`contactName` null | string required

`contactId` null | string required

`inPayment` boolean required

`incoming` boolean

`bankAccountId` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

```bash
curl https://api.damedoklad.cz/v1/bank-open-documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Post every stated opening balance of bank accounts and cash registers that is not in the books yet. A sweep does this by itself every few hours, so this only says at once what a closed period still stops. Safe to repeat

POST `/v1/bank-opening-balances/post`

Post every stated opening balance of bank accounts and cash registers that is not in the books yet. A sweep does this by itself every few hours, so this only says at once what a closed period still stops. Safe to repeat. Legal effect: posts MD 221xxx or 211xxx / D 701, or sets the opening cash and bank of the peněžní deník. A balance the opening entries already hold posts nothing. notPosted lists what a closed period stopped.

MCP tool: `post-stated-opening-balances`

### Response · 200

`notPosted` any\[\] required

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

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

## Totals for the bank page: movements waiting to be paired and how many of the newest have a confident suggestion

GET `/v1/bank-overview`

Totals for the bank page: movements waiting to be paired and how many of the newest have a confident suggestion

MCP tool: `get-bank-overview`

### Response · 200

`unmatchedCount` integer required

`unmatchedAbsHaler` integer required

`suggestedCount` integer required

`suggestedCountPartial` boolean required

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

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

## Unpaid received invoices, advances to suppliers, and other payables ready for a payment order, with a due date filter. \`kind\` tells them apart, inPayment marks those already on an order

GET `/v1/bank-payable-invoices`

Unpaid received invoices, advances to suppliers, and other payables ready for a payment order, with a due date filter. \`kind\` tells them apart, inPayment marks those already on an order

MCP tool: `list-payable-received-invoices`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`dueTo` string YYYY-MM-DD

Date as YYYY-MM-DD.

`dueFrom` string YYYY-MM-DD

Date as YYYY-MM-DD.

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

### Response · 200

`data` object\[\] required

`object` "payable\_invoice" required

`kind` string required

`id` string required

`number` null | string required

`supplierDocumentNumber` null | string

`contactName` null | string required

`variableSymbol` null | string required

`dueDate` null | string required date

`currency` null | string required

`totalHaler` integer | null required

`remainingHaler` integer | null required

`hasBankAccount` boolean required

`inPayment` boolean required

`paymentOrderId` null | string required

`approvalBlocked` 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/bank-payable-invoices \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## List pairing rules such as "ČEZ → 502". Rules only ever suggest, a person confirms

GET `/v1/bank-rules`

List pairing rules such as "ČEZ → 502". Rules only ever suggest, a person confirms

MCP tool: `list-bank-rules`

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

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

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

## Create a pairing rule: what to recognise on a movement, and how to book it

POST `/v1/bank-rules`

Create a pairing rule: what to recognise on a movement, and how to book it

MCP tool: `create-bank-rule`

### Request body

`name` string required max 200 chars

`direction` "any" | "in" | "out"

`counterpartyNameContains` string max 200 chars

`counterpartyAccount` string

`counterpartyBankCode` string

`messageContains` string max 200 chars

`variableSymbol` string

`category` "bank\_fee" | "interest\_received" | "interest\_paid" | "interest\_tax" | "tax\_vat" | "tax\_income" | "tax\_payroll" | "tax\_road" | "insurance\_social" | "insurance\_health" | "insurance\_social\_own" | "insurance\_health\_own" | "card\_settlement" | "own\_transfer" | "reversal" | "other" required

`accountNumber` string

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

`classification` "income\_taxable" | "income\_nontax" | "expense\_deductible" | "expense\_nontax" | "transfer"

`priority` integer min 0 max 1000

`isActive` boolean

### Response · 201

`id` string required

`name` string required

`direction` string required

`counterpartyNameContains` null | string required

`counterpartyAccount` string | null required

`counterpartyBankCode` string | null required

`messageContains` null | string required

`variableSymbol` string | null required

`category` string required

`accountNumber` null | string required

`classification` string | null required

`priority` integer required

`isActive` boolean required

`createdAt` string required date-time

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

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

```python
import os
import requests

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

## Update a pairing rule

PATCH `/v1/bank-rules/{id}`

Update a pairing rule

MCP tool: `update-bank-rule`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`direction` "any" | "in" | "out"

`counterpartyNameContains` string max 200 chars

`counterpartyAccount` string

`counterpartyBankCode` string

`messageContains` string max 200 chars

`variableSymbol` string

`category` "bank\_fee" | "interest\_received" | "interest\_paid" | "interest\_tax" | "tax\_vat" | "tax\_income" | "tax\_payroll" | "tax\_road" | "insurance\_social" | "insurance\_health" | "insurance\_social\_own" | "insurance\_health\_own" | "card\_settlement" | "own\_transfer" | "reversal" | "other"

`accountNumber` string

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

`classification` "income\_taxable" | "income\_nontax" | "expense\_deductible" | "expense\_nontax" | "transfer"

`priority` integer min 0 max 1000

`isActive` boolean

### Response · 200

`id` string required

`name` string required

`direction` string required

`counterpartyNameContains` null | string required

`counterpartyAccount` string | null required

`counterpartyBankCode` string | null required

`messageContains` null | string required

`variableSymbol` string | null required

`category` string required

`accountNumber` null | string required

`classification` string | null required

`priority` integer required

`isActive` boolean required

`createdAt` string required date-time

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

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

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/bank-rules/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "direction": "any",
        "counterpartyNameContains": "Pekárna U Lípy s.r.o."
    },
)
data = response.json()
```

## Delete a pairing rule

DELETE `/v1/bank-rules/{id}`

Delete a pairing rule

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

MCP tool: `delete-bank-rule`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## List imported statements with opening and closing balances and the continuity check against the previous statement

GET `/v1/bank-statements`

List imported statements with opening and closing balances and the continuity check against the previous statement

MCP tool: `list-bank-statements`

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

`bankAccountId` string

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

### Response · 200

`data` object\[\] required

`object` "bank\_statement" required

`id` string required

`bankAccountId` string required

`format` string required

`fileName` null | string required

`number` null | string required

`periodFrom` null | string required date

`periodTo` null | string required date

`openingBalanceHaler` integer | null required

`closingBalanceHaler` integer | null required

`debitTotalHaler` integer required

`creditTotalHaler` integer required

`movementCount` integer required

`importedCount` integer required

`duplicateCount` integer required

`autoMatchedCount` integer required

`warnings` object\[\] required

`code` null | string required

`message` null | string required

`diffHaler` integer required

`createdAt` string required date-time

`continuity` string

`continuityDiffHaler` integer

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Import a statement file sent as base64: GPC/ABO, CAMT.053, MT940, or CSV with a column mapping. Re-importing never double-books

POST `/v1/bank-statements/import`

Import a statement file sent as base64: GPC/ABO, CAMT.053, MT940, or CSV with a column mapping. Re-importing never double-books. The format is detected unless given. A file already imported to the account returns duplicateFile: true. Movements already on the account are skipped by fingerprint, also across formats. Safe exact matches are paired automatically.

MCP tool: `import-bank-statement`

### Request body

`bankAccountId` string required

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

`fileBase64` string required min 4 chars max 20000000 chars

File content encoded as base64.

`fileName` string max 200 chars

`format` "auto" | "gpc" | "camt053" | "mt940" | "csv"

`encoding` "windows-1250" | "utf-8" | "iso-8859-2"

`gpcVariant` "fio" | "cs"

`csv` object

`mapping` object required

`bookedOn` string

Date as YYYY-MM-DD.

`amount` string

`credit` string

`debit` string

`currency` string

ISO 4217 currency code, for example CZK or EUR.

`counterpartyAccount` string

`counterpartyBankCode` string

`counterpartyIban` string

IBAN without spaces.

`counterpartyName` string

`variableSymbol` string

`constantSymbol` string

`specificSymbol` string

`message` string

`externalId` string

ID of the external.

`bankType` string

`delimiter` string 1 chars

`number` string max 40 chars

`openingBalanceHaler` integer min -9007199254740991 max 9007199254740991

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

`closingBalanceHaler` integer min -9007199254740991 max 9007199254740991

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

### Response · 201

`duplicateFile` boolean required

`importedCount` integer required

`duplicateCount` integer required

`autoMatchedCount` integer required

`statements` object\[\] required

`object` "bank\_statement" required

`id` string required

`bankAccountId` string required

`format` string required

`fileName` null | string required

`number` null | string required

`periodFrom` null | string required date

`periodTo` null | string required date

`openingBalanceHaler` integer | null required

`closingBalanceHaler` integer | null required

`debitTotalHaler` integer required

`creditTotalHaler` integer required

`movementCount` integer required

`importedCount` integer required

`duplicateCount` integer required

`autoMatchedCount` integer required

`warnings` object\[\] required

`code` null | string required

`message` null | string required

`diffHaler` integer required

`createdAt` string required date-time

`continuity` string

`continuityDiffHaler` integer

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

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

```python
import os
import requests

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

## Read the columns of a CSV file sent as base64 and suggest the mapping, without importing anything

POST `/v1/bank-statements/inspect-csv`

Read the columns of a CSV file sent as base64 and suggest the mapping, without importing anything

MCP tool: `inspect-bank-csv`

### Request body

`fileBase64` string required min 4 chars max 20000000 chars

File content encoded as base64.

`encoding` "windows-1250" | "utf-8" | "iso-8859-2"

`delimiter` string 1 chars

### Response · 200

`delimiter` string required

`headers` string\[\] required

`sampleRows` string\[\]\[\] required

`rowCount` integer required

`suggestedMapping` object required

`bookedOn` string required

`amount` string required

`variableSymbol` null | string required

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

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

```python
import os
import requests

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

## Imported settlements from card terminals and gateways, newest first. status=imported lists what still waits for its bank movement

GET `/v1/card-settlements`

Imported settlements from card terminals and gateways, newest first. status=imported lists what still waits for its bank movement

MCP tool: `list-card-settlements`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`status` "imported" | "posted"

### Response · 200

`data` object\[\] required

`object` "card\_settlement" required

`id` string required

`provider` null | string required

`format` string required

`formatStatus` string required

`fileName` null | string required

`settledOn` null | string required date

`currency` null | string required

`grossHaler` integer required

`refundHaler` integer required

`feeHaler` integer required

`otherHaler` integer required

`payoutHaler` integer required

`differenceHaler` integer required

`payoutReference` null | string required

`status` string required

`clearingAccount` null | string required

`feeAccount` null | string required

`movementId` null | string required

`postedAt` null | string required date-time

`lines` object\[\]

`reference` null | string required

`amountHaler` integer required

`variableSymbol` null | string required

`occurredOn` null | string required date

`description` null | string required

`kind` string required

`position` integer required

`feeHaler` integer required

`object` "card\_settlement\_line" required

`id` string

`documentKind` null | string

`documentId` null | string

`paymentId` null | string

`movementCandidates` object\[\]

`id` string required

`bookedOn` string required date

`amountHaler` integer | null required

`variableSymbol` null | string required

`counterpartyName` null | string required

`symbolMatches` 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/card-settlements \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

```python
import os
import requests

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

## One settlement with its lines and the bank movements that could have paid it out

GET `/v1/card-settlements/{id}`

One settlement with its lines and the bank movements that could have paid it out

MCP tool: `get-card-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`provider` null | string required

`format` string required

`formatStatus` string required

`fileName` null | string required

`settledOn` null | string required date

`currency` null | string required

`grossHaler` integer required

`refundHaler` integer required

`feeHaler` integer required

`otherHaler` integer required

`payoutHaler` integer required

`differenceHaler` integer required

`payoutReference` null | string required

`status` string required

`clearingAccount` null | string required

`feeAccount` null | string required

`movementId` null | string required

`postedAt` null | string required date-time

`lines` object\[\]

`reference` null | string required

`amountHaler` integer required

`variableSymbol` null | string required

`occurredOn` null | string required date

`description` null | string required

`kind` string required

`position` integer required

`feeHaler` integer required

`object` "card\_settlement\_line" required

`id` string

`documentKind` null | string

`documentId` null | string

`paymentId` null | string

`movementCandidates` object\[\]

`id` string required

`bookedOn` string required date

`amountHaler` integer | null required

`variableSymbol` null | string required

`counterpartyName` null | string required

`symbolMatches` boolean required

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

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

```python
import os
import requests

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

## Remove an imported settlement that has not been posted

DELETE `/v1/card-settlements/{id}`

Remove an imported settlement that has not been posted

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

MCP tool: `delete-card-settlement`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

```python
import os
import requests

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

## Pair a settlement with the bank movement of its payout and post it: the payout and the fee clear the clearing account. Pays open invoices named by symbol

POST `/v1/card-settlements/{id}/post`

Pair a settlement with the bank movement of its payout and post it: the payout and the fee clear the clearing account. Pays open invoices named by symbol. Refused if the file does not add up or the movement is for another amount. Unpairing the movement in Banka reverses all of it.

MCP tool: `post-card-settlement`

### Path parameters

`id` string required

### Request body

`movementId` string required

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

`clearingAccount` string

`feeAccount` string

### Response · 200

`id` string required

`provider` null | string required

`format` string required

`formatStatus` string required

`fileName` null | string required

`settledOn` null | string required date

`currency` null | string required

`grossHaler` integer required

`refundHaler` integer required

`feeHaler` integer required

`otherHaler` integer required

`payoutHaler` integer required

`differenceHaler` integer required

`payoutReference` null | string required

`status` string required

`clearingAccount` null | string required

`feeAccount` null | string required

`movementId` null | string required

`postedAt` null | string required date-time

`lines` object\[\]

`reference` null | string required

`amountHaler` integer required

`variableSymbol` null | string required

`occurredOn` null | string required date

`description` null | string required

`kind` string required

`position` integer required

`feeHaler` integer required

`object` "card\_settlement\_line" required

`id` string

`documentKind` null | string

`documentId` null | string

`paymentId` null | string

`movementCandidates` object\[\]

`id` string required

`bookedOn` string required date

`amountHaler` integer | null required

`variableSymbol` null | string required

`counterpartyName` null | string required

`symbolMatches` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/card-settlements/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/post \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "movementId": "mov_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

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

```python
import os
import requests

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

## Read a settlement file from a card terminal or gateway sent as base64. dryRun shows the result without saving. Importing the same file again changes nothing

POST `/v1/card-settlements/import`

Read a settlement file from a card terminal or gateway sent as base64. dryRun shows the result without saving. Importing the same file again changes nothing. Only ComGate publishes what its rows mean. For GoPay, ThePay, KB SmartPay and PayU the rows are read by a rule of thumb, so saving needs confirmUnverified: true after a person checked the preview. PayU needs columns. Nothing is posted until postCardSettlement.

MCP tool: `import-card-settlement`

### Request body

`provider` "comgate" | "gopay" | "thepay" | "kb\_smartpay" | "payu" required

`fileBase64` string required min 4 chars max 20000000 chars

File content encoded as base64.

`fileName` string max 200 chars

`encoding` "windows-1250" | "utf-8" | "iso-8859-2"

`settledOn` string YYYY-MM-DD

Date as YYYY-MM-DD.

`columns` object

`gross` string required max 120 chars

`fee` string max 120 chars

`net` string max 120 chars

`date` string max 120 chars

Date as YYYY-MM-DD.

`variableSymbol` string max 120 chars

`reference` string max 120 chars

`batch` string max 120 chars

`dryRun` boolean

`confirmUnverified` boolean

### Response · 201

`provider` null | string required

`format` string required

`formatStatus` string required

`settledOn` null | string required date

`currency` null | string required

`grossHaler` integer required

`refundHaler` integer required

`feeHaler` integer required

`otherHaler` integer required

`payoutHaler` integer required

`differenceHaler` integer required

`payoutReference` null | string required

`warnings` string\[\] required

`lines` object\[\]

`reference` null | string required

`amountHaler` integer required

`variableSymbol` null | string required

`occurredOn` null | string required date

`description` null | string required

`kind` string required

`position` integer required

`feeHaler` integer required

`object` "card\_settlement\_line" required

`id` string

`documentKind` null | string

`documentId` null | string

`paymentId` null | string

`id` string

`fileName` null | string

`status` string

`clearingAccount` string | null

`feeAccount` string | null

`movementId` string | null

`postedAt` string | null

`duplicateFile` boolean

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

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

```python
import os
import requests

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

## The clearing and fee accounts for card settlements, and which provider formats are published and which are unverified

GET `/v1/card-settlements/settings`

The clearing and fee accounts for card settlements, and which provider formats are published and which are unverified

MCP tool: `get-card-settlement-settings`

### Response · 200

`clearingAccount` null | string required

`feeAccount` null | string required

`providers` object\[\] required

`id` string required

`label` null | string required

`format` string required

`formatStatus` string required

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

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

## Set the clearing account card sales wait on, and the account for fees. Applies to card sales from now on

PATCH `/v1/card-settlements/settings`

Set the clearing account card sales wait on, and the account for fees. Applies to card sales from now on. The clearing account must exist in the chart. Default is 261; an analytic such as 261100 keeps card money apart from cash on its way to the bank.

MCP tool: `update-card-settlement-settings`

### Request body

`clearingAccount` string

`feeAccount` string

### Response · 200

`clearingAccount` null | string required

`feeAccount` null | string required

`providers` object\[\] required

`id` string required

`label` null | string required

`format` string required

`formatStatus` string required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/card-settlements/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "clearingAccount": "string",
  "feeAccount": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/card-settlements/settings', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "clearingAccount": "string",
    "feeAccount": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/card-settlements/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "clearingAccount": "string",
        "feeAccount": "string"
    },
)
data = response.json()
```

## List cash documents, newest first. With registerId each row carries the running balance

GET `/v1/cash-documents`

List cash documents, newest first. With registerId each row carries the running balance

MCP tool: `list-cash-documents`

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

`registerId` string

ID of the register.

`kind` "receipt" | "expense"

### Response · 200

`data` object\[\] required

`object` "cash\_document" required

`id` string required

`registerId` string required

`kind` string required

`number` string required

`issuedOn` string required date

`amountHaler` integer required

`netHaler` integer required

`vatHaler` integer required

`vatRate` integer required

`exchangeRate` null | number required

`counterpartyName` null | string required

`contactId` null | string required

`description` string required

`documentKind` null | string required

`documentId` null | string required

`documentNumber` null | string required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`negativeOverride` boolean required

`status` string required

`createdAt` string required date-time

`balanceHaler` integer | null

`eetPrepaidLoadHaler` integer

`eetPrepaidUseHaler` integer

`eetVoucherId` null | string

`eetMandateId` string | null

`paidAt` null | string date-time

`registerBalanceHaler` integer

`warnings` object\[\]

`code` null | string required

`limitHaler` integer required

`totalHaler` integer | null required

`message` null | string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Issue a receipt or expense cash document and post it. Refuses a negative register balance unless allowNegative is true, and warns over the 270 000 Kč cash limit

POST `/v1/cash-documents`

Issue a receipt or expense cash document and post it. Refuses a negative register balance unless allowNegative is true, and warns over the 270 000 Kč cash limit

MCP tool: `create-cash-document`

### Request body

`registerId` string required

ID of the register.

`kind` "receipt" | "expense" required

`issuedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`amountHaler` integer required max 9007199254740991

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

`description` string required max 400 chars

`counterpartyName` string max 200 chars

`contactId` string

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

`documentKind` "invoice" | "received\_invoice" | "proforma" | "proforma\_refund" | "supplier\_advance" | "supplier\_advance\_refund" | "credit\_note" | "debit\_note" | "other\_receivable" | "other\_payable"

`documentId` string

ID of the document.

`documentAmountHaler` integer max 9007199254740991

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

`category` "bank\_fee" | "interest\_received" | "interest\_paid" | "interest\_tax" | "tax\_vat" | "tax\_income" | "tax\_payroll" | "tax\_road" | "insurance\_social" | "insurance\_health" | "insurance\_social\_own" | "insurance\_health\_own" | "card\_settlement" | "own\_transfer" | "reversal" | "other"

`accountNumber` string

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

`classification` "income\_taxable" | "income\_nontax" | "expense\_deductible" | "expense\_nontax" | "transfer"

`vatRate` number min 0 max 100

`vatMode` "domestic" | "eu\_registration" | "margin\_used\_goods" | "margin\_art" | "margin\_collectibles" | "margin\_travel"

`vatCountry` string 2 chars

`purchaseHaler` integer min 0 max 9007199254740991

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

`purchaseLineId` string

ID of the purchase line.

`exchangeRate` number max 100000

`allowNegative` boolean

`eetPrepaidLoadHaler` integer min 0 max 9007199254740991

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

`eetPrepaidUseHaler` integer min 0 max 9007199254740991

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

`eetVoucherId` string

ID of the eet voucher. Find it with list-eet-vouchers.

`eetMandateId` string

ID of the eet mandate. Find it with list-eet-mandates.

`eetOwnSale` boolean

`paidAt` string date-time

### Response · 201

`id` string required

`registerId` string required

`kind` string required

`number` string required

`issuedOn` string required date

`amountHaler` integer required

`netHaler` integer required

`vatHaler` integer required

`vatRate` integer required

`exchangeRate` null | number required

`counterpartyName` null | string required

`contactId` null | string required

`description` string required

`documentKind` null | string required

`documentId` null | string required

`documentNumber` null | string required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`negativeOverride` boolean required

`status` string required

`createdAt` string required date-time

`balanceHaler` integer | null

`eetPrepaidLoadHaler` integer

`eetPrepaidUseHaler` integer

`eetVoucherId` null | string

`eetMandateId` string | null

`paidAt` null | string date-time

`registerBalanceHaler` integer

`warnings` object\[\]

`code` null | string required

`limitHaler` integer required

`totalHaler` integer | null required

`message` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/cash-documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "registerId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "kind": "receipt",
  "issuedOn": "2026-10-30",
  "amountHaler": 1210000,
  "description": "Pečivo, říjen"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/cash-documents",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "registerId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "receipt",
        "issuedOn": "2026-10-30",
        "amountHaler": 1210000,
        "description": "Pečivo, říjen"
    },
)
data = response.json()
```

## Get one cash document

GET `/v1/cash-documents/{id}`

Get one cash document

MCP tool: `get-cash-document`

### Path parameters

`id` string required

### Response · 200

`id` string required

`registerId` string required

`kind` string required

`number` string required

`issuedOn` string required date

`amountHaler` integer required

`netHaler` integer required

`vatHaler` integer required

`vatRate` integer required

`exchangeRate` null | number required

`counterpartyName` null | string required

`contactId` null | string required

`description` string required

`documentKind` null | string required

`documentId` null | string required

`documentNumber` null | string required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`negativeOverride` boolean required

`status` string required

`createdAt` string required date-time

`balanceHaler` integer | null

`eetPrepaidLoadHaler` integer

`eetPrepaidUseHaler` integer

`eetVoucherId` null | string

`eetMandateId` string | null

`paidAt` null | string date-time

`registerBalanceHaler` integer

`warnings` object\[\]

`code` null | string required

`limitHaler` integer required

`totalHaler` integer | null required

`message` null | string required

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

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

## Cancel a cash document: the number stays used and the postings are reversed

POST `/v1/cash-documents/{id}/cancel`

Cancel a cash document: the number stays used and the postings are reversed

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

MCP tool: `cancel-cash-document`

### Path parameters

`id` string required

### Request body

`allowNegative` boolean

### Response · 200

`id` string required

`registerId` string required

`kind` string required

`number` string required

`issuedOn` string required date

`amountHaler` integer required

`netHaler` integer required

`vatHaler` integer required

`vatRate` integer required

`exchangeRate` null | number required

`counterpartyName` null | string required

`contactId` null | string required

`description` string required

`documentKind` null | string required

`documentId` null | string required

`documentNumber` null | string required

`category` null | string required

`accountNumber` null | string required

`classification` null | string required

`negativeOverride` boolean required

`status` string required

`createdAt` string required date-time

`balanceHaler` integer | null

`eetPrepaidLoadHaler` integer

`eetPrepaidUseHaler` integer

`eetVoucherId` null | string

`eetMandateId` string | null

`paidAt` null | string date-time

`registerBalanceHaler` integer

`warnings` object\[\]

`code` null | string required

`limitHaler` integer required

`totalHaler` integer | null required

`message` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/cash-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/cancel \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "allowNegative": false
}'
```

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

```python
import os
import requests

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

## Download a cash document as PDF

GET `/v1/cash-documents/{id}/pdf`

Download a cash document as PDF

MCP tool: `get-cash-document-pdf`

### Path parameters

`id` string required

### Response · 200

Returns a application/pdf file.

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

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

## List cash registers with current balance

GET `/v1/cash-registers`

List cash registers with current balance

MCP tool: `list-cash-registers`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

### Response · 200

`data` object\[\] required

`object` "cash\_register" required

`id` string required

`name` string required

`currency` string required

`ledgerAccount` string required

`openingBalanceHaler` integer required

`openingDate` null | string required date

`openingExchangeRate` null | number required

`openingState` string required

`receiptPrefix` string required

`expensePrefix` string required

`isActive` boolean required

`createdAt` string required date-time

`balanceHaler` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a cash register. The analytic 211xxx account is filled in when omitted. A stated opening balance posts MD 211xxx / D 701, or the opening cash of the peněžní deník, unless opening entries already hold the account

POST `/v1/cash-registers`

Create a cash register. The analytic 211xxx account is filled in when omitted. A stated opening balance posts MD 211xxx / D 701, or the opening cash of the peněžní deník, unless opening entries already hold the account

MCP tool: `create-cash-register`

### Request body

`name` string required max 200 chars

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`ledgerAccount` string

`openingBalanceHaler` integer min -9007199254740991 max 9007199254740991

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

`openingDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`openingExchangeRate` number max 100000

`receiptPrefix` string

`expensePrefix` string

### Response · 201

`id` string required

`name` string required

`currency` string required

`ledgerAccount` string required

`openingBalanceHaler` integer required

`openingDate` null | string required date

`openingExchangeRate` null | number required

`openingState` string required

`receiptPrefix` string required

`expensePrefix` string required

`isActive` boolean required

`createdAt` string required date-time

`balanceHaler` integer required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/cash-registers', {
  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."
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Get one cash register

GET `/v1/cash-registers/{id}`

Get one cash register

MCP tool: `get-cash-register`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` string required

`currency` string required

`ledgerAccount` string required

`openingBalanceHaler` integer required

`openingDate` null | string required date

`openingExchangeRate` null | number required

`openingState` string required

`receiptPrefix` string required

`expensePrefix` string required

`isActive` boolean required

`createdAt` string required date-time

`balanceHaler` integer required

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

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

## Update a cash register. Currency, analytic account, and opening balance are locked once it has documents

PATCH `/v1/cash-registers/{id}`

Update a cash register. Currency, analytic account, and opening balance are locked once it has documents

MCP tool: `update-cash-register`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`ledgerAccount` string

`openingBalanceHaler` integer min -9007199254740991 max 9007199254740991

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

`openingDate` string | null

Date as YYYY-MM-DD.

`openingExchangeRate` number max 100000

`receiptPrefix` string

`expensePrefix` string

`isActive` boolean

### Response · 200

`id` string required

`name` string required

`currency` string required

`ledgerAccount` string required

`openingBalanceHaler` integer required

`openingDate` null | string required date

`openingExchangeRate` null | number required

`openingState` string required

`receiptPrefix` string required

`expensePrefix` string required

`isActive` boolean required

`createdAt` string required date-time

`balanceHaler` integer required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/cash-registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Hlavní pokladna",
  "ledgerAccount": "211001"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/cash-registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "name": "Hlavní pokladna",
    "ledgerAccount": "211001"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/cash-registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Hlavní pokladna",
        "ledgerAccount": "211001"
    },
)
data = response.json()
```

## Delete a cash register that has no documents. Its posted opening balance is reversed

DELETE `/v1/cash-registers/{id}`

Delete a cash register that has no documents. Its posted opening balance is reversed

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

MCP tool: `delete-cash-register`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## List payment orders

GET `/v1/payment-orders`

List payment orders

MCP tool: `list-payment-orders`

### 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` "draft" | "exported" | "completed" | "cancelled"

`kind` "payment" | "collection"

### Response · 200

`data` object\[\] required

`object` "payment\_order" required

`id` string required

`bankAccountId` string required

`number` integer required

`executionDate` string required date

`currency` string required

`totalHaler` integer required

`status` string required

`exportedFormat` null | string required

`exportedAt` null | string required date-time

`createdAt` string required date-time

`items` object\[\] required

`object` "payment\_order\_item" required

`id` string required

`orderId` string required

`receivedInvoiceId` null | string required

`supplierAdvanceId` null | string required

`otherPayableId` null | string required

`payrollPaymentId` null | string required

`amountHaler` integer required

`counterpartyName` null | string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`status` string required

`movementId` null | string required

`salesDocumentId` null | string

`invoiceId` null | string

`mandateId` null | string

`sequenceType` null | string

`counterpartyBic` null | string

`counterpartyCountry` null | string

`chargeBearer` null | string

`paymentReason` null | string

`kind` string

`scheme` string

`warnings` object\[\]

`receivedInvoiceId` null | string required

`number` string required

`contactName` null | string required

`status` null | string required

`warnings` object\[\] required

`code` null | string required

`level` string required

`reason` null | string required

`liability` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a payment order from unpaid received invoices, advances to suppliers, and other payables, or with kind collection a příkaz k inkasu from issued invoices, debit notes, and other receivables. scheme foreign pays abroad in the document's currency from any account. They are marked as in payment and pair when the movement arrives. The answer lists supplier warnings (§ 109), which never block

POST `/v1/payment-orders`

Create a payment order from unpaid received invoices, advances to suppliers, and other payables, or with kind collection a příkaz k inkasu from issued invoices, debit notes, and other receivables. scheme foreign pays abroad in the document's currency from any account. They are marked as in payment and pair when the movement arrives. The answer lists supplier warnings (§ 109), which never block

MCP tool: `create-payment-order`

### Request body

`bankAccountId` string required

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

`executionDate` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`kind` "payment" | "collection"

collection is a příkaz k inkasu: money the bank pulls from customers. Default payment

`scheme` "domestic" | "sepa" | "foreign"

foreign lets the order be in another currency than the account. Default follows the account: CZK domestic, EUR SEPA, others foreign

`items` object\[\] required

`receivedInvoiceId` string

ID of the received invoice. Find it with list-received-invoices.

`supplierAdvanceId` string

ID of the supplier advance. Find it with list-supplier-advances.

`otherPayableId` string

ID of the other payable.

`invoiceId` string

ID of the invoice. Find it with list-invoices.

`debitNoteId` string

ID of the debit note.

`otherReceivableId` string

ID of the other receivable.

`mandateId` string

For a SEPA collection. Without it the only active mandate of the contact is used

`amountHaler` integer max 9007199254740991

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

`message` string max 140 chars

`foreign` object

`account` string max 34 chars

IBAN, or the account number where the country has no IBAN

`bic` string

`street` string max 70 chars

`city` string max 35 chars

`country` string

`bankName` string max 70 chars

`bankStreet` string max 70 chars

`bankCity` string max 35 chars

`chargeBearer` "SHA" | "OUR" | "BEN"

Who bears the charges. Default SHA, the only one allowed within the EU/EEA

`paymentReason` string

Payment title from the ČNB list, which some banks ask for

### Response · 201

`id` string required

`bankAccountId` string required

`number` integer required

`executionDate` string required date

`currency` string required

`totalHaler` integer required

`status` string required

`exportedFormat` null | string required

`exportedAt` null | string required date-time

`createdAt` string required date-time

`items` object\[\] required

`object` "payment\_order\_item" required

`id` string required

`orderId` string required

`receivedInvoiceId` null | string required

`supplierAdvanceId` null | string required

`otherPayableId` null | string required

`payrollPaymentId` null | string required

`amountHaler` integer required

`counterpartyName` null | string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`status` string required

`movementId` null | string required

`salesDocumentId` null | string

`invoiceId` null | string

`mandateId` null | string

`sequenceType` null | string

`counterpartyBic` null | string

`counterpartyCountry` null | string

`chargeBearer` null | string

`paymentReason` null | string

`kind` string

`scheme` string

`warnings` object\[\]

`receivedInvoiceId` null | string required

`number` string required

`contactName` null | string required

`status` null | string required

`warnings` object\[\] required

`code` null | string required

`level` string required

`reason` null | string required

`liability` string

```bash
curl -X POST https://api.damedoklad.cz/v1/payment-orders \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "executionDate": "2026-10-30",
  "items": [
    {
      "receivedInvoiceId": "rin_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "supplierAdvanceId": "sad_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "otherPayableId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payment-orders', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "executionDate": "2026-10-30",
    "items": [
      {
        "receivedInvoiceId": "rin_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "supplierAdvanceId": "sad_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "otherPayableId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payment-orders",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "bankAccountId": "cba_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "executionDate": "2026-10-30",
        "items": [
            {
                "receivedInvoiceId": "rin_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "supplierAdvanceId": "sad_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "otherPayableId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
            }
        ]
    },
)
data = response.json()
```

## Get a payment order with its items

GET `/v1/payment-orders/{id}`

Get a payment order with its items

MCP tool: `get-payment-order`

### Path parameters

`id` string required

### Response · 200

`id` string required

`bankAccountId` string required

`number` integer required

`executionDate` string required date

`currency` string required

`totalHaler` integer required

`status` string required

`exportedFormat` null | string required

`exportedAt` null | string required date-time

`createdAt` string required date-time

`items` object\[\] required

`object` "payment\_order\_item" required

`id` string required

`orderId` string required

`receivedInvoiceId` null | string required

`supplierAdvanceId` null | string required

`otherPayableId` null | string required

`payrollPaymentId` null | string required

`amountHaler` integer required

`counterpartyName` null | string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`status` string required

`movementId` null | string required

`salesDocumentId` null | string

`invoiceId` null | string

`mandateId` null | string

`sequenceType` null | string

`counterpartyBic` null | string

`counterpartyCountry` null | string

`chargeBearer` null | string

`paymentReason` null | string

`kind` string

`scheme` string

`warnings` object\[\]

`receivedInvoiceId` null | string required

`number` string required

`contactName` null | string required

`status` null | string required

`warnings` object\[\] required

`code` null | string required

`level` string required

`reason` null | string required

`liability` string

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

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

## Cancel a payment order and release its invoices. An order with a paid item cannot be cancelled

POST `/v1/payment-orders/{id}/cancel`

Cancel a payment order and release its invoices. An order with a paid item cannot be cancelled

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

MCP tool: `cancel-payment-order`

### Path parameters

`id` string required

### Response · 200

`id` string required

`bankAccountId` string required

`number` integer required

`executionDate` string required date

`currency` string required

`totalHaler` integer required

`status` string required

`exportedFormat` null | string required

`exportedAt` null | string required date-time

`createdAt` string required date-time

`items` object\[\] required

`object` "payment\_order\_item" required

`id` string required

`orderId` string required

`receivedInvoiceId` null | string required

`supplierAdvanceId` null | string required

`otherPayableId` null | string required

`payrollPaymentId` null | string required

`amountHaler` integer required

`counterpartyName` null | string required

`counterpartyAccount` null | string required

`counterpartyBankCode` null | string required

`counterpartyIban` null | string required

`variableSymbol` null | string required

`constantSymbol` null | string required

`specificSymbol` string | null required

`message` null | string required

`status` string required

`movementId` null | string required

`salesDocumentId` null | string

`invoiceId` null | string

`mandateId` null | string

`sequenceType` null | string

`counterpartyBic` null | string

`counterpartyCountry` null | string

`chargeBearer` null | string

`paymentReason` null | string

`kind` string

`scheme` string

`warnings` object\[\]

`receivedInvoiceId` null | string required

`number` string required

`contactName` null | string required

`status` null | string required

`warnings` object\[\] required

`code` null | string required

`level` string required

`reason` null | string required

`liability` string

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

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

```python
import os
import requests

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

## Download an order for the bank. kpc: domestic KPC/ABO in CZK, also a příkaz k inkasu. xml: domestic pain.001, or pain.008 for a collection, as the Czech Banking Association describes. sepa: pain.001 in EUR. foreign: pain.001 for a foreign payment. direct\_debit: pain.008 SEPA in EUR

GET `/v1/payment-orders/{id}/export`

Download an order for the bank. kpc: domestic KPC/ABO in CZK, also a příkaz k inkasu. xml: domestic pain.001, or pain.008 for a collection, as the Czech Banking Association describes. sepa: pain.001 in EUR. foreign: pain.001 for a foreign payment. direct\_debit: pain.008 SEPA in EUR

MCP tool: `export-payment-order`

### Path parameters

`id` string required

### Query parameters

`format` "kpc" | "sepa" | "xml" | "foreign" | "direct\_debit"

### Response · 200

Returns a application/octet-stream file.

```bash
curl https://api.damedoklad.cz/v1/payment-orders/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/export \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

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

## Before paying: warn about unreliable VAT payers and bank accounts not published in the ADIS register, with the § 109 liability they bring. Warns and never blocks. A registry that cannot be reached is reported, not an error

POST `/v1/payment-orders/check`

Before paying: warn about unreliable VAT payers and bank accounts not published in the ADIS register, with the § 109 liability they bring. Warns and never blocks. A registry that cannot be reached is reported, not an error

MCP tool: `check-payment-order`

### Request body

`items` object\[\] required

`receivedInvoiceId` string

ID of the received invoice. Find it with list-received-invoices.

`supplierAdvanceId` string

ID of the supplier advance. Find it with list-supplier-advances.

`otherPayableId` string

ID of the other payable.

### Response · 200

`data` object\[\] required

`receivedInvoiceId` null | string required

`number` null | string required

`contactName` null | string required

`status` null | string required

`warnings` object\[\] required

`code` null | string required

`level` string required

`reason` null | string required

`liability` string

```bash
curl -X POST https://api.damedoklad.cz/v1/payment-orders/check \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "receivedInvoiceId": "rin_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "supplierAdvanceId": "sad_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "otherPayableId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/payment-orders/check', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "items": [
      {
        "receivedInvoiceId": "rin_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "supplierAdvanceId": "sad_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "otherPayableId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/payment-orders/check",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "items": [
            {
                "receivedInvoiceId": "rin_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "supplierAdvanceId": "sad_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "otherPayableId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
            }
        ]
    },
)
data = response.json()
```

## Customers' SEPA mandates, which a SEPA direct debit draws on

GET `/v1/sepa-mandates`

Customers' SEPA mandates, which a SEPA direct debit draws on

MCP tool: `list-sepa-mandates`

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

`contactId` string

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

`status` "active" | "revoked"

### Response · 200

`data` object\[\] required

`object` "sepa\_mandate" required

`id` string required

`contactId` string required

`reference` string required

`signedOn` string required date

`scheme` string required

`recurrence` string required

`debtorIban` string required

`debtorBic` null | string required

`status` 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/sepa-mandates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Record a customer's signed SEPA mandate. The paper stays with the company, and the bank asks only for its identifier and date

POST `/v1/sepa-mandates`

Record a customer's signed SEPA mandate. The paper stays with the company, and the bank asks only for its identifier and date

MCP tool: `create-sepa-mandate`

### Request body

`contactId` string required

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

`reference` string required max 35 chars

Identifier of the mandate, as the customer signed it

`signedOn` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`scheme` "CORE" | "B2B"

CORE for consumers and anyone else, B2B between businesses. Default CORE

`recurrence` "recurring" | "one\_off"

`debtorIban` string required min 5 chars max 42 chars

IBAN without spaces.

`debtorBic` string

### Response · 201

`id` string required

`contactId` string required

`reference` string required

`signedOn` string required date

`scheme` string required

`recurrence` string required

`debtorIban` string required

`debtorBic` null | string required

`status` string required

`createdAt` string required date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/sepa-mandates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "reference": "string",
  "signedOn": "2026-10-30",
  "debtorIban": "string"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sepa-mandates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "reference": "string",
        "signedOn": "2026-10-30",
        "debtorIban": "string"
    },
)
data = response.json()
```

## Revoke a SEPA mandate with status revoked, which stops any order that has not left yet, or correct its BIC. Another account or other terms are a new mandate

PATCH `/v1/sepa-mandates/{id}`

Revoke a SEPA mandate with status revoked, which stops any order that has not left yet, or correct its BIC. Another account or other terms are a new mandate

MCP tool: `update-sepa-mandate`

### Path parameters

`id` string required

### Request body

`debtorBic` string | null

`status` "active" | "revoked"

### Response · 200

`id` string required

`contactId` string required

`reference` string required

`signedOn` string required date

`scheme` string required

`recurrence` string required

`debtorIban` string required

`debtorBic` null | string required

`status` string required

`createdAt` string required date-time

```bash
curl -X PATCH https://api.damedoklad.cz/v1/sepa-mandates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "debtorBic": "string",
  "status": "active"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sepa-mandates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "debtorBic": "string",
    "status": "active"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/sepa-mandates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "debtorBic": "string",
        "status": "active"
    },
)
data = response.json()
```

## Build a Czech QR payment string (SPAYD) from payment details

POST `/v1/spayd`

Build a Czech QR payment string (SPAYD) from payment details

MCP tool: `create-spayd`

### Request body

`iban` string required max 42 chars

IBAN without spaces.

`bic` string

`amountHaler` integer min 0 max 9007199254740991

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

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`variableSymbol` string

`specificSymbol` string

`constantSymbol` string

`recipientName` string max 200 chars

`message` string max 400 chars

`dueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`spayd` string required

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

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

```python
import os
import requests

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