# Prodej · API DameDokladu

> Operace ve skupině Prodej.

Source: https://damedoklad.cz/docs/api-reference/sales/

# Prodej

Operace ve skupině Prodej.

## List the open receivables and payables of one contact that can be set off against each other

GET `/v1/contacts/{id}/set-off-candidates`

List the open receivables and payables of one contact that can be set off against each other

Nástroj MCP: `list-set-off-candidates`

### Parametry v cestě

`id` string povinné

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "set\_off\_candidate" povinné

`kind` string povinné

`side` string povinné

`creditNote` boolean povinné

`documentId` null | string povinné

`number` null | string povinné

`issueDate` null | string povinné date

`dueDate` null | string povinné date

`currency` null | string povinné

`totalHaler` integer | null povinné

`openHaler` integer povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

```bash
curl https://api.damedoklad.cz/v1/contacts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/set-off-candidates \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

```python
import os
import requests

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

## Upload the .p12 cash register certificate from DIS+ as base64 with its password. It is stored encrypted and the private key never comes back

POST `/v1/eet/certificate`

Upload the .p12 cash register certificate from DIS+ as base64 with its password. It is stored encrypted and the private key never comes back. § 14 odst. 4: the taxpayer answers for handling the certificate so it cannot be misused. The password is used once to open the file and is not stored.

Nástroj MCP: `upload-eet-certificate`

### Tělo požadavku

`certificateBase64` string povinné min 16 chars max 64000 chars

File content encoded as base64.

`password` string povinné max 200 chars

### Odpověď · 201

`enabled` boolean povinné

`mode` string povinné

`liveAvailable` boolean povinné

`eic` null | string povinné

`suggestedEic` null | string povinné

`responseTimeoutSeconds` integer povinné

`certificate` null | object povinné

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

`units` object\[\] povinné

`object` "eet\_unit" povinné

`id` string povinné

`name` string povinné

`unitNumber` integer povinné

`isActive` boolean povinné

`numberLooksAssigned` boolean povinné

`indirectRepresentation` boolean

`devices` object\[\] povinné

`object` "eet\_device" povinné

`id` string povinné

`unitId` string povinné

`deviceCode` string povinné

`name` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`isActive` boolean povinné

`mandateId` null | string

`mandates` object\[\]

`object` "eet\_mandate" povinné

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

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

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

```python
import os
import requests

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

## Delete the stored cash register certificate and its private key. Refused while the company records sales in live mode

DELETE `/v1/eet/certificate`

Delete the stored cash register certificate and its private key. Refused while the company records sales in live mode

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `remove-eet-certificate`

### Odpověď · 200

`enabled` boolean povinné

`mode` string povinné

`liveAvailable` boolean povinné

`eic` null | string povinné

`suggestedEic` null | string povinné

`responseTimeoutSeconds` integer povinné

`certificate` null | object povinné

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

`units` object\[\] povinné

`object` "eet\_unit" povinné

`id` string povinné

`name` string povinné

`unitNumber` integer povinné

`isActive` boolean povinné

`numberLooksAssigned` boolean povinné

`indirectRepresentation` boolean

`devices` object\[\] povinné

`object` "eet\_device" povinné

`id` string povinné

`unitId` string povinné

`deviceCode` string povinné

`name` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`isActive` boolean povinné

`mandateId` null | string

`mandates` object\[\]

`object` "eet\_mandate" povinné

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

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

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

## Renew a cash register certificate now through CA EET. Refused unless the operator has turned automatic renewal on

POST `/v1/eet/certificate/renew`

Renew a cash register certificate now through CA EET. Refused unless the operator has turned automatic renewal on. The old certificate must still be valid. CA EET makes a new key and certificate, which replace the old ones here, encrypted. The sweep does this by itself from three weeks before the end.

Nástroj MCP: `renew-eet-certificate`

### Tělo požadavku

`mandateId` string | null

ID of the mandate.

### Odpověď · 200

`mandateId` null | string povinné

`automaticAvailable` boolean povinné

`hasCertificate` boolean povinné

`environment` null | string povinné

`daysLeft` integer | null povinné

`due` boolean povinné

`renewBeforeDays` integer povinné

`expired` boolean povinné

`last` null | object povinné

`object` "eet\_certificate\_renewal" povinné

`id` string povinné

`mandateId` null | string povinné

`environment` string povinné

`status` string povinné

`oldSerial` null | string povinné

`newSerial` null | string povinné

`attempts` integer povinné

`errorCode` null | string povinné

`errorMessage` null | string povinné

`startedBy` string povinné

`createdAt` string povinné date-time

`finishedAt` null | string povinné date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/certificate/renew \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "mandateId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

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

```python
import os
import requests

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

## Whether a cash register certificate is due for renewal, whether that can happen by itself, and how the last try ended

GET `/v1/eet/certificate/renewal`

Whether a cash register certificate is due for renewal, whether that can happen by itself, and how the last try ended. Automatic renewal is the CA EET API (caeetapi\_jwt.yml) and stays off until the operator sets EET\_CA\_RENEWAL\_ENABLED. Without it a new certificate is issued in DIS+ and uploaded.

Nástroj MCP: `get-eet-certificate-renewal`

### Parametry dotazu

`mandateId` string

ID of the mandate.

### Odpověď · 200

`mandateId` null | string povinné

`automaticAvailable` boolean povinné

`hasCertificate` boolean povinné

`environment` null | string povinné

`daysLeft` integer | null povinné

`due` boolean povinné

`renewBeforeDays` integer povinné

`expired` boolean povinné

`last` null | object povinné

`object` "eet\_certificate\_renewal" povinné

`id` string povinné

`mandateId` null | string povinné

`environment` string povinné

`status` string povinné

`oldSerial` null | string povinné

`newSerial` null | string povinné

`attempts` integer povinné

`errorCode` null | string povinné

`errorMessage` null | string povinné

`startedBy` string povinné

`createdAt` string povinné date-time

`finishedAt` null | string povinné date-time

```bash
curl https://api.damedoklad.cz/v1/eet/certificate/renewal \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Add a till device (pokladní zařízení) under a recording unit, optionally tied to one POS register or one cash register

POST `/v1/eet/devices`

Add a till device (pokladní zařízení) under a recording unit, optionally tied to one POS register or one cash register

Nástroj MCP: `create-eet-device`

### Tělo požadavku

`mandateId` string | null

ID of the mandate.

`unitId` string povinné

ID of the unit.

`deviceCode` string povinné

`name` string | null

`posRegisterId` string | null

ID of the pos register. Find it with list-pos-registers.

`cashRegisterId` string | null

ID of the cash register. Find it with list-cash-registers.

`isDefault` boolean

### Odpověď · 201

`id` string povinné

`unitId` string povinné

`deviceCode` string povinné

`name` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`isActive` boolean povinné

`mandateId` null | string

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/devices \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "unitId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "deviceCode": "string"
}'
```

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

```python
import os
import requests

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

## Change a till device. The default device cannot be switched off while the company records sales

PATCH `/v1/eet/devices/{id}`

Change a till device. The default device cannot be switched off while the company records sales

Nástroj MCP: `update-eet-device`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`unitId` string

ID of the unit.

`deviceCode` string

`name` string | null

`posRegisterId` string | null

ID of the pos register. Find it with list-pos-registers.

`cashRegisterId` string | null

ID of the cash register. Find it with list-cash-registers.

`mandateId` string | null

ID of the mandate.

`isDefault` boolean

`isActive` boolean

### Odpověď · 200

`id` string povinné

`unitId` string povinné

`deviceCode` string povinné

`name` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`isActive` boolean povinné

`mandateId` null | string

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

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

## Representations and authorisations for EET: for whom this company records sales

GET `/v1/eet/mandates`

Representations and authorisations for EET: for whom this company records sales

Nástroj MCP: `list-eet-mandates`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "eet\_mandate" povinné

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Add a representation or authorisation: direct (přímé zastoupení), indirect (nepřímé, § 9), authorised (pověření jedním, § 10) or authorised\_many (pověření více poplatníky)

POST `/v1/eet/mandates`

Add a representation or authorisation: direct (přímé zastoupení), indirect (nepřímé, § 9), authorised (pověření jedním, § 10) or authorised\_many (pověření více poplatníky). direct: the message is the principal's, with their EIČ and unit, signed with the certificate they gave you. indirect: your own message of the whole amount, with no principal in it. authorised: your EIČ, unit and certificate, with the principal in eic\_poverujiciho. authorised\_many: yours, with povereni\_vice\_popl; the principal's EIČ is optional and recommended when you are not one of the owners.

Nástroj MCP: `create-eet-mandate`

### Tělo požadavku

`kind` "direct" | "indirect" | "authorised" | "authorised\_many" povinné

`name` string povinné max 160 chars

`principalEic` string | null

`reference` string | null

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

`note` string | null

### Odpověď · 201

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

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

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

## Change a representation or authorisation. Sales already recorded keep what they said

PATCH `/v1/eet/mandates/{id}`

Change a representation or authorisation. Sales already recorded keep what they said

Nástroj MCP: `update-eet-mandate`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`name` string max 160 chars

`principalEic` string | null

`reference` string | null

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

`isActive` boolean

`note` string | null

### Odpověď · 200

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

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

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

```python
import os
import requests

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

## Remove a representation that nothing has used. One with recorded sales is switched off instead

DELETE `/v1/eet/mandates/{id}`

Remove a representation that nothing has used. One with recorded sales is switched off instead

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `delete-eet-mandate`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`deleted` boolean povinné

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

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

## Upload the .p12 the principal gave you for direct representation. It is stored encrypted and the private key never comes back

POST `/v1/eet/mandates/{id}/certificate`

Upload the .p12 the principal gave you for direct representation. It is stored encrypted and the private key never comes back. Only for direct representation (popis položek situace 2). Under indirect representation and authorisation you sign with your own certificate.

Nástroj MCP: `upload-eet-mandate-certificate`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`certificateBase64` string povinné min 16 chars max 64000 chars

File content encoded as base64.

`password` string povinné max 200 chars

### Odpověď · 201

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/mandates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/certificate \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "certificateBase64": "string",
  "password": "string"
}'
```

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

```python
import os
import requests

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

## Recorded sales with their send status. open=true lists only what still waits or failed

GET `/v1/eet/records`

Recorded sales with their send status. open=true lists only what still waits or failed

Nástroj MCP: `list-eet-records`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`status` "pending" | "sending" | "confirmed" | "rejected" | "needs\_setup" | "excluded"

`open` "true" | "false"

### Odpověď · 200

`data` object\[\] povinné

`object` "eet\_record" povinné

`id` string povinné

`sourceKind` string povinné

`sourceId` string povinné

`sourceEvent` string povinné

`documentNumber` null | string povinné

`mode` string povinné

`status` string povinné

`unitNumber` integer povinné

`deviceCode` string povinné

`sequenceNumber` string povinné

`soldAt` string povinné date-time

`soldOn` string povinné date

`timeAssumed` boolean povinné

`amountHaler` integer povinné

`prepaidLoadHaler` integer povinné

`prepaidUseHaler` integer povinné

`responseSignature` null | string povinné

`attempts` integer povinné

`lastAttemptAt` null | string povinné date-time

`nextAttemptAt` null | string povinné date-time

`deadlineAt` string povinné date-time

`overDeadline` boolean povinné

`confirmationCode` null | string povinné

`receivedAt` null | string povinné date-time

`isLate` boolean povinné

`warnings` object\[\] povinné

`code` integer | null povinné

`message` null | string povinné

`errorCode` null | string povinné

`errorMessage` null | string povinné

`transactionId` null | string povinné

`excludedReason` null | string povinné

`mandateId` null | string

`mandateKind` null | string

`forManyTaxpayers` boolean

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

```python
import os
import requests

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

## Take a sale that was never confirmed out of the queue, with a reason, because the law does not require recording it

POST `/v1/eet/records/{id}/exclude`

Take a sale that was never confirmed out of the queue, with a reason, because the law does not require recording it. For exceptions like a one-off income (§ 7) or a § 11 to § 13 exemption. The decision stays with the company; a confirmed sale is corrected by a negative one instead (§ 8).

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `exclude-eet-record`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`reason` string povinné min 3 chars max 300 chars

### Odpověď · 200

`id` string povinné

`sourceKind` string povinné

`sourceId` string povinné

`sourceEvent` string povinné

`documentNumber` null | string povinné

`mode` string povinné

`status` string povinné

`unitNumber` integer povinné

`deviceCode` string povinné

`sequenceNumber` string povinné

`soldAt` string povinné date-time

`soldOn` string povinné date

`timeAssumed` boolean povinné

`amountHaler` integer povinné

`prepaidLoadHaler` integer povinné

`prepaidUseHaler` integer povinné

`responseSignature` null | string povinné

`attempts` integer povinné

`lastAttemptAt` null | string povinné date-time

`nextAttemptAt` null | string povinné date-time

`deadlineAt` string povinné date-time

`overDeadline` boolean povinné

`confirmationCode` null | string povinné

`receivedAt` null | string povinné date-time

`isLate` boolean povinné

`warnings` object\[\] povinné

`code` integer | null povinné

`message` null | string povinné

`errorCode` null | string povinné

`errorMessage` null | string povinné

`transactionId` null | string povinné

`excludedReason` null | string povinné

`mandateId` null | string

`mandateKind` null | string

`forManyTaxpayers` boolean

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

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

```python
import os
import requests

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

## Send a recorded sale again now. Repeats the same data with a new message id, marked as not the first attempt

POST `/v1/eet/records/{id}/retry`

Send a recorded sale again now. Repeats the same data with a new message id, marked as not the first attempt

Nástroj MCP: `retry-eet-record`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`sourceKind` string povinné

`sourceId` string povinné

`sourceEvent` string povinné

`documentNumber` null | string povinné

`mode` string povinné

`status` string povinné

`unitNumber` integer povinné

`deviceCode` string povinné

`sequenceNumber` string povinné

`soldAt` string povinné date-time

`soldOn` string povinné date

`timeAssumed` boolean povinné

`amountHaler` integer povinné

`prepaidLoadHaler` integer povinné

`prepaidUseHaler` integer povinné

`responseSignature` null | string povinné

`attempts` integer povinné

`lastAttemptAt` null | string povinné date-time

`nextAttemptAt` null | string povinné date-time

`deadlineAt` string povinné date-time

`overDeadline` boolean povinné

`confirmationCode` null | string povinné

`receivedAt` null | string povinné date-time

`isLate` boolean povinné

`warnings` object\[\] povinné

`code` integer | null povinné

`message` null | string povinné

`errorCode` null | string povinné

`errorMessage` null | string povinné

`transactionId` null | string povinné

`excludedReason` null | string povinné

`mandateId` null | string

`mandateKind` null | string

`forManyTaxpayers` boolean

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/records/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/retry \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Put every waiting or refused sale back in the queue

POST `/v1/eet/records/retry`

Put every waiting or refused sale back in the queue

Nástroj MCP: `retry-eet-records`

### Odpověď · 200

`queued` integer povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/records/retry \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## EET 2.0 settings: on or off, mode, EIČ, recording units, till devices, and the certificate. The private key is never returned

GET `/v1/eet/settings`

EET 2.0 settings: on or off, mode, EIČ, recording units, till devices, and the certificate. The private key is never returned

Nástroj MCP: `get-eet-settings`

### Odpověď · 200

`enabled` boolean povinné

`mode` string povinné

`liveAvailable` boolean povinné

`eic` null | string povinné

`suggestedEic` null | string povinné

`responseTimeoutSeconds` integer povinné

`certificate` null | object povinné

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

`units` object\[\] povinné

`object` "eet\_unit" povinné

`id` string povinné

`name` string povinné

`unitNumber` integer povinné

`isActive` boolean povinné

`numberLooksAssigned` boolean povinné

`indirectRepresentation` boolean

`devices` object\[\] povinné

`object` "eet\_device" povinné

`id` string povinné

`unitId` string povinné

`deviceCode` string povinné

`name` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`isActive` boolean povinné

`mandateId` null | string

`mandates` object\[\]

`object` "eet\_mandate" povinné

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

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

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

## Turn EET 2.0 on or off, or change EIČ and the response limit. Live mode is refused unless the operator has enabled it

PATCH `/v1/eet/settings`

Turn EET 2.0 on or off, or change EIČ and the response limit. Live mode is refused unless the operator has enabled it. Turning it on needs a default device. Test mode sends to the official playground with the shared test certificate and fulfils no duty. § 19: the response limit is at least 2 seconds.

Nástroj MCP: `update-eet-settings`

### Tělo požadavku

`enabled` boolean

`mode` "test" | "live"

`eic` string | null

`responseTimeoutSeconds` integer min 2 max 60

### Odpověď · 200

`enabled` boolean povinné

`mode` string povinné

`liveAvailable` boolean povinné

`eic` null | string povinné

`suggestedEic` null | string povinné

`responseTimeoutSeconds` integer povinné

`certificate` null | object povinné

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

`units` object\[\] povinné

`object` "eet\_unit" povinné

`id` string povinné

`name` string povinné

`unitNumber` integer povinné

`isActive` boolean povinné

`numberLooksAssigned` boolean povinné

`indirectRepresentation` boolean

`devices` object\[\] povinné

`object` "eet\_device" povinné

`id` string povinné

`unitId` string povinné

`deviceCode` string povinné

`name` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`isActive` boolean povinné

`mandateId` null | string

`mandates` object\[\]

`object` "eet\_mandate" povinné

`id` string povinné

`kind` string povinné

`name` string povinné

`isActive` boolean povinné

`validFrom` string | null povinné

`validTo` null | string povinné date

`principalEic` null | string

`reference` null | string

`note` string | null

`certificate` null | object

`subject` null | string povinné

`serial` string povinné

`notBefore` string povinné date-time

`notAfter` string povinné date-time

`daysLeft` integer povinné

`environment` string povinné

```bash
curl -X PATCH https://api.damedoklad.cz/v1/eet/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": false,
  "mode": "test",
  "eic": "string"
}'
```

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

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/eet/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "enabled": False,
        "mode": "test",
        "eic": "string"
    },
)
data = response.json()
```

## Whether this company records sales under EET 2.0, how many records wait or failed, and the till devices whose representation or authorisation ends within 14 days or is no longer in force, where a sale must be confirmed as the company's own (eetOwnSale)

GET `/v1/eet/summary`

Whether this company records sales under EET 2.0, how many records wait or failed, and the till devices whose representation or authorisation ends within 14 days or is no longer in force, where a sale must be confirmed as the company's own (eetOwnSale)

Nástroj MCP: `get-eet-summary`

### Odpověď · 200

`enabled` boolean povinné

`mode` null | string povinné

`pending` integer povinné

`rejected` integer povinné

`needsSetup` integer povinné

`overDeadline` integer povinné

`mandateWarnings` object\[\]

`deviceId` string povinné

`deviceCode` null | string povinné

`posRegisterId` null | string povinné

`cashRegisterId` null | string povinné

`isDefault` boolean povinné

`mandateId` null | string povinné

`mandateName` string povinné

`validTo` null | string povinné

`daysLeft` integer | null povinné

`expired` boolean povinné

`registersWithDevice` string\[\]

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

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

```python
import os
import requests

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

## Send one verification message to the official EET playground. Records nothing and uses the shared test certificate

POST `/v1/eet/test-connection`

Send one verification message to the official EET playground. Records nothing and uses the shared test certificate

Nástroj MCP: `test-eet-connection`

### Odpověď · 200

`ok` boolean povinné

`code` null | string povinné

`message` null | string povinné

`warnings` any\[\] povinné

`elapsedMs` integer povinné

`transactionId` null | string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/test-connection \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Add a recording unit with the number DIS+ assigned to it (evidenční jednotka, § 3 and § 15)

POST `/v1/eet/units`

Add a recording unit with the number DIS+ assigned to it (evidenční jednotka, § 3 and § 15)

Nástroj MCP: `create-eet-unit`

### Tělo požadavku

`name` string povinné max 120 chars

`unitNumber` integer povinné min 1 max 999999999

`indirectRepresentation` boolean

### Odpověď · 201

`id` string povinné

`name` string povinné

`unitNumber` integer povinné

`isActive` boolean povinné

`numberLooksAssigned` boolean povinné

`indirectRepresentation` boolean

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

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

```python
import os
import requests

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

## Change a recording unit. Sales already recorded keep the number they had

PATCH `/v1/eet/units/{id}`

Change a recording unit. Sales already recorded keep the number they had

Nástroj MCP: `update-eet-unit`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`name` string max 120 chars

`unitNumber` integer min 1 max 999999999

`isActive` boolean

`indirectRepresentation` boolean

### Odpověď · 200

`id` string povinné

`name` string povinné

`unitNumber` integer povinné

`isActive` boolean povinné

`numberLooksAssigned` boolean povinné

`indirectRepresentation` boolean

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

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

```python
import os
import requests

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

## The register of vouchers and prepaid credit, with their balances. \`code\` finds one exactly, \`search\` by code or holder

GET `/v1/eet/vouchers`

The register of vouchers and prepaid credit, with their balances. \`code\` finds one exactly, \`search\` by code or holder

Nástroj MCP: `list-eet-vouchers`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`status` "active" | "used" | "void"

`kind` "limited\_network" | "specific\_goods"

`code` string max 40 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "eet\_voucher" povinné

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Add a voucher to the register: limited\_network for credit or a voucher for goods not yet named, specific\_goods for named goods or a service

POST `/v1/eet/vouchers`

Add a voucher to the register: limited\_network for credit or a voucher for goods not yet named, specific\_goods for named goods or a service. Popis položek kap. 1 bod 13 and Příklad 4. A limited\_network voucher is loaded by a sale with eetVoucherId and eetPrepaidLoadHaler, and spent with eetPrepaidUseHaler. A specific\_goods voucher is an ordinary sale when bought, and redeeming it records nothing. openingBalanceHaler is for what was sold before this register.

Nástroj MCP: `create-eet-voucher`

### Tělo požadavku

`code` string min 3 chars max 40 chars

`kind` "limited\_network" | "specific\_goods" povinné

`openingBalanceHaler` integer min 0 max 9007199254740991

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

`description` string | null

`holderName` string | null

`contactId` string | null

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

`validUntil` string | null

`note` string | null

### Odpověď · 201

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/vouchers \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "kind": "limited_network"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/eet/vouchers",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "limited_network"
    },
)
data = response.json()
```

## One voucher with all its movements

GET `/v1/eet/vouchers/{id}`

One voucher with all its movements

Nástroj MCP: `get-eet-voucher`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

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

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

## Change the holder, validity, description or note of a voucher. Its balance moves only with sales and adjustments

PATCH `/v1/eet/vouchers/{id}`

Change the holder, validity, description or note of a voucher. Its balance moves only with sales and adjustments

Nástroj MCP: `update-eet-voucher`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`description` string | null

`holderName` string | null

`contactId` string | null

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

`validUntil` string | null

`note` string | null

### Odpověď · 200

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/eet/vouchers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "description": "Pečivo, říjen",
    "holderName": "Pekárna U Lípy s.r.o.",
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Correct a voucher balance by hand, with a reason. Moves no money and records nothing in EET

POST `/v1/eet/vouchers/{id}/adjust`

Correct a voucher balance by hand, with a reason. Moves no money and records nothing in EET

Nástroj MCP: `adjust-eet-voucher`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`amountHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`reason` string povinné min 3 chars max 300 chars

### Odpověď · 200

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/vouchers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/adjust \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "amountHaler": 1210000,
  "reason": "string"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/eet/vouchers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/adjust",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "amountHaler": 1210000,
        "reason": "string"
    },
)
data = response.json()
```

## Mark a voucher for named goods as redeemed. No payment happens, so nothing is recorded in EET (popis položek, Příklad 4)

POST `/v1/eet/vouchers/{id}/redeem`

Mark a voucher for named goods as redeemed. No payment happens, so nothing is recorded in EET (popis položek, Příklad 4)

Nástroj MCP: `redeem-eet-voucher`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`note` string | null

### Odpověď · 200

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/eet/vouchers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/redeem \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30",
  "note": "string"
}'
```

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

```python
import os
import requests

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

## Cancel a voucher, with a reason. What is left on it stops being spendable. Any money back is a separate return

POST `/v1/eet/vouchers/{id}/void`

Cancel a voucher, with a reason. What is left on it stops being spendable. Any money back is a separate return

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `void-eet-voucher`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`reason` string povinné min 3 chars max 300 chars

### Odpověď · 200

`id` string povinné

`code` string povinné

`kind` string povinné

`status` string povinné

`balanceHaler` integer povinné

`valueHaler` integer povinné

`description` null | string povinné

`holderName` null | string povinné

`contactId` string | null povinné

`validUntil` null | string povinné date

`expired` boolean povinné

`note` string | null povinné

`voidReason` null | string povinné

`createdAt` string povinné date-time

`movements` object\[\]

`object` "eet\_voucher\_movement" povinné

`id` string povinné

`kind` string povinné

`amountHaler` integer povinné

`balanceAfterHaler` integer povinné

`sourceKind` null | string povinné

`sourceId` null | string povinné

`documentNumber` null | string povinné

`occurredOn` string povinné date

`note` null | string povinné

`createdAt` string povinné date-time

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

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

```python
import os
import requests

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

## Sign a short statement that this dashboard origin may pair with a local bridge. The bridge checks it against the Origin of the request and still asks for the code it shows

POST `/v1/pos/bridge/grants`

Sign a short statement that this dashboard origin may pair with a local bridge. The bridge checks it against the Origin of the request and still asks for the code it shows

Nástroj MCP: `create-pos-bridge-grant`

### Tělo požadavku

`origin` string povinné max 200 chars uri

### Odpověď · 200

`grant` string povinné

`expiresAt` string povinné date-time

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

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

```python
import os
import requests

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

## The public key the local bridge checks a pairing grant with, for its install command

GET `/v1/pos/bridge/key`

The public key the local bridge checks a pairing grant with, for its install command

Nástroj MCP: `get-pos-bridge-key`

### Odpověď · 200

`algorithm` string povinné

`publicKey` string povinné

```bash
curl https://api.damedoklad.cz/v1/pos/bridge/key \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## A day closure as an 80 mm slip

GET `/v1/pos/closures/{id}/pdf`

A day closure as an 80 mm slip

Nástroj MCP: `get-pos-closure-pdf`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

Vrací soubor application/pdf.

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

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

## Documents from a till without a connection that the server refused, and notices about what changed meanwhile. open=true lists what waits for a person

GET `/v1/pos/offline-conflicts`

Documents from a till without a connection that the server refused, and notices about what changed meanwhile. open=true lists what waits for a person

Nástroj MCP: `list-pos-offline-conflicts`

### Parametry dotazu

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

`open` "true" | "false"

### Odpověď · 200

`data` object\[\] povinné

`object` "pos\_offline\_conflict" povinné

`id` string povinné

`clientId` string povinné

`documentKind` string povinné

`severity` string povinné

`offlineNumber` null | string povinné

`happenedAt` string povinné date-time

`totalHaler` integer | null povinné

`code` null | string povinné

`message` string povinné

`details` object povinné

`items` object\[\]

`name` null | string povinné

`itemId` null | string povinné

`soldHaler` integer povinné

`currentHaler` integer povinné

`deviceCode` string | null povinné

`status` string povinné

`resolvedNote` null | string povinné

`resolvedAt` null | string povinné date-time

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

```bash
curl https://api.damedoklad.cz/v1/pos/offline-conflicts \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## A till says the server refused a document it holds. Reporting the same one again updates it, so everyone can see what waits. The document itself stays on the device

POST `/v1/pos/offline-conflicts`

A till says the server refused a document it holds. Reporting the same one again updates it, so everyone can see what waits. The document itself stays on the device

Nástroj MCP: `report-pos-offline-conflict`

### Tělo požadavku

`clientId` string povinné min 8 chars max 64 chars

ID of the client.

`documentKind` "sale" | "return" | "invoice" | "order" | "closure" povinné

`severity` "refused" | "notice"

`offlineNumber` string | null

`happenedAt` string povinné date-time

`totalHaler` integer | null

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

`code` string | null

`message` string povinné max 600 chars

`details` object

`deviceCode` string | null

### Odpověď · 201

`id` string povinné

`clientId` string povinné

`documentKind` string povinné

`severity` string povinné

`offlineNumber` null | string povinné

`happenedAt` string povinné date-time

`totalHaler` integer | null povinné

`code` null | string povinné

`message` string povinné

`details` object povinné

`items` object\[\]

`name` null | string povinné

`itemId` null | string povinné

`soldHaler` integer povinné

`currentHaler` integer povinné

`deviceCode` string | null povinné

`status` string povinné

`resolvedNote` null | string povinné

`resolvedAt` null | string povinné date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/pos/offline-conflicts \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "clientId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "documentKind": "sale",
  "happenedAt": "2026-10-30",
  "message": "string"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/pos/offline-conflicts', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "clientId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "documentKind": "sale",
    "happenedAt": "2026-10-30",
    "message": "string"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/pos/offline-conflicts",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "clientId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "documentKind": "sale",
        "happenedAt": "2026-10-30",
        "message": "string"
    },
)
data = response.json()
```

## Close a conflict: acknowledged for a notice, discarded when a person decided the document will not be sent, with a note

POST `/v1/pos/offline-conflicts/{id}/resolve`

Close a conflict: acknowledged for a notice, discarded when a person decided the document will not be sent, with a note. Discarding here closes the report. If the sale really happened, the money and goods have still moved, so whoever discards should say why. A document sent successfully closes its own conflict.

Nástroj MCP: `resolve-pos-offline-conflict`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`status` "sent" | "discarded" | "acknowledged" povinné

`note` string | null

### Odpověď · 200

`id` string povinné

`clientId` string povinné

`documentKind` string povinné

`severity` string povinné

`offlineNumber` null | string povinné

`happenedAt` string povinné date-time

`totalHaler` integer | null povinné

`code` null | string povinné

`message` string povinné

`details` object povinné

`items` object\[\]

`name` null | string povinné

`itemId` null | string povinné

`soldHaler` integer povinné

`currentHaler` integer povinné

`deviceCode` string | null povinné

`status` string povinné

`resolvedNote` null | string povinné

`resolvedAt` null | string povinné date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/pos/offline-conflicts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/resolve \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "sent"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/pos/offline-conflicts/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/resolve",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "status": "sent"
    },
)
data = response.json()
```

## What a till keeps on its device to work without a connection: customers, price lists, serial numbers in stock, kits, the last 30 days of receipts, and where each drawer stands

GET `/v1/pos/offline-pack`

What a till keeps on its device to work without a connection: customers, price lists, serial numbers in stock, kits, the last 30 days of receipts, and where each drawer stands. A contact with restricted processing is left out. The lists are capped, and truncated says so. The dashboard clears all of it at logout.

Nástroj MCP: `get-pos-offline-pack`

### Odpověď · 200

`savedAt` string povinné date-time

`customers` object\[\] povinné

`id` string povinné

`name` null | string povinné

`ico` null | string povinné

`dic` string | null povinné

`usualDueDays` integer | null povinné

`preferredPaymentMethod` string | null povinné

`address` string | null povinné

`groupIds` any\[\] povinné

`truncated` boolean povinné

`priceLists` object\[\] povinné

`id` string povinné

`name` null | string povinné

`isDefault` boolean povinné

`discountBp` integer povinné

`validFrom` string | null povinné

`validTo` string | null povinné

`prices` object\[\] povinné

`itemId` null | string povinné

`priceHaler` integer povinné

`minQtyMilli` integer povinné

`rules` object\[\] povinné

`contactId` null | string povinné

`contactGroupId` string | null povinné

`discountBp` integer povinné

`serials` object\[\] povinné

`itemId` null | string povinné

`code` null | string povinné

`warehouseId` null | string povinné

`kits` object povinné

`vouchers` any\[\] povinné

`receipts` object\[\] povinné

`id` string povinné

`clientSaleId` null | string povinné

`number` null | string povinné

`externalNumber` null | string povinné

`soldAt` null | string povinné date-time

`registerId` null | string povinné

`paymentMethod` string povinné

`totalHaler` integer | null povinné

`contactName` string | null povinné

`lines` object\[\] povinné

`position` integer | null povinné

`description` null | string povinné

`quantity` integer povinné

`returnedQuantity` integer povinné

`unit` null | string povinné

`unitPriceHaler` integer | null povinné

`vatRate` integer povinné

`itemId` string | null povinné

`serials` any\[\] povinné

`closures` object povinné

`denominationsHaler` integer\[\] povinné

`today` string povinné date

```bash
curl https://api.damedoklad.cz/v1/pos/offline-pack \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## A sales receipt sized for an 80 mm thermal printer

GET `/v1/pos/receipts/{id}/pdf`

A sales receipt sized for an 80 mm thermal printer

Nástroj MCP: `get-pos-receipt-pdf`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

Vrací soubor application/pdf.

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

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

## List the cash registers of the till. A company with none gets its first one here

GET `/v1/pos/registers`

List the cash registers of the till. A company with none gets its first one here

Nástroj MCP: `list-pos-registers`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "pos\_register" povinné

`id` string povinné

`name` string povinné

`code` string povinné

`warehouseId` null | string povinné

`openingFloatHaler` integer povinné

`isActive` boolean povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Add a cash register, with its own warehouse, quick keys, and day closures

POST `/v1/pos/registers`

Add a cash register, with its own warehouse, quick keys, and day closures

Nástroj MCP: `create-pos-register`

### Tělo požadavku

`name` string povinné max 120 chars

`code` string povinné max 16 chars

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`openingFloatHaler` integer min 0 max 9007199254740991

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

`isActive` boolean

### Odpověď · 201

`id` string povinné

`name` string povinné

`code` string povinné

`warehouseId` null | string povinné

`openingFloatHaler` integer povinné

`isActive` boolean povinné

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

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

```python
import os
import requests

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

## Change a cash register. The starting float only applies until its first closure

PATCH `/v1/pos/registers/{id}`

Change a cash register. The starting float only applies until its first closure

Nástroj MCP: `update-pos-register`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`name` string max 120 chars

`code` string max 16 chars

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`openingFloatHaler` integer min 0 max 9007199254740991

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

`isActive` boolean

### Odpověď · 200

`id` string povinné

`name` string povinné

`code` string povinné

`warehouseId` null | string povinné

`openingFloatHaler` integer povinné

`isActive` boolean povinné

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

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

```python
import os
import requests

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

## What the drawer should hold now: opening float, cash in and out since the last closure, card total

GET `/v1/pos/registers/{id}/closure-preview`

What the drawer should hold now: opening float, cash in and out since the last closure, card total

Nástroj MCP: `get-pos-closure-preview`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`registerId` null | string povinné

`openingCashHaler` integer povinné

`cashSalesHaler` integer povinné

`cashReturnsHaler` integer povinné

`cardTotalHaler` integer povinné

`expectedCashHaler` integer povinné

`receiptCount` integer povinné

`denominationsHaler` integer\[\] povinné

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

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

```python
import os
import requests

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

## Past day closures of a cash register

GET `/v1/pos/registers/{id}/closures`

Past day closures of a cash register

Nástroj MCP: `list-pos-closures`

### Parametry v cestě

`id` string povinné

### Parametry dotazu

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

### Odpověď · 200

`data` object\[\] povinné

`object` "pos\_closure" povinné

`id` string povinné

`registerId` string povinné

`number` string povinné

`date` string povinné date

`openingCashHaler` integer povinné

`cashSalesHaler` integer povinné

`cashReturnsHaler` integer povinné

`cardTotalHaler` integer povinné

`receiptCount` integer povinné

`expectedCashHaler` integer povinné

`countedCashHaler` integer povinné

`differenceHaler` integer povinné

`withdrawnHaler` integer povinné

`closingFloatHaler` integer povinné

`denominations` object\[\] povinné

`valueHaler` integer | null povinné

`count` integer povinné

`note` string | null povinné

`offlineNumber` null | string

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Close the till for the day: count the cash, post any difference, and start the next day from what stays in the drawer

POST `/v1/pos/registers/{id}/closures`

Close the till for the day: count the cash, post any difference, and start the next day from what stays in the drawer. Schodek posts MD 569 / D 211, přebytek MD 211 / D 668, cash taken out MD 261 / D 211. In daňová evidence the difference goes to the peněžní deník; a shortage is not deductible (§ 25 odst. 1 písm. n) ZDP). Send expectedCashHaler from the preview to be stopped if a sale happened since.

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `create-pos-closure`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`countedCashHaler` integer min 0 max 9007199254740991

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

`denominations` object\[\]

`valueHaler` integer povinné max 9007199254740991

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

`count` integer povinné min 0 max 9007199254740991

`withdrawnHaler` integer min 0 max 9007199254740991

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

`expectedCashHaler` integer min -9007199254740991 max 9007199254740991

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

`note` string | null

`clientClosureId` string min 8 chars max 64 chars

ID of the client closure.

`offline` object

`soldAt` string povinné date-time

`number` string povinné max 40 chars

`listPrices` object\[\]

`itemId` string povinné

ID of the item. Find it with list-items.

`priceHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`quantity` number povinné

### Odpověď · 201

`id` string povinné

`registerId` string povinné

`number` string povinné

`date` string povinné date

`openingCashHaler` integer povinné

`cashSalesHaler` integer povinné

`cashReturnsHaler` integer povinné

`cardTotalHaler` integer povinné

`receiptCount` integer povinné

`expectedCashHaler` integer povinné

`countedCashHaler` integer povinné

`differenceHaler` integer povinné

`withdrawnHaler` integer povinné

`closingFloatHaler` integer povinné

`denominations` object\[\] povinné

`valueHaler` integer | null povinné

`count` integer povinné

`note` string | null povinné

`offlineNumber` null | string

```bash
curl -X POST https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closures \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "date": "2026-10-30",
  "countedCashHaler": 1210000,
  "denominations": [
    {
      "valueHaler": 1210000,
      "count": 0
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closures', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "date": "2026-10-30",
    "countedCashHaler": 1210000,
    "denominations": [
      {
        "valueHaler": 1210000,
        "count": 0
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/closures",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30",
        "countedCashHaler": 1210000,
        "denominations": [
            {
                "valueHaler": 1210000,
                "count": 0
            }
        ]
    },
)
data = response.json()
```

## What the local bridge should drive for this till: printer, customer display, scale and payment terminal. Nothing here reaches a device by itself

GET `/v1/pos/registers/{id}/hardware`

What the local bridge should drive for this till: printer, customer display, scale and payment terminal. Nothing here reaches a device by itself

Nástroj MCP: `get-pos-hardware`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`registerId` string povinné

`devices` object povinné

`printer` object

`protocol` string povinné

`connection` object povinné

`host` null | string povinné

`port` integer | null povinné

`type` string povinné

`terminal` object

`protocol` string povinné

`connection` object povinné

`host` null | string povinné

`port` integer | null povinné

`type` string povinné

`currencyCode` string povinné

`updatedAt` null | string povinné date-time

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

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

## Save the hardware profile of a till. Only open protocols: ESC/POS, CD5220, MT-SICS, NCI and ZVT. None has met a real device

PUT `/v1/pos/registers/{id}/hardware`

Save the hardware profile of a till. Only open protocols: ESC/POS, CD5220, MT-SICS, NCI and ZVT. None has met a real device

Nástroj MCP: `put-pos-hardware`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`printer` object | null

`protocol` "escpos" povinné

`connection` object povinné

`type` "tcp" povinné

`host` string povinné max 120 chars

`port` integer povinné min 1 max 65535

`tls` boolean

`enabled` boolean

`columns` integer min 20 max 64

`diacritics` boolean

`drawer` boolean

`display` object | null

`protocol` "cd5220" | "escpos" povinné

`connection` object povinné

`type` "tcp" povinné

`host` string povinné max 120 chars

`port` integer povinné min 1 max 65535

`tls` boolean

`enabled` boolean

`columns` integer min 10 max 40

`scale` object | null

`protocol` "mt-sics" | "nci" povinné

`connection` object povinné

`type` "tcp" povinné

`host` string povinné max 120 chars

`port` integer povinné min 1 max 65535

`tls` boolean

`enabled` boolean

`terminal` object | null

`protocol` "zvt" | "gpe" | "comgate" | "dotypay" povinné

`connection` object povinné

`type` "tcp" povinné

`host` string povinné max 120 chars

`port` integer povinné min 1 max 65535

`tls` boolean

`enabled` boolean

`currencyCode` string

`timeoutSeconds` integer min 10 max 300

`ecrId` string | ""

ID of the ecr.

`poiId` string max 40 chars

ID of the poi.

`saleId` string max 40 chars

ID of the sale.

### Odpověď · 200

`registerId` string povinné

`devices` object povinné

`printer` object

`protocol` string povinné

`connection` object povinné

`host` null | string povinné

`port` integer | null povinné

`type` string povinné

`terminal` object

`protocol` string povinné

`connection` object povinné

`host` null | string povinné

`port` integer | null povinné

`type` string povinné

`currencyCode` string povinné

`updatedAt` null | string povinné date-time

```bash
curl -X PUT https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/hardware \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "printer": {
    "protocol": "escpos",
    "connection": {
      "type": "tcp",
      "host": "string",
      "port": 1
    }
  },
  "display": {
    "protocol": "cd5220",
    "connection": {
      "type": "tcp",
      "host": "string",
      "port": 1
    }
  },
  "scale": {
    "protocol": "mt-sics",
    "connection": {
      "type": "tcp",
      "host": "string",
      "port": 1
    }
  }
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/hardware', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "printer": {
      "protocol": "escpos",
      "connection": {
        "type": "tcp",
        "host": "string",
        "port": 1
      }
    },
    "display": {
      "protocol": "cd5220",
      "connection": {
        "type": "tcp",
        "host": "string",
        "port": 1
      }
    },
    "scale": {
      "protocol": "mt-sics",
      "connection": {
        "type": "tcp",
        "host": "string",
        "port": 1
      }
    }
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/hardware",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "printer": {
            "protocol": "escpos",
            "connection": {
                "type": "tcp",
                "host": "string",
                "port": 1
            }
        },
        "display": {
            "protocol": "cd5220",
            "connection": {
                "type": "tcp",
                "host": "string",
                "port": 1
            }
        },
        "scale": {
            "protocol": "mt-sics",
            "connection": {
                "type": "tcp",
                "host": "string",
                "port": 1
            }
        }
    },
)
data = response.json()
```

## The favourite items on the quick keys of a cash register

GET `/v1/pos/registers/{id}/quick-keys`

The favourite items on the quick keys of a cash register

Nástroj MCP: `get-pos-quick-keys`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`registerId` string povinné

`data` object\[\] povinné

`object` "item" povinné

`id` string povinné

`sku` string povinné

`name` string povinné

`ean` null | string povinné

`groupId` null | string povinné

`unit` string povinné

`vatRate` integer povinné

`type` string povinné

`tracking` string povinné

`tracksExpiry` boolean povinné

`valuation` string povinné

`purchasePriceHaler` integer povinné

`salePriceHaler` integer povinné

`supplierId` null | string povinné

`minStock` null | number povinné

`maxStock` integer | null povinné

`allowNegative` boolean | null povinné

`isActive` boolean povinné

`note` string | null povinné

`weightKg` null | number povinné

`gpsrId` null | string povinné

`recyclingFeeId` null | string povinné

`recyclingCoefficient` null | number povinné

`customFields` object povinné

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string povinné

`attributes` object povinné

`Barva` string

`Velikost` string

`isKit` boolean povinné

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

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

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

## Set the favourite items on the quick keys of a cash register, in order

PUT `/v1/pos/registers/{id}/quick-keys`

Set the favourite items on the quick keys of a cash register, in order

Nástroj MCP: `put-pos-quick-keys`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`itemIds` string\[\] povinné

### Odpověď · 200

`registerId` string povinné

`data` object\[\] povinné

`object` "item" povinné

`id` string povinné

`sku` string povinné

`name` string povinné

`ean` null | string povinné

`groupId` null | string povinné

`unit` string povinné

`vatRate` integer povinné

`type` string povinné

`tracking` string povinné

`tracksExpiry` boolean povinné

`valuation` string povinné

`purchasePriceHaler` integer povinné

`salePriceHaler` integer povinné

`supplierId` null | string povinné

`minStock` null | number povinné

`maxStock` integer | null povinné

`allowNegative` boolean | null povinné

`isActive` boolean povinné

`note` string | null povinné

`weightKg` null | number povinné

`gpsrId` null | string povinné

`recyclingFeeId` null | string povinné

`recyclingCoefficient` null | number povinné

`customFields` object povinné

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string povinné

`attributes` object povinné

`Barva` string

`Velikost` string

`isKit` boolean povinné

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

```bash
curl -X PUT https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/quick-keys \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "itemIds": [
    "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  ]
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/pos/registers/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/quick-keys",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "itemIds": [
            "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        ]
    },
)
data = response.json()
```

## Numbers missing from a till device's own series (OFF-XXXX-NNNNNN) a day after a later number arrived: documents that may be on a lost or broken device. Enter such a sale afterwards from the receipt copy with POST /sales/pos-sales and offline.number set to the missing number

GET `/v1/pos/series-gaps`

Numbers missing from a till device's own series (OFF-XXXX-NNNNNN) a day after a later number arrived: documents that may be on a lost or broken device. Enter such a sale afterwards from the receipt copy with POST /sales/pos-sales and offline.number set to the missing number

Nástroj MCP: `list-pos-series-gaps`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "pos\_series\_gap" povinné

`deviceCode` null | string povinné

`count` integer povinné

`firstMissing` string povinné

`lastMissing` string povinné

`missing` string\[\] povinné

`after` null | object povinné

`number` null | string povinné

`soldAt` null | string povinné date-time

`before` null | object povinné

`number` null | string povinné

`soldAt` null | string povinné date-time

`arrivedAt` string povinné date-time

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

```bash
curl https://api.damedoklad.cz/v1/pos/series-gaps \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Pay back all or part of a received advance. Whatever part was taxed gets a corrective tax document (§ 42 ZDPH); books and cash book are posted

POST `/v1/proformas/{id}/refund`

Pay back all or part of a received advance. Whatever part was taxed gets a corrective tax document (§ 42 ZDPH); books and cash book are posted. amountHaler defaults to everything paid. Refused once the advance has been settled into an invoice: correct that invoice with a credit note.

Nástroj MCP: `refund-proforma`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`amountHaler` integer max 9007199254740991

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

`refundedOn` string povinné YYYY-MM-DD

Date as YYYY-MM-DD.

`method` "transfer" | "cash" | "card" | "other"

`reason` string povinné max 240 chars

`note` string | null

`registerId` string

ID of the register.

`bankAccountId` string

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

`moneyAmountHaler` integer max 9007199254740991

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

`allowNegative` boolean

### Odpověď · 201

`id` string povinné

`number` null | string povinné

`variableSymbol` null | string povinné

`kind` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`totalHaler` integer povinné

`paidHaler` integer povinné

`status` string povinné

`overdue` boolean povinné

`fileId` null | string povinné

`customFields` object

`vatMode` string

`exchangeRate` integer

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`seriesId` null | string

`currency` string

`ourAccountNumber` null | string

`ourBankCode` null | string

`ourIban` null | string

`paymentMethod` string

`language` string

`notePublic` string | null

`noteInternal` string | null

`netHaler` integer

`vatHaler` integer

`contactIco` null | string

`contactDic` null | string

`contactVatPayerType` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`shipToName` string | null

`shipToStreet` string | null

`shipToCity` string | null

`shipToPostalCode` string | null

`shipToCountry` string | null

`contactEmail` null | string

`sellerName` null | string

`lines` object\[\]

`object` "proforma\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` string | null povinné

`lineKind` string povinné

`sourceId` string | null povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`lots` any\[\] povinné

`orderLineId` null | string povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`vatLines` object\[\]

`object` "invoice\_vat\_line" povinné

`id` string povinné

`vatRate` number povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`payments` object\[\]

`object` "proforma\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`taxDocuments` object\[\]

`object` "advance\_tax\_document" povinné

`id` string povinné

`number` null | string povinné

`status` string povinné

`issueDate` null | string povinné date

`netHaler` integer povinné

`vatHaler` integer | null povinné

`totalHaler` integer | null povinné

`invoiceId` null | string povinné

`posting` object

`regime` string povinné

`event` string povinné

`skipped` boolean

`journalLines` object\[\]

`account` null | string povinné

`side` string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`balanced` boolean

`cashJournal` object\[\]

`account` null | string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`receivablesBook` any\[\]

`payablesBook` any\[\]

`asset` any\[\]

`carrierId` string | null

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

`refund` object

`amountHaler` integer | null povinné

`paymentId` null | string povinné

`correctionId` null | string povinné

`correctionNumber` null | string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/proformas/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/refund \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "refundedOn": "2026-10-30",
  "reason": "string"
}'
```

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

```python
import os
import requests

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

## List retentions (pozastávky) on issued and received invoices, with what is still open and when it falls due

GET `/v1/retentions`

List retentions (pozastávky) on issued and received invoices, with what is still open and when it falls due

Nástroj MCP: `list-document-retentions`

### Parametry dotazu

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

`kind` "invoice" | "received\_invoice"

`documentId` string

ID of the document.

`contactId` string

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

`status` "open" | "paid" | "cancelled"

### Odpověď · 200

`data` object\[\] povinné

`object` "document\_retention" povinné

`id` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`currency` null | string povinné

`mode` string povinné

`percent` integer | null povinné

`base` string povinné

`amountHaler` integer povinné

`openHaler` integer povinné

`dueDate` string povinné date

`note` null | string povinné

`longTerm` boolean povinné

`status` string povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Hold back part of an invoice as a retention, by percent or amount, with its own later due date. VAT and revenue stay whole

POST `/v1/retentions`

Hold back part of an invoice as a retention, by percent or amount, with its own later due date. VAT and revenue stay whole. Set it before issuing to have it printed. A PDF already issued is a tax document and is not rewritten: getRetentionNotice prints a notice for it, and e-mailing the invoice adds that notice. The payment QR code asks only for what is due. Several tranches are allowed.

Nástroj MCP: `create-document-retention`

### Tělo požadavku

`kind` "invoice" | "received\_invoice" povinné

`documentId` string povinné

ID of the document.

`mode` "percent" | "amount" povinné

`percent` number max 100

Retained percent, with mode percent.

`base` "total" | "net"

What the percent is of: the document total (default) or the amount without VAT.

`amountHaler` integer max 9007199254740991

Retained amount in the document currency, with mode amount.

`dueDate` string povinné YYYY-MM-DD

When the retained part falls due. Later than the due date of the document.

`note` string | null

### Odpověď · 201

`id` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`currency` null | string povinné

`mode` string povinné

`percent` integer | null povinné

`base` string povinné

`amountHaler` integer povinné

`openHaler` integer povinné

`dueDate` string povinné date

`note` null | string povinné

`longTerm` boolean povinné

`status` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/retentions \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "invoice",
  "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "mode": "percent",
  "dueDate": "2026-10-30"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/retentions",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "kind": "invoice",
        "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "mode": "percent",
        "dueDate": "2026-10-30"
    },
)
data = response.json()
```

## Change a retention: its amount, due date, or note. A long-term one must be moved back before its amount changes

PATCH `/v1/retentions/{id}`

Change a retention: its amount, due date, or note. A long-term one must be moved back before its amount changes

Nástroj MCP: `update-document-retention`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`mode` "percent" | "amount"

`percent` number max 100

Retained percent, with mode percent.

`base` "total" | "net"

What the percent is of: the document total (default) or the amount without VAT.

`amountHaler` integer max 9007199254740991

Retained amount in the document currency, with mode amount.

`dueDate` string YYYY-MM-DD

When the retained part falls due. Later than the due date of the document.

`note` string | null

### Odpověď · 200

`id` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`currency` null | string povinné

`mode` string povinné

`percent` integer | null povinné

`base` string povinné

`amountHaler` integer povinné

`openHaler` integer povinné

`dueDate` string povinné date

`note` null | string povinné

`longTerm` boolean povinné

`status` string povinné

```bash
curl -X PATCH https://api.damedoklad.cz/v1/retentions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "mode": "percent",
  "percent": 1,
  "base": "total"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/retentions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "mode": "percent",
    "percent": 1,
    "base": "total"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/retentions/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "mode": "percent",
        "percent": 1,
        "base": "total"
    },
)
data = response.json()
```

## Cancel a retention, so the whole amount falls due with the document. A long-term one moves back with today as its date

DELETE `/v1/retentions/{id}`

Cancel a retention, so the whole amount falls due with the document. A long-term one moves back with today as its date

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `delete-document-retention`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`deleted` boolean povinné

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

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

## Move a retention to the long-term analytic account (311900 or 321900) with one correcting entry, or back

POST `/v1/retentions/{id}/classify`

Move a retention to the long-term analytic account (311900 or 321900) with one correcting entry, or back. Long-term means due more than one year after the balance sheet date (vyhláška 500/2002 Sb. § 10, § 17). Double-entry books only. In a foreign currency it moves at the carrying value of the document.

Nástroj MCP: `classify-document-retention`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`longTerm` boolean povinné

true moves the retained amount to the long-term analytic account; false moves it back.

`date` string povinné YYYY-MM-DD

The date of the correcting entry, usually the balance sheet date.

### Odpověď · 200

`id` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`currency` null | string povinné

`mode` string povinné

`percent` integer | null povinné

`base` string povinné

`amountHaler` integer povinné

`openHaler` integer povinné

`dueDate` string povinné date

`note` null | string povinné

`longTerm` boolean povinné

`status` string povinné

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

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

```python
import os
import requests

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

## Print a retention notice for a document already issued, with the payment due without the retention. The issued PDF itself stays as it is

GET `/v1/retentions/notice`

Print a retention notice for a document already issued, with the payment due without the retention. The issued PDF itself stays as it is

Nástroj MCP: `get-retention-notice`

### Parametry dotazu

`kind` "invoice" | "received\_invoice" povinné

`documentId` string povinné

ID of the document.

`language` "cs" | "en" | "de" | "fr"

Language of the notice. Without it, the language of the document, then the company default.

### Odpověď · 200

Vrací soubor application/pdf.

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

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

## Sort every open retention by a balance sheet date: what falls due over a year later moves to long-term, and what no longer does moves back. dryRun only says what would move

POST `/v1/retentions/reclassify`

Sort every open retention by a balance sheet date: what falls due over a year later moves to long-term, and what no longer does moves back. dryRun only says what would move. Long-term means due more than one year after the balance sheet date (vyhláška 500/2002 Sb. § 10, § 17). Double-entry books only. After a period ends this runs by itself, once. A tranche already part paid stays where it is and is named as part\_paid.

Nástroj MCP: `reclassify-retentions`

### Tělo požadavku

`date` string povinné YYYY-MM-DD

The balance sheet date.

`dryRun` boolean

Say what would move and post nothing.

### Odpověď · 200

`date` string povinné date

`dryRun` boolean povinné

`moved` integer povinné

`data` object\[\] povinné

`id` string povinné

`kind` string povinné

`documentId` null | string povinné

`documentNumber` null | string povinné

`contactName` null | string povinné

`currency` null | string povinné

`amountHaler` integer | null povinné

`dueDate` null | string povinné date

`longTerm` boolean povinné

`move` string povinné

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

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

```python
import os
import requests

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

## Which analytic accounts hold long-term retentions

GET `/v1/retentions/settings`

Which analytic accounts hold long-term retentions

Nástroj MCP: `get-retention-settings`

### Odpověď · 200

`receivableAccount` string povinné

`payableAccount` string povinné

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

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

## Choose the analytic accounts for long-term retentions, under 311 and 321. A tranche already moved stays where it is. An accountant should choose these

PUT `/v1/retentions/settings`

Choose the analytic accounts for long-term retentions, under 311 and 321. A tranche already moved stays where it is. An accountant should choose these

Nástroj MCP: `update-retention-settings`

### Tělo požadavku

`receivableAccount` string | null

Where a long-term retention on an issued invoice goes. Default 311900.

`payableAccount` string | null

Where a long-term retention on a received invoice goes. Default 321900.

### Odpověď · 200

`receivableAccount` string povinné

`payableAccount` string povinné

```bash
curl -X PUT https://api.damedoklad.cz/v1/retentions/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "receivableAccount": "string",
  "payableAccount": "string"
}'
```

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

```python
import os
import requests

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

## List the cost centers, activities, projects, posting templates, and accounts a document can use

GET `/v1/sales/accounting-options`

List the cost centers, activities, projects, posting templates, and accounts a document can use

Nástroj MCP: `get-sales-accounting-options`

### Odpověď · 200

`centers` object\[\] povinné

`id` string povinné

`kind` string povinné

`code` null | string povinné

`name` null | string povinné

`activities` any\[\] povinné

`projects` object\[\] povinné

`id` string povinné

`kind` string povinné

`code` null | string povinné

`name` null | string povinné

`templates` object\[\] povinné

`id` string povinné

`code` null | string povinné

`name` null | string povinné

`documentType` null | string povinné

`debitAccount` string povinné

`creditAccount` null | string povinné

`accounts` object\[\] povinné

`number` null | string povinné

`name` null | string povinné

`nameEn` null | string povinné

`type` string povinné

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

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

## List the e-mails sent for a document

GET `/v1/sales/doc/{kind}/{id}/emails`

List the e-mails sent for a document

Nástroj MCP: `list-sales-document-emails`

### Parametry v cestě

`kind` string povinné

`id` string povinné

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "sales\_email" povinné

`id` string povinné

`documentKind` null | string povinné

`documentId` null | string povinné

`to` string povinné

`subject` null | string povinné

`status` string povinné

`error` null | string povinné

`attachments` string\[\] povinné

`sentAt` null | string date-time

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Export an issued document as ISDOC 6.0.2 XML

GET `/v1/sales/doc/{kind}/{id}/isdoc`

Export an issued document as ISDOC 6.0.2 XML

Nástroj MCP: `export-sales-document-isdoc`

### Parametry v cestě

`kind` string povinné

`id` string povinné

### Odpověď · 200

Vrací soubor application/xml.

```bash
curl https://api.damedoklad.cz/v1/sales/doc/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/isdoc \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

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

## Download the PDF of any issued sales document

GET `/v1/sales/doc/{kind}/{id}/pdf`

Download the PDF of any issued sales document

Nástroj MCP: `download-sales-document-pdf`

### Parametry v cestě

`kind` string povinné

`id` string povinné

### Odpověď · 200

Vrací soubor application/pdf.

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

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

## Get or create the no-login public link to an issued document, with its payment QR code

POST `/v1/sales/doc/{kind}/{id}/public-link`

Get or create the no-login public link to an issued document, with its payment QR code

Nástroj MCP: `get-sales-public-link`

### Parametry v cestě

`kind` string povinné

`id` string povinné

### Odpověď · 200

`id` string

`documentKind` string

`documentId` string povinné

`url` string

`viewCount` integer

`lastViewedAt` string | null

`revokedAt` string | null

`createdAt` string date-time

`revoked` boolean

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/doc/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/public-link \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Revoke the public link to a document; anyone holding it loses access

DELETE `/v1/sales/doc/{kind}/{id}/public-link`

Revoke the public link to a document; anyone holding it loses access

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `revoke-sales-public-link`

### Parametry v cestě

`kind` string povinné

`id` string povinné

### Odpověď · 200

`id` string

`documentKind` string

`documentId` string povinné

`url` string

`viewCount` integer

`lastViewedAt` string | null

`revokedAt` string | null

`createdAt` string date-time

`revoked` boolean

```bash
curl -X DELETE https://api.damedoklad.cz/v1/sales/doc/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/public-link \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## E-mail an issued document to the customer with its PDF and ISDOC attached and a public payment link

POST `/v1/sales/doc/{kind}/{id}/send`

E-mail an issued document to the customer with its PDF and ISDOC attached and a public payment link. Defaults to the contact e-mail and the workspace template for the document type. The attempt is kept in the sent history.

Nástroj MCP: `send-sales-document`

### Parametry v cestě

`kind` string povinné

`id` string povinné

### Tělo požadavku

`to` string email

Date as YYYY-MM-DD.

`subject` string max 300 chars

`body` string max 10000 chars

`attachPdf` boolean

`attachIsdoc` boolean

### Odpověď · 200

`id` string povinné

`documentKind` null | string povinné

`documentId` null | string povinné

`to` string povinné

`subject` null | string povinné

`status` string povinné

`error` null | string povinné

`attachments` string\[\] povinné

`sentAt` null | string date-time

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/doc/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/send \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "2026-10-30",
  "subject": "string",
  "body": "string"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/doc/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/send",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "to": "2026-10-30",
        "subject": "string",
        "body": "string"
    },
)
data = response.json()
```

## List quotes, RFQs, orders, sales receipts, debit notes, other receivables or payables, by kind

GET `/v1/sales/documents`

List quotes, RFQs, orders, sales receipts, debit notes, other receivables or payables, by kind

Nástroj MCP: `list-sales-documents`

### Parametry dotazu

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

`kind` "quote" | "rfq" | "order\_received" | "order\_issued" | "pos\_receipt" | "debit\_note" | "other\_receivable" | "other\_payable" | "advance\_tax\_document" povinné

`status` string max 32 chars

`contactId` string

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

`customFieldKey` string

Only records with this custom field. Alone: it has any value. With customFieldValue: exactly that value, ignoring case.

`customFieldValue` string max 2000 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "sales\_document" povinné

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Create a quote, RFQ, order, sales receipt, debit note, other receivable or payable; set issue to number it now

POST `/v1/sales/documents`

Create a quote, RFQ, order, sales receipt, debit note, other receivable or payable; set issue to number it now

Nástroj MCP: `create-sales-document`

### Tělo požadavku

`kind` "quote" | "rfq" | "order\_received" | "order\_issued" | "pos\_receipt" | "debit\_note" | "other\_receivable" | "other\_payable" povinné

`issue` boolean

`clientSaleId` string min 8 chars max 64 chars

ID of the client sale.

`offline` object

`soldAt` string povinné date-time

`number` string povinné max 40 chars

`listPrices` object\[\]

`itemId` string povinné

ID of the item. Find it with list-items.

`priceHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`quantity` number povinné

`carrierId` string | null

Who carries the goods. Issuing a received order prepares its shipment.

`contactId` string

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

`contactName` string max 160 chars

`contactIco` string max 16 chars

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

`contactDic` string max 16 chars

VAT number (DIČ), for example CZ12345678.

`seriesId` string

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

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`taxPointDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`dueDate` string | null

Date as YYYY-MM-DD.

`validUntil` string | null

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`exchangeRate` number

`vatMode` "eu\_registration" | "eu\_sme" | "group\_internal" | "margin\_used\_goods" | "margin\_art" | "margin\_collectibles" | "margin\_travel" | "domestic" | "reverse\_charge" | "eu\_goods" | "eu\_services" | "third\_country\_goods" | "third\_country\_services" | "oss" | "eu\_triangular" | "eu\_new\_vehicle" | "exempt" | "none"

`templateId` string | null

ID of the template.

`centerId` string | null

ID of the center.

`activityId` string | null

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

`projectId` string | null

ID of the project.

`paymentMethod` "transfer" | "cash" | "card" | "cod" | "proforma"

`roundingMode` "auto" | "crown" | "none"

`pricesIncludeVat` boolean

`language` "cs" | "en" | "sk" | "de" | "fr" | "pl"

`notePublic` string | null

`noteInternal` string | null

`reason` string | null

`externalNumber` string | null

`originalKind` "invoice" | "received\_invoice"

`originalId` string

ID of the original.

`lines` object\[\] povinné

`purchaseHaler` integer min 0 max 9007199254740991

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

`exemptPercent` number min 0 max 100

`purchaseLineId` string | null

ID of the purchase line.

`description` string max 240 chars

`quantity` number povinné

`unit` string max 16 chars

`unitPriceHaler` integer min -9007199254740991 max 9007199254740991

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

`vatRate` number min 0 max 30

`itemId` string | null

ID of the item. Find it with list-items.

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`accountNumber` string | null

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

`lots` object\[\]

`itemId` string

ID of the item. Find it with list-items.

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`recyclingFeeId` string | null

A fee from the list. null means no fee on this line, whatever the item says

`recyclingPerUnitHaler` integer min 0 max 9007199254740991

The amount per fee unit: with recyclingFeeId it replaces the rate of the fee on this line, without it the line carries a typed fee

`recyclingText` string max 120 chars

`recyclingUnit` "ks" | "kg"

The unit of a typed fee

`recyclingCoefficient` number min 0 max 1000000

How many times the fee applies to one unit of the line

### Odpověď · 201

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "kind": "quote",
  "lines": [
    {
      "quantity": 1
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/documents', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "kind": "quote",
    "lines": [
      {
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/documents",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "kind": "quote",
        "lines": [
            {
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Get a sales document with lines, payments, fulfilment, and links

GET `/v1/sales/documents/{id}`

Get a sales document with lines, payments, fulfilment, and links

Nástroj MCP: `get-sales-document`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

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

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

## Edit a draft; after issue only notes and dates can change

PATCH `/v1/sales/documents/{id}`

Edit a draft; after issue only notes and dates can change

Nástroj MCP: `update-sales-document`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`carrierId` string | null

Who carries the goods. Issuing a received order prepares its shipment.

`contactId` string

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

`contactName` string max 160 chars

`contactIco` string max 16 chars

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

`contactDic` string max 16 chars

VAT number (DIČ), for example CZ12345678.

`seriesId` string

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

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`taxPointDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`dueDate` string | null

Date as YYYY-MM-DD.

`validUntil` string | null

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`exchangeRate` number

`vatMode` "eu\_registration" | "eu\_sme" | "group\_internal" | "margin\_used\_goods" | "margin\_art" | "margin\_collectibles" | "margin\_travel" | "domestic" | "reverse\_charge" | "eu\_goods" | "eu\_services" | "third\_country\_goods" | "third\_country\_services" | "oss" | "eu\_triangular" | "eu\_new\_vehicle" | "exempt" | "none"

`templateId` string | null

ID of the template.

`centerId` string | null

ID of the center.

`activityId` string | null

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

`projectId` string | null

ID of the project.

`paymentMethod` "transfer" | "cash" | "card" | "cod" | "proforma"

`roundingMode` "auto" | "crown" | "none"

`pricesIncludeVat` boolean

`language` "cs" | "en" | "sk" | "de" | "fr" | "pl"

`notePublic` string | null

`noteInternal` string | null

`reason` string | null

`externalNumber` string | null

`originalKind` "invoice" | "received\_invoice"

`originalId` string

ID of the original.

`lines` object\[\]

`purchaseHaler` integer min 0 max 9007199254740991

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

`exemptPercent` number min 0 max 100

`purchaseLineId` string | null

ID of the purchase line.

`description` string max 240 chars

`quantity` number povinné

`unit` string max 16 chars

`unitPriceHaler` integer min -9007199254740991 max 9007199254740991

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

`vatRate` number min 0 max 30

`itemId` string | null

ID of the item. Find it with list-items.

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`accountNumber` string | null

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

`lots` object\[\]

`itemId` string

ID of the item. Find it with list-items.

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`recyclingFeeId` string | null

A fee from the list. null means no fee on this line, whatever the item says

`recyclingPerUnitHaler` integer min 0 max 9007199254740991

The amount per fee unit: with recyclingFeeId it replaces the rate of the fee on this line, without it the line carries a typed fee

`recyclingText` string max 120 chars

`recyclingUnit` "ks" | "kg"

The unit of a typed fee

`recyclingCoefficient` number min 0 max 1000000

How many times the fee applies to one unit of the line

### Odpověď · 200

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X PATCH https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "carrierId": "gcr_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "contactName": "Pekárna U Lípy s.r.o."
}'
```

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

## Delete a draft sales document

DELETE `/v1/sales/documents/{id}`

Delete a draft sales document

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `delete-sales-document-draft`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`deleted` boolean povinné

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

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

## Cancel a quote, RFQ, or order and release any stock reservation

POST `/v1/sales/documents/{id}/cancel`

Cancel a quote, RFQ, or order and release any stock reservation

Nástroj MCP: `cancel-sales-document`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

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

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

## Turn a document into the next one: quote to order or invoice, RFQ to order, order to invoice, delivery note, or receipt

POST `/v1/sales/documents/{id}/convert`

Turn a document into the next one: quote to order or invoice, RFQ to order, order to invoice, delivery note, or receipt. Pass lines with quantities for a partial conversion; otherwise everything still open is taken. Orders track what is delivered and invoiced.

Nástroj MCP: `convert-sales-document`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`target` "order\_received" | "order\_issued" | "invoice" | "proforma" | "delivery\_note" | "received\_invoice" | "receipt" povinné

`issue` boolean

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`taxPointDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`supplierDocumentNumber` string max 64 chars

`lines` object\[\]

`lineId` string povinné

ID of the line.

`quantity` number povinné

`warehouseId` string

ID of the warehouse. Find it with list-warehouses.

`lots` object\[\]

`itemId` string

ID of the item. Find it with list-items.

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`warehouseId` string

ID of the warehouse. Find it with list-warehouses.

`exchangeRate` number

`landedCosts` object\[\]

`label` string povinné max 120 chars

`amountHaler` integer povinné min 0 max 9007199254740991

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

`method` "value" | "weight"

### Odpověď · 201

`target` string povinné

`created` object povinné

`customFields` object

`vatMode` string

`exchangeRate` integer | null

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`object` "delivery\_note" | "invoice" | "proforma" | "received\_invoice" | "sales\_document" | "stock\_document" povinné

`id` null | string povinné

`number` null | string

`variableSymbol` null | string

`contactId` null | string

`contactName` null | string

`issueDate` null | string date

`dueDate` string | null

`currency` null | string

`totalHaler` integer | null

`paidHaler` integer

`status` string

`overdue` boolean

`fileId` null | string

`seriesId` null | string

`constantSymbol` string | null

`taxPointDate` null | string date

`paymentMethod` string

`language` null | string

`notePublic` string | null

`noteInternal` string | null

`ourAccountNumber` null | string

`ourBankCode` null | string

`ourIban` null | string

`sellerName` null | string

`sellerIco` null | string

`sellerDic` null | string

`reminderOnDue` boolean

`reminderWeekAfter` boolean

`reminder14DaysAfter` boolean

`reminderMonthAfter` boolean

`netHaler` integer

`vatHaler` integer | null

`roundingHaler` integer

`recurringId` string | null

`stornoOfId` string | null

`contactIco` null | string

`contactDic` null | string

`contactVatPayerType` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`shipToName` string | null

`shipToStreet` string | null

`shipToCity` string | null

`shipToPostalCode` string | null

`shipToCountry` string | null

`contactEmail` null | string

`lines` object\[\]

`object` "delivery\_note\_line" | "invoice\_line" | "proforma\_line" | "received\_invoice\_line" | "sales\_document\_line" povinné

`id` string povinné

`description` null | string povinné

`quantity` integer povinné

`unit` null | string povinné

`unitPriceHaler` integer | null povinné

`vatRate` integer

`netHaler` integer

`vatHaler` integer | null

`totalHaler` integer | null

`accountNumber` string | null

`lineKind` string

`sourceId` string | null

`itemId` null | string povinné

`warehouseId` null | string povinné

`lots` any\[\] povinné

`orderLineId` null | string povinné

`fulfilledQuantity` integer

`invoicedQuantity` integer

`reservedQuantity` integer

`returnedQuantity` integer

`originalLineId` string | null

`recycling` null | object

`text` string povinné

`unit` null | string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer | null povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`vatLines` object\[\]

`object` "invoice\_vat\_line" | "received\_invoice\_vat\_line" povinné

`id` string povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer | null povinné

`payments` any\[\]

`links` any\[\]

`posting` object

`regime` string povinné

`event` string povinné

`journalLines` object\[\]

`account` null | string povinné

`side` string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`balanced` boolean

`cashJournal` any\[\]

`receivablesBook` object\[\]

`documentId` null | string povinné

`amountHaler` integer | null povinné

`status` string povinné

`payablesBook` any\[\]

`asset` any\[\]

`skipped` boolean

`retentions` any\[\]

`totalValueHaler` integer

`deliveryDate` string date

`kind` string

`taxDocuments` any\[\]

`supplierDocumentNumber` null | string

`receivedOn` string | null

`theirAccountNumber` string | null

`theirBankCode` string | null

`theirIban` string | null

`duplicateOfId` string | null

`settlements` any\[\]

`supplierAdvances` any\[\]

`validUntil` string | null

`reservationStatus` string

`externalNumber` string | null

`reason` string | null

`sourceKind` null | string

`sourceId` null | string

`originalKind` string | null

`originalId` string | null

`originalNumber` string | null

`consumedById` string | null

`receivedHaler` integer | null

`registerId` string | null

`closureId` string | null

`changeHaler` any

Null in every recorded response.

`carrierId` null | string

`source` object povinné

`object` "sales\_document" povinné

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/convert \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "target": "order_received"
}'
```

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

```python
import os
import requests

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

## Number a draft and post it to the books; a sales order also requests stock reservation

POST `/v1/sales/documents/{id}/issue`

Number a draft and post it to the books; a sales order also requests stock reservation. An other receivable or debit note over the contact credit limit is refused with credit\_limit\_exceeded; an owner or accountant can repeat it with overrideCreditLimit.

Nástroj MCP: `issue-sales-document`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`overrideReservations` boolean

`overrideDeliveryNotes` boolean

`deliveryNoteIds` string\[\]

`overrideCreditLimit` boolean

Issue although the customer goes over Kredit max. Owner or accountant only, after the user has seen the warning.

### Odpověď · 200

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/issue \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "overrideReservations": false,
  "overrideDeliveryNotes": false,
  "deliveryNoteIds": [
    "dln_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  ]
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/issue",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "overrideReservations": False,
        "overrideDeliveryNotes": False,
        "deliveryNoteIds": [
            "dln_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        ]
    },
)
data = response.json()
```

## Record a payment of a debit note, other receivable, or other payable. Cash goes through a cash document of a register, a transfer through a bank account, and a later statement line takes it over

POST `/v1/sales/documents/{id}/payments`

Record a payment of a debit note, other receivable, or other payable. Cash goes through a cash document of a register, a transfer through a bank account, and a later statement line takes it over

Nástroj MCP: `add-sales-document-payment`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`amountHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`paidOn` string povinné YYYY-MM-DD

Date as YYYY-MM-DD.

`method` "transfer" | "cash" | "card" | "other"

`inPerson` boolean

`paidAt` string date-time

`note` string | null

`registerId` string

ID of the register.

`bankAccountId` string

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

`allowNegative` boolean

### Odpověď · 201

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

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

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

```python
import os
import requests

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

## Take goods back on a sales receipt, all or part: a negative receipt, money back, stock back at the cost it left with

POST `/v1/sales/documents/{id}/pos-return`

Take goods back on a sales receipt, all or part: a negative receipt, money back, stock back at the cost it left with. A serial-tracked line needs the serial numbers coming back unless the whole line returns.

Nástroj MCP: `create-pos-return`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`paymentMethod` "cash" | "card"

`reason` string | null

`clientSaleId` string min 8 chars max 64 chars

ID of the client sale.

`offline` object

`soldAt` string povinné date-time

`number` string povinné max 40 chars

`listPrices` object\[\]

`itemId` string povinné

ID of the item. Find it with list-items.

`priceHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`quantity` number povinné

`backToVoucher` boolean

`lines` object\[\] povinné

`lineId` string povinné

ID of the line.

`quantity` number povinné

`serialNumbers` string\[\]

### Odpověď · 201

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pos-return \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "lines": [
    {
      "lineId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "quantity": 1
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pos-return', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "lines": [
      {
        "lineId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/pos-return",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "lines": [
            {
                "lineId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Mark an issued quote as accepted or rejected

POST `/v1/sales/documents/{id}/status`

Mark an issued quote as accepted or rejected

Nástroj MCP: `set-sales-quote-status`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`status` "accepted" | "rejected" povinné

### Odpověď · 200

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

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

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

```python
import os
import requests

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

## Reverse a posted sales document with a storno document

POST `/v1/sales/documents/{id}/storno`

Reverse a posted sales document with a storno document

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `storno-sales-document`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

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

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

## List e-mail and reminder templates per document type and language

GET `/v1/sales/email-templates`

List e-mail and reminder templates per document type and language

Nástroj MCP: `list-sales-email-templates`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Odpověď · 200

`data` object\[\] povinné

`object` "sales\_email\_template" povinné

`type` string povinné

`language` string povinné

`subject` string povinné

`body` string povinné

`customized` boolean povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

```python
import os
import requests

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

## Replace an e-mail or reminder template

PUT `/v1/sales/email-templates/{type}/{language}`

Replace an e-mail or reminder template. Placeholders: {{number}}, {{companyName}}, {{contactName}}, {{amount}}, {{dueDate}}, {{variableSymbol}}, {{link}}; reminders also {{outstanding}}, {{interest}}, {{daysOverdue}}, {{newDueDate}}.

Nástroj MCP: `put-sales-email-template`

### Parametry v cestě

`type` string povinné

`language` string povinné

### Tělo požadavku

`subject` string povinné max 300 chars

`body` string povinné max 10000 chars

### Odpověď · 200

`type` string povinné

`language` string povinné

`subject` string povinné

`body` string povinné

`customized` boolean povinné

```bash
curl -X PUT https://api.damedoklad.cz/v1/sales/email-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "subject": "string",
  "body": "string"
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/sales/email-templates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "subject": "string",
        "body": "string"
    },
)
data = response.json()
```

## Go back to the default template

DELETE `/v1/sales/email-templates/{type}/{language}`

Go back to the default template

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `reset-sales-email-template`

### Parametry v cestě

`type` string povinné

`language` string povinné

### Odpověď · 200

`type` string povinné

`language` string povinné

`subject` string povinné

`body` string povinné

`customized` boolean povinné

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

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

## Import an ISDOC file as a received invoice draft and match or create the supplier contact

POST `/v1/sales/import-isdoc`

Import an ISDOC file as a received invoice draft and match or create the supplier contact

Nástroj MCP: `import-received-invoice-isdoc`

### Tělo požadavku

`fileBase64` string

File content encoded as base64.

`xml` string

`confirmDuplicate` boolean

### Odpověď · 201

`id` string povinné

`number` null | string povinné

`supplierDocumentNumber` null | string povinné

`variableSymbol` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`status` string povinné

`overdue` boolean povinné

`fileId` null | string povinné

`customFields` object

`vatMode` string

`exchangeRate` integer

`templateId` null | string

`centerId` string | null

`activityId` string | null

`projectId` null | string

`seriesId` null | string

`constantSymbol` string | null

`receivedOn` null | string date

`taxPointDate` string date

`paymentMethod` string

`theirAccountNumber` null | string

`theirBankCode` null | string

`theirIban` null | string

`notePublic` string | null

`noteInternal` null | string

`netHaler` integer

`vatHaler` integer

`stornoOfId` null | string

`duplicateOfId` null | string

`contactIco` null | string

`contactDic` null | string

`contactVatPayerType` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`shipToName` string | null

`shipToStreet` string | null

`shipToCity` string | null

`shipToPostalCode` string | null

`shipToCountry` string | null

`contactEmail` null | string

`lines` object\[\]

`object` "received\_invoice\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`lineKind` string povinné

`sourceId` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` null | string povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` null | string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`typed` boolean

`vatLines` object\[\]

`object` "received\_invoice\_vat\_line" povinné

`id` string povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`settlements` object\[\]

`object` "received\_invoice\_settlement" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`supplierAdvances` object\[\]

`id` string povinné

`number` null | string povinné

`supplierDocumentNumber` null | string povinné

`posting` object

`regime` string povinné

`event` string povinné

`journalLines` object\[\]

`account` null | string povinné

`side` string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`balanced` boolean

`cashJournal` object\[\]

`account` null | string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`receivablesBook` any\[\]

`payablesBook` object\[\]

`documentId` null | string povinné

`amountHaler` integer | null povinné

`status` string povinné

`asset` any\[\]

`retentions` any\[\]

`duplicate` object

`existingId` string povinné

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

`cashDocument` object

`id` string povinné

`number` null | string povinné

`warnings` any\[\] povinné

`imported` object

`uuid` string povinné

`documentType` integer | null povinné

`warnings` string\[\] povinné

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

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

```python
import os
import requests

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

## Import a supplier's zálohová faktura in ISDOC as a draft advance (a tax document for a payment, DocumentType 5, goes to its advance instead) and match or create the supplier contact. Nothing posts

POST `/v1/sales/import-isdoc-advance`

Import a supplier's zálohová faktura in ISDOC as a draft advance (a tax document for a payment, DocumentType 5, goes to its advance instead) and match or create the supplier contact. Nothing posts

Nástroj MCP: `import-supplier-advance-isdoc`

### Tělo požadavku

`fileBase64` string

File content encoded as base64.

`xml` string

`confirmDuplicate` boolean

### Odpověď · 201

`id` string povinné

`number` null | string povinné

`supplierDocumentNumber` null | string povinné

`variableSymbol` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`status` string povinné

`overdue` boolean povinné

`customFields` object

`stavba_zalohy` string

`vatMode` string

`exchangeRate` integer

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`seriesId` null | string

`constantSymbol` string | null

`paymentMethod` string

`theirAccountNumber` null | string

`theirBankCode` null | string

`theirIban` string | null

`notePublic` string | null

`noteInternal` null | string

`netHaler` integer

`vatHaler` integer

`taxedHaler` integer

`advanceAccount` string

`selfAssessable` boolean

`receivedInvoiceId` null | string

`contactIco` null | string

`contactDic` null | string

`contactVatPayerType` null | string

`billToStreet` string | null

`billToCity` string | null

`billToPostalCode` string | null

`billToCountry` null | string

`shipToName` string | null

`shipToStreet` string | null

`shipToCity` string | null

`shipToPostalCode` string | null

`shipToCountry` string | null

`contactEmail` null | string

`lines` object\[\]

`object` "supplier\_advance\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` string | null povinné

`lineKind` string povinné

`sourceId` string | null povinné

`itemId` string | null povinné

`warehouseId` string | null povinné

`lots` any\[\] povinné

`orderLineId` string | null povinné

`vatLines` object\[\]

`object` "supplier\_advance\_vat\_line" povinné

`id` string povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`payments` object\[\]

`object` "supplier\_advance\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`exchangeRate` number povinné

`taxDocuments` object\[\]

`object` "supplier\_advance\_tax\_document" povinné

`id` string povinné

`supplierAdvanceId` string povinné

`number` null | string povinné

`supplierDocumentNumber` null | string povinné

`contactName` null | string povinné

`contactDic` null | string povinné

`status` string povinné

`issueDate` string povinné date

`taxPointDate` string povinné date

`receivedOn` null | string povinné date

`currency` string povinné

`exchangeRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`reason` null | string povinné

`correctsNumber` null | string povinné

`selfAssessed` boolean povinné

`paymentId` null | string povinné

`receivedInvoiceId` null | string povinné

`stornoOfId` null | string povinné

`lines` object\[\] povinné

`object` "supplier\_advance\_tax\_document\_line" povinné

`id` string povinné

`description` string povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`taxRecordsKind` string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

`refund` object

`amountHaler` integer | null povinné

`paymentId` null | string povinné

`correctionId` null | string povinné

`correctionNumber` null | string povinné

`stornoCorrection` object

`reason` null | string povinné

`date` string povinné date

`period` string povinné

`additionalReturn` boolean povinné

`followUpStatement` boolean povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/import-isdoc-advance \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "fileBase64": "string",
  "xml": "string",
  "confirmDuplicate": false
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/import-isdoc-advance",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "fileBase64": "string",
        "xml": "string",
        "confirmDuplicate": False
    },
)
data = response.json()
```

## Create an invoice for the late-payment interest on an overdue invoice, optionally with the 1 200 Kč recovery cost

POST `/v1/sales/invoices/{id}/penalty-invoice`

Create an invoice for the late-payment interest on an overdue invoice, optionally with the 1 200 Kč recovery cost

Nástroj MCP: `create-penalty-invoice`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`toDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`ratePercent` number min 0 max 100

`includeRecoveryCost` boolean

`issue` boolean

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`dueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Odpověď · 201

`id` string povinné

`number` null | string povinné

`variableSymbol` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`status` string povinné

`overdue` boolean povinné

`fileId` null | string povinné

`customFields` object

`zakazka_zakaznika` string

`pocet` integer

`kampan` string

`vatMode` string

`exchangeRate` number

`templateId` null | string

`centerId` null | string

`activityId` null | string

`projectId` null | string

`seriesId` null | string

`constantSymbol` null | string

`taxPointDate` string date

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`ourAccountNumber` null | string

`ourBankCode` null | string

`ourIban` null | string

`sellerName` null | string

`sellerIco` null | string

`sellerDic` null | string

`reminderOnDue` boolean

`reminderWeekAfter` boolean

`reminder14DaysAfter` boolean

`reminderMonthAfter` boolean

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`recurringId` null | string

`stornoOfId` null | string

`contactIco` null | string

`contactDic` null | string

`contactVatPayerType` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`shipToName` string | null

`shipToStreet` null | string

`shipToCity` null | string

`shipToPostalCode` null | string

`shipToCountry` null | string

`contactEmail` null | string

`lines` object\[\]

`object` "invoice\_line" povinné

`id` string povinné

`description` string povinné

`quantity` number povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` number povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`lineKind` string povinné

`sourceId` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`lots` object\[\] povinné

`itemId` null | string

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` null | string povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` null | string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`typed` boolean

`vatLines` object\[\]

`object` "invoice\_vat\_line" povinné

`id` string povinné

`vatRate` number povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`payments` object\[\]

`object` "invoice\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`posting` object

`regime` string povinné

`event` string povinné

`journalLines` object\[\]

`account` null | string povinné

`side` string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`balanced` boolean

`cashJournal` object\[\]

`account` null | string povinné

`amountHaler` integer | null povinné

`documentId` null | string povinné

`receivablesBook` object\[\]

`documentId` null | string povinné

`amountHaler` integer | null povinné

`status` string povinné

`payablesBook` any\[\]

`asset` any\[\]

`retentions` object\[\]

`id` string povinné

`amountHaler` integer | null povinné

`dueDate` null | string povinné date

`note` string | null povinné

`longTerm` boolean povinné

`carrierId` null | string

`creditWarning` object

`level` string povinné

`exposureHaler` integer povinné

`afterHaler` integer povinné

`warnHaler` integer | null povinné

`blockHaler` integer povinné

`availableHaler` integer povinné

`original` any

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

`cashDocument` object

`id` string povinné

`number` null | string povinné

`warnings` any\[\] povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/penalty-invoice \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "toDate": "2026-10-30",
  "ratePercent": 0,
  "includeRecoveryCost": false
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/penalty-invoice', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "toDate": "2026-10-30",
    "ratePercent": 0,
    "includeRecoveryCost": false
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/penalty-invoice",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "toDate": "2026-10-30",
        "ratePercent": 0,
        "includeRecoveryCost": False
    },
)
data = response.json()
```

## Vytvoření: upomínka, faktura

POST `/v1/sales/invoices/{id}/reminders`

Create a payment reminder for an overdue invoice, with a PDF, and optionally e-mail it

Nástroj MCP: `create-invoice-reminder`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`level` integer min 1 max 3

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`newDueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`ratePercent` number min 0 max 100

`send` boolean

`to` string email

Date as YYYY-MM-DD.

### Odpověď · 201

`id` string povinné

`invoiceId` string povinné

`invoiceNumber` string povinné

`contactName` null | string povinné

`currency` null | string povinné

`level` integer povinné

`number` null | string povinné

`issueDate` string povinné date

`newDueDate` null | string povinné date

`daysOverdue` integer povinné

`outstandingHaler` integer povinné

`interestHaler` integer povinné

`ratePercent` null | number povinné

`subject` string povinné

`body` string povinné

`sentAt` null | string povinné date-time

`fileId` null | string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reminders \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "level": 1,
  "issueDate": "2026-10-30",
  "newDueDate": "2026-10-30"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reminders",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "level": 1,
        "issueDate": "2026-10-30",
        "newDueDate": "2026-10-30"
    },
)
data = response.json()
```

## Calculate Czech statutory late-payment interest (ČNB repo rate on the first day of the half-year + 8 points)

GET `/v1/sales/late-interest`

Calculate Czech statutory late-payment interest (ČNB repo rate on the first day of the half-year + 8 points). Pass ratePercent for a contractual rate, or when the half-year is not in the verified repo table.

Nástroj MCP: `calculate-late-interest`

### Parametry dotazu

`amountHaler` integer povinné min 0 max 9007199254740991

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

`dueDate` string povinné YYYY-MM-DD

Date as YYYY-MM-DD.

`toDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`ratePercent` number min 0 max 100

### Odpověď · 200

`known` boolean povinné

`delayStart` string povinné date

`ratePercent` null | number povinné

`statutory` null | object povinné

`repoRate` number povinné

`decidingDate` string povinné date

`ratePercent` null | number povinné

`days` integer povinné

`interestHaler` integer povinné

`periods` object\[\] povinné

`from` string povinné date

`to` string povinné date

`days` integer povinné

`principalHaler` integer povinné

`interestHaler` integer povinné

`outstandingHaler` integer

`recoveryCostHaler` integer povinné

```bash
curl https://api.damedoklad.cz/v1/sales/late-interest \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## List unpaid invoices past their due date, with late interest and the next reminder level

GET `/v1/sales/overdue`

List unpaid invoices past their due date, with late interest and the next reminder level

Nástroj MCP: `list-overdue-invoices`

### Parametry dotazu

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Odpověď · 200

`data` object\[\] povinné

`object` "overdue\_invoice" povinné

`id` string povinné

`number` null | string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`contactEmail` null | string povinné

`issueDate` null | string povinné date

`dueDate` null | string povinné date

`currency` null | string povinné

`totalHaler` integer | null povinné

`paidHaler` integer povinné

`outstandingHaler` integer povinné

`daysOverdue` integer povinné

`interestHaler` integer povinné

`ratePercent` null | number povinné

`rateKnown` boolean povinné

`lastReminderLevel` integer povinné

`nextReminderLevel` integer povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## A return taken without a connection: the sale named by its id or by the till's own id for it, its lines by their place on the receipt

POST `/v1/sales/pos-returns`

A return taken without a connection: the sale named by its id or by the till's own id for it, its lines by their place on the receipt. The till sends this when the connection is back, after the sale it returns. Sending it again answers the first return.

Nástroj MCP: `create-offline-pos-return`

### Tělo požadavku

`originalId` string

ID of the original.

`originalClientSaleId` string min 8 chars max 64 chars

ID of the original client sale.

`paymentMethod` "cash" | "card"

`reason` string | null

`clientSaleId` string povinné min 8 chars max 64 chars

ID of the client sale.

`offline` object povinné

`soldAt` string povinné date-time

`number` string povinné max 40 chars

`listPrices` object\[\]

`itemId` string povinné

ID of the item. Find it with list-items.

`priceHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`quantity` number povinné

`backToVoucher` boolean

`lines` object\[\] povinné

`position` integer povinné min 0 max 9007199254740991

`quantity` number povinné

`serialNumbers` string\[\]

### Odpověď · 201

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/pos-returns \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "clientSaleId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "offline": {
    "soldAt": "2026-10-30",
    "number": "string"
  },
  "lines": [
    {
      "position": 0,
      "quantity": 1
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/pos-returns', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "clientSaleId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "offline": {
      "soldAt": "2026-10-30",
      "number": "string"
    },
    "lines": [
      {
        "position": 0,
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/pos-returns",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "clientSaleId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "offline": {
            "soldAt": "2026-10-30",
            "number": "string"
        },
        "lines": [
            {
                "position": 0,
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Record a paid till sale: issues a sales receipt at once, posts to the cash desk or card clearing (261)

POST `/v1/sales/pos-sales`

Record a paid till sale: issues a sales receipt at once, posts to the cash desk or card clearing (261). Prices include VAT. Cash in CZK rounds to whole crowns. Pass receivedHaler to get the change back.

Nástroj MCP: `create-pos-sale`

### Tělo požadavku

`clientSaleId` string min 8 chars max 64 chars

ID of the client sale.

`offline` object

`soldAt` string povinné date-time

`number` string povinné max 40 chars

`listPrices` object\[\]

`itemId` string povinné

ID of the item. Find it with list-items.

`priceHaler` integer povinné min -9007199254740991 max 9007199254740991

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

`quantity` number povinné

`registerId` string

ID of the register.

`paymentMethod` "cash" | "card" povinné

`cashRegisterId` string

ID of the cash register. Find it with list-cash-registers.

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

`eetOwnSale` boolean

`eetMandateId` string

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

`terminalPayment` object

`protocol` string povinné max 20 chars

`terminalId` string | null

ID of the terminal.

`receiptNumber` string | null

`traceNumber` string | null

`authorisation` string | null

`cardName` string | null

`approvedAt` string | null

`vatMode` "eu\_registration" | "eu\_sme" | "group\_internal" | "margin\_used\_goods" | "margin\_art" | "margin\_collectibles" | "margin\_travel" | "domestic" | "reverse\_charge" | "eu\_goods" | "eu\_services" | "third\_country\_goods" | "third\_country\_services" | "oss" | "eu\_triangular" | "eu\_new\_vehicle" | "exempt" | "none"

`billToCountry` string 2 chars

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`exchangeRate` number

`taxPointDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`receivedHaler` integer min 0 max 9007199254740991

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

`contactId` string

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

`issueDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`seriesId` string

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

`roundingMode` "auto" | "crown" | "none"

`lines` object\[\] povinné

`purchaseHaler` integer min 0 max 9007199254740991

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

`exemptPercent` number min 0 max 100

`purchaseLineId` string | null

ID of the purchase line.

`description` string max 240 chars

`quantity` number povinné

`unit` string max 16 chars

`unitPriceHaler` integer min -9007199254740991 max 9007199254740991

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

`vatRate` number min 0 max 30

`itemId` string | null

ID of the item. Find it with list-items.

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`accountNumber` string | null

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

`lots` object\[\]

`itemId` string

ID of the item. Find it with list-items.

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

### Odpověď · 201

`id` string povinné

`kind` string povinné

`number` null | string povinné

`status` string povinné

`contactId` null | string povinné

`contactName` null | string povinné

`issueDate` string povinné date

`dueDate` null | string povinné date

`validUntil` null | string povinné date

`currency` string povinné

`totalHaler` integer povinné

`paidHaler` integer povinné

`overdue` boolean povinné

`reservationStatus` string povinné

`externalNumber` null | string povinné

`fileId` null | string povinné

`customFields` object

`kanal` string

`seriesId` null | string

`variableSymbol` null | string

`constantSymbol` null | string

`contactIco` null | string

`contactDic` null | string

`contactEmail` null | string

`billToStreet` null | string

`billToCity` null | string

`billToPostalCode` null | string

`billToCountry` null | string

`taxPointDate` null | string date

`exchangeRate` integer

`vatMode` string

`templateId` string | null

`centerId` string | null

`activityId` string | null

`projectId` string | null

`paymentMethod` string

`language` string

`notePublic` null | string

`noteInternal` null | string

`reason` null | string

`sourceKind` null | string

`sourceId` null | string

`originalKind` null | string

`originalId` null | string

`originalNumber` null | string

`consumedById` string | null

`stornoOfId` null | string

`netHaler` integer

`vatHaler` integer

`roundingHaler` integer

`receivedHaler` integer | null

`registerId` null | string

`closureId` string | null

`changeHaler` integer | null

`lines` object\[\]

`object` "sales\_document\_line" povinné

`id` string povinné

`description` string povinné

`quantity` integer povinné

`unit` string povinné

`unitPriceHaler` integer povinné

`vatRate` integer povinné

`netHaler` integer povinné

`vatHaler` integer povinné

`totalHaler` integer povinné

`accountNumber` null | string povinné

`itemId` null | string povinné

`warehouseId` null | string povinné

`fulfilledQuantity` number povinné

`invoicedQuantity` integer povinné

`reservedQuantity` integer povinné

`returnedQuantity` integer povinné

`originalLineId` null | string povinné

`lots` object\[\] povinné

`lotId` string | null povinné

`code` null | string povinné

`quantity` integer povinné

`expiryDate` string | null povinné

`orderLineId` string | null povinné

`recycling` null | object

`text` string povinné

`unit` string povinné

`feeId` string povinné

`rateHaler` integer povinné

`totalHaler` integer povinné

`weightMilli` integer povinné

`perUnitHaler` integer povinné

`coefficientMilli` integer povinné

`payments` object\[\]

`object` "sales\_document\_payment" povinné

`id` string povinné

`amountHaler` integer povinné

`paidOn` string povinné date

`method` string povinné

`note` null | string povinné

`links` object\[\]

`object` "document\_link" povinné

`id` string povinné

`fromKind` string povinné

`fromId` string povinné

`toKind` string povinné

`toId` string povinné

`kind` string povinné

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string povinné

`bankAccountId` string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/pos-sales \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "paymentMethod": "cash",
  "lines": [
    {
      "quantity": 1
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/pos-sales', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "paymentMethod": "cash",
    "lines": [
      {
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/pos-sales",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "paymentMethod": "cash",
        "lines": [
            {
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## List recurring invoice schedules

GET `/v1/sales/recurring`

List recurring invoice schedules

Nástroj MCP: `list-recurring-invoices`

### Parametry dotazu

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

### Odpověď · 200

`data` object\[\] povinné

`object` "sales\_recurring" povinné

`id` string povinné

`name` null | string povinné

`contactId` null | string povinné

`status` string povinné

`frequency` string povinné

`intervalCount` integer povinné

`startDate` string povinné date

`nextIssueDate` null | string povinné date

`endDate` null | string povinné date

`dueDays` integer povinné

`autoIssue` boolean povinné

`autoSend` boolean povinné

`currency` null | string povinné

`paymentMethod` string povinné

`language` null | string povinné

`vatMode` string povinné

`templateId` string | null povinné

`centerId` string | null povinné

`activityId` string | null povinné

`projectId` string | null povinné

`notePublic` string | null povinné

`lines` object\[\] povinné

`unit` null | string

`vatRate` integer povinné

`quantity` integer povinné

`description` null | string povinné

`unitPriceHaler` integer | null povinné

`lastIssuedOn` null | string povinné date

`lastError` null | string povinné

`runs` object\[\]

`object` "sales\_recurring\_run" povinné

`id` string povinné

`runDate` string povinné date

`status` string povinné

`invoiceId` null | string povinné

`error` null | string povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Create a schedule that issues an invoice automatically, optionally e-mailing it

POST `/v1/sales/recurring`

Create a schedule that issues an invoice automatically, optionally e-mailing it

Nástroj MCP: `create-recurring-invoice`

### Tělo požadavku

`name` string povinné max 200 chars

`contactId` string povinné

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

`frequency` "monthly" | "quarterly" | "half\_yearly" | "yearly" povinné

`intervalCount` integer min 1 max 24

`startDate` string povinné YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string | null

Date as YYYY-MM-DD.

`dueDays` integer min 0 max 365

`autoIssue` boolean

`autoSend` boolean

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`paymentMethod` "transfer" | "cash" | "card" | "cod" | "proforma"

`language` "cs" | "en" | "sk" | "de" | "fr" | "pl"

`vatMode` "eu\_registration" | "eu\_sme" | "group\_internal" | "margin\_used\_goods" | "margin\_art" | "margin\_collectibles" | "margin\_travel" | "domestic" | "reverse\_charge" | "eu\_goods" | "eu\_services" | "third\_country\_goods" | "third\_country\_services" | "oss" | "eu\_triangular" | "eu\_new\_vehicle" | "exempt" | "none"

`templateId` string | null

ID of the template.

`centerId` string | null

ID of the center.

`activityId` string | null

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

`projectId` string | null

ID of the project.

`notePublic` string | null

`lines` object\[\] povinné

`purchaseHaler` integer min 0 max 9007199254740991

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

`exemptPercent` number min 0 max 100

`purchaseLineId` string | null

ID of the purchase line.

`description` string max 240 chars

`quantity` number povinné

`unit` string max 16 chars

`unitPriceHaler` integer min -9007199254740991 max 9007199254740991

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

`vatRate` number min 0 max 30

`itemId` string | null

ID of the item. Find it with list-items.

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`accountNumber` string | null

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

`lots` object\[\]

`itemId` string

ID of the item. Find it with list-items.

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`recyclingFeeId` string | null

A fee from the list. null means no fee on this line, whatever the item says

`recyclingPerUnitHaler` integer min 0 max 9007199254740991

The amount per fee unit: with recyclingFeeId it replaces the rate of the fee on this line, without it the line carries a typed fee

`recyclingText` string max 120 chars

`recyclingUnit` "ks" | "kg"

The unit of a typed fee

`recyclingCoefficient` number min 0 max 1000000

How many times the fee applies to one unit of the line

### Odpověď · 201

`id` string povinné

`name` null | string povinné

`contactId` null | string povinné

`status` string povinné

`frequency` string povinné

`intervalCount` integer povinné

`startDate` string povinné date

`nextIssueDate` null | string povinné date

`endDate` null | string povinné date

`dueDays` integer povinné

`autoIssue` boolean povinné

`autoSend` boolean povinné

`currency` null | string povinné

`paymentMethod` string povinné

`language` null | string povinné

`vatMode` string povinné

`templateId` string | null povinné

`centerId` string | null povinné

`activityId` string | null povinné

`projectId` string | null povinné

`notePublic` string | null povinné

`lines` object\[\] povinné

`unit` null | string

`vatRate` integer povinné

`quantity` integer povinné

`description` null | string povinné

`unitPriceHaler` integer | null povinné

`lastIssuedOn` null | string povinné date

`lastError` null | string povinné

`runs` object\[\]

`object` "sales\_recurring\_run" povinné

`id` string povinné

`runDate` string povinné date

`status` string povinné

`invoiceId` null | string povinné

`error` null | string povinné

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/recurring', {
  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.",
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "frequency": "monthly",
    "startDate": "2026-10-30",
    "lines": [
      {
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Get a recurring invoice schedule with its run history

GET `/v1/sales/recurring/{id}`

Get a recurring invoice schedule with its run history

Nástroj MCP: `get-recurring-invoice`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`name` null | string povinné

`contactId` null | string povinné

`status` string povinné

`frequency` string povinné

`intervalCount` integer povinné

`startDate` string povinné date

`nextIssueDate` null | string povinné date

`endDate` null | string povinné date

`dueDays` integer povinné

`autoIssue` boolean povinné

`autoSend` boolean povinné

`currency` null | string povinné

`paymentMethod` string povinné

`language` null | string povinné

`vatMode` string povinné

`templateId` string | null povinné

`centerId` string | null povinné

`activityId` string | null povinné

`projectId` string | null povinné

`notePublic` string | null povinné

`lines` object\[\] povinné

`unit` null | string

`vatRate` integer povinné

`quantity` integer povinné

`description` null | string povinné

`unitPriceHaler` integer | null povinné

`lastIssuedOn` null | string povinné date

`lastError` null | string povinné

`runs` object\[\]

`object` "sales\_recurring\_run" povinné

`id` string povinné

`runDate` string povinné date

`status` string povinné

`invoiceId` null | string povinné

`error` null | string povinné

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

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

## Change, pause, or resume a recurring invoice schedule

PATCH `/v1/sales/recurring/{id}`

Change, pause, or resume a recurring invoice schedule

Nástroj MCP: `update-recurring-invoice`

### Parametry v cestě

`id` string povinné

### Tělo požadavku

`name` string max 200 chars

`contactId` string

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

`frequency` "monthly" | "quarterly" | "half\_yearly" | "yearly"

`intervalCount` integer min 1 max 24

`startDate` string YYYY-MM-DD

Date as YYYY-MM-DD.

`endDate` string | null

Date as YYYY-MM-DD.

`dueDays` integer min 0 max 365

`autoIssue` boolean

`autoSend` boolean

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`paymentMethod` "transfer" | "cash" | "card" | "cod" | "proforma"

`language` "cs" | "en" | "sk" | "de" | "fr" | "pl"

`vatMode` "eu\_registration" | "eu\_sme" | "group\_internal" | "margin\_used\_goods" | "margin\_art" | "margin\_collectibles" | "margin\_travel" | "domestic" | "reverse\_charge" | "eu\_goods" | "eu\_services" | "third\_country\_goods" | "third\_country\_services" | "oss" | "eu\_triangular" | "eu\_new\_vehicle" | "exempt" | "none"

`templateId` string | null

ID of the template.

`centerId` string | null

ID of the center.

`activityId` string | null

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

`projectId` string | null

ID of the project.

`notePublic` string | null

`lines` object\[\]

`purchaseHaler` integer min 0 max 9007199254740991

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

`exemptPercent` number min 0 max 100

`purchaseLineId` string | null

ID of the purchase line.

`description` string max 240 chars

`quantity` number povinné

`unit` string max 16 chars

`unitPriceHaler` integer min -9007199254740991 max 9007199254740991

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

`vatRate` number min 0 max 30

`itemId` string | null

ID of the item. Find it with list-items.

`warehouseId` string | null

ID of the warehouse. Find it with list-warehouses.

`accountNumber` string | null

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

`lots` object\[\]

`itemId` string

ID of the item. Find it with list-items.

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`recyclingFeeId` string | null

A fee from the list. null means no fee on this line, whatever the item says

`recyclingPerUnitHaler` integer min 0 max 9007199254740991

The amount per fee unit: with recyclingFeeId it replaces the rate of the fee on this line, without it the line carries a typed fee

`recyclingText` string max 120 chars

`recyclingUnit` "ks" | "kg"

The unit of a typed fee

`recyclingCoefficient` number min 0 max 1000000

How many times the fee applies to one unit of the line

`status` "active" | "paused"

### Odpověď · 200

`id` string povinné

`name` null | string povinné

`contactId` null | string povinné

`status` string povinné

`frequency` string povinné

`intervalCount` integer povinné

`startDate` string povinné date

`nextIssueDate` null | string povinné date

`endDate` null | string povinné date

`dueDays` integer povinné

`autoIssue` boolean povinné

`autoSend` boolean povinné

`currency` null | string povinné

`paymentMethod` string povinné

`language` null | string povinné

`vatMode` string povinné

`templateId` string | null povinné

`centerId` string | null povinné

`activityId` string | null povinné

`projectId` string | null povinné

`notePublic` string | null povinné

`lines` object\[\] povinné

`unit` null | string

`vatRate` integer povinné

`quantity` integer povinné

`description` null | string povinné

`unitPriceHaler` integer | null povinné

`lastIssuedOn` null | string povinné date

`lastError` null | string povinné

`runs` object\[\]

`object` "sales\_recurring\_run" povinné

`id` string povinné

`runDate` string povinné date

`status` string povinné

`invoiceId` null | string povinné

`error` null | string povinné

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/sales/recurring/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.",
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "frequency": "monthly"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/sales/recurring/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "frequency": "monthly"
    },
)
data = response.json()
```

## End a recurring invoice schedule. Invoices already issued stay.

DELETE `/v1/sales/recurring/{id}`

End a recurring invoice schedule. Invoices already issued stay.

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `delete-recurring-invoice`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`deleted` boolean povinné

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

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

## Issue every recurring invoice due by today in this workspace now; safe to repeat

POST `/v1/sales/recurring/run-due`

Issue every recurring invoice due by today in this workspace now; safe to repeat

Nástroj MCP: `run-due-recurring-invoices`

### Tělo požadavku

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Odpověď · 200

`schedules` integer povinné

`issued` integer povinné

`failed` integer povinné

`errors` object\[\] povinné

`recurringId` null | string povinné

`error` null | string povinné

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

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

```python
import os
import requests

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

## Seznam: upomínky, faktura

GET `/v1/sales/reminders`

List payment reminders

Nástroj MCP: `list-invoice-reminders`

### Parametry dotazu

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

### Odpověď · 200

`data` object\[\] povinné

`object` "sales\_reminder" povinné

`id` string povinné

`invoiceId` string povinné

`invoiceNumber` string povinné

`contactName` null | string povinné

`currency` null | string povinné

`level` integer povinné

`number` null | string povinné

`issueDate` string povinné date

`newDueDate` null | string povinné date

`daysOverdue` integer povinné

`outstandingHaler` integer povinné

`interestHaler` integer povinné

`ratePercent` null | number povinné

`subject` string povinné

`body` string povinné

`sentAt` null | string povinné date-time

`fileId` null | string povinné

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

## Stažení: PDF, upomínka, faktura

GET `/v1/sales/reminders/{id}/pdf`

Download the PDF of a payment reminder

Nástroj MCP: `download-invoice-reminder-pdf`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

Vrací soubor application/pdf.

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

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

## Odeslání: upomínka, faktura

POST `/v1/sales/reminders/{id}/send`

E-mail a payment reminder to the customer

Nástroj MCP: `send-invoice-reminder`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`invoiceId` string povinné

`invoiceNumber` string povinné

`contactName` null | string povinné

`currency` null | string povinné

`level` integer povinné

`number` null | string povinné

`issueDate` string povinné date

`newDueDate` null | string povinné date

`daysOverdue` integer povinné

`outstandingHaler` integer povinné

`interestHaler` integer povinné

`ratePercent` null | number povinné

`subject` string povinné

`body` string povinné

`sentAt` null | string povinné date-time

`fileId` null | string povinné

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/reminders/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/send \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

```python
import os
import requests

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

## Send the reminders due by today under each contact's reminder settings, in this workspace; safe to repeat. Sends nothing when e-mail is not configured

POST `/v1/sales/reminders/run-due`

Send the reminders due by today under each contact's reminder settings, in this workspace; safe to repeat. Sends nothing when e-mail is not configured

Nástroj MCP: `run-due-reminders`

### Tělo požadavku

`asOf` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Odpověď · 200

`emailConfigured` boolean povinné

`checked` integer povinné

`sent` integer povinné

`skipped` integer povinné

`noEmail` integer povinné

`failed` integer povinné

`errors` object\[\] povinné

`invoiceId` null | string povinné

`stage` string povinné

`error` null | string povinné

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

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

```python
import os
import requests

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

## Get seller details and invoicing defaults printed on documents

GET `/v1/sales/settings`

Get seller details and invoicing defaults printed on documents

Nástroj MCP: `get-sales-settings`

### Odpověď · 200

`id` null | string povinné

`vatPayer` boolean povinné

`name` null | string povinné

`ico` null | string povinné

`dic` null | string povinné

`street` null | string povinné

`city` null | string povinné

`postalCode` null | string povinné

`country` string povinné

`phone` null | string povinné

`email` null | string povinné

`web` string | null povinné

`registration` string | null povinné

`accountNumber` null | string povinné

`bankCode` null | string povinné

`iban` null | string povinné

`hasLogo` boolean povinné

`defaultDueDays` integer povinné

`replyTo` null | string povinné

`documentFooter` string | null povinné

`autoAdvanceTaxDocument` boolean povinné

`missing` string\[\] povinné

`autoConsumeOrders` boolean

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

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

## Update seller address, bank account, VAT payer status, and invoicing defaults

PUT `/v1/sales/settings`

Update seller address, bank account, VAT payer status, and invoicing defaults

Nástroj MCP: `update-sales-settings`

### Tělo požadavku

`autoConsumeOrders` boolean

Issuing an invoice or a delivery note takes open received orders of the same customer and item, oldest first.

`vatPayer` boolean

`dic` string | null

VAT number (DIČ), for example CZ12345678.

`street` string | null

`city` string | null

`postalCode` string | null

`country` string 2 chars

`phone` string | null

`email` string | null

`web` string | null

`registration` string | null

`accountNumber` string | null

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

`bankCode` string | null

`iban` string | null

IBAN without spaces.

`defaultDueDays` integer min 0 max 365

`replyTo` string | null

Date as YYYY-MM-DD.

`documentFooter` string | null

`autoAdvanceTaxDocument` boolean

### Odpověď · 200

`id` null | string povinné

`vatPayer` boolean povinné

`name` null | string povinné

`ico` null | string povinné

`dic` null | string povinné

`street` null | string povinné

`city` null | string povinné

`postalCode` null | string povinné

`country` string povinné

`phone` null | string povinné

`email` null | string povinné

`web` string | null povinné

`registration` string | null povinné

`accountNumber` null | string povinné

`bankCode` null | string povinné

`iban` null | string povinné

`hasLogo` boolean povinné

`defaultDueDays` integer povinné

`replyTo` null | string povinné

`documentFooter` string | null povinné

`autoAdvanceTaxDocument` boolean povinné

`missing` string\[\] povinné

`autoConsumeOrders` boolean

```bash
curl -X PUT https://api.damedoklad.cz/v1/sales/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "autoConsumeOrders": false,
  "vatPayer": false,
  "dic": "CZ12345678"
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/sales/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "autoConsumeOrders": False,
        "vatPayer": False,
        "dic": "CZ12345678"
    },
)
data = response.json()
```

## Upload the logo printed on documents (PNG or JPEG, up to 1 MB)

POST `/v1/sales/settings/logo`

Upload the logo printed on documents (PNG or JPEG, up to 1 MB)

Nástroj MCP: `upload-sales-logo`

### Tělo požadavku

`fileBase64` string povinné

File content encoded as base64.

`contentType` "image/png" | "image/jpeg" povinné

### Odpověď · 200

`id` null | string povinné

`vatPayer` boolean povinné

`name` null | string povinné

`ico` null | string povinné

`dic` null | string povinné

`street` null | string povinné

`city` null | string povinné

`postalCode` null | string povinné

`country` string povinné

`phone` null | string povinné

`email` null | string povinné

`web` string | null povinné

`registration` string | null povinné

`accountNumber` null | string povinné

`bankCode` null | string povinné

`iban` null | string povinné

`hasLogo` boolean povinné

`defaultDueDays` integer povinné

`replyTo` null | string povinné

`documentFooter` string | null povinné

`autoAdvanceTaxDocument` boolean povinné

`missing` string\[\] povinné

`autoConsumeOrders` boolean

```bash
curl -X POST https://api.damedoklad.cz/v1/sales/settings/logo \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "fileBase64": "string",
  "contentType": "image/png"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/sales/settings/logo",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "fileBase64": "string",
        "contentType": "image/png"
    },
)
data = response.json()
```

## List mutual set-offs (vzájemné zápočty)

GET `/v1/set-offs`

List mutual set-offs (vzájemné zápočty)

Nástroj MCP: `list-set-offs`

### Parametry dotazu

`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` "posted" | "storno"

### Odpověď · 200

`data` object\[\] povinné

`object` "set\_off" povinné

`id` string povinné

`number` string povinné

`contactId` string povinné

`contactName` string povinné

`setOffOn` string povinné date

`basis` string povinné

`currency` string povinné

`exchangeRate` null | number povinné

`amountHaler` integer povinné

`note` string | null povinné

`status` string povinné

`createdAt` string povinné date-time

`items` object\[\] povinné

`object` "set\_off\_item" povinné

`id` string povinné

`side` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`issueDate` null | string povinné date

`dueDate` null | string povinné date

`documentTotalHaler` integer povinné

`amountHaler` integer povinné

`remainingHaler` integer povinné

`warnings` object\[\]

`receivedInvoiceId` null | string povinné

`number` string povinné

`contactName` string povinné

`status` null | string povinné

`warnings` object\[\] povinné

`code` null | string povinné

`level` string povinné

`reason` null | string povinné

`liability` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean povinné

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

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

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

```python
import os
import requests

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

## Set off receivables and payables of one contact. Each document shows as settled in that amount; 395 ends on zero

POST `/v1/set-offs`

Set off receivables and payables of one contact. Each document shows as settled in that amount; 395 ends on zero. Amounts may be left out: the smaller side goes in whole and the other covers it, oldest due date first. VAT does not change. A declaration needs our claim to be due (§ 1982 OZ); an agreement does not. The answer lists warnings about an unreliable VAT payer among the supplier's invoices and advances (§ 109 ZDPH), as a payment order does, without the account check; they never block.

Nástroj MCP: `create-set-off`

### Tělo požadavku

`contactId` string povinné

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

`seriesId` string

A number series of type set\_off. Left out: the default series of the year.

`setOffOn` string povinné YYYY-MM-DD

The day of the set-off. Under § 1982 OZ it takes effect when both claims became eligible; the books use this date.

`basis` "agreement" | "declaration"

agreement (default): both sides sign, not-yet-due claims allowed. declaration: one-sided under § 1982 OZ, our claim must be due.

`exchangeRate` number

For a foreign currency: CZK for one unit. Left out: the ČNB rate of the day.

`note` string | null

`items` object\[\] povinné

`kind` "invoice" | "debit\_note" | "other\_receivable" | "received\_invoice" | "credit\_note" | "other\_payable" | "proforma" | "supplier\_advance" povinné

`documentId` string povinné

ID of the document.

`amountHaler` integer max 9007199254740991

How much of this document to set off. Left out: the side with less goes in whole and the other covers it, oldest due date first.

### Odpověď · 201

`id` string povinné

`number` string povinné

`contactId` string povinné

`contactName` string povinné

`setOffOn` string povinné date

`basis` string povinné

`currency` string povinné

`exchangeRate` null | number povinné

`amountHaler` integer povinné

`note` string | null povinné

`status` string povinné

`createdAt` string povinné date-time

`items` object\[\] povinné

`object` "set\_off\_item" povinné

`id` string povinné

`side` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`issueDate` null | string povinné date

`dueDate` null | string povinné date

`documentTotalHaler` integer povinné

`amountHaler` integer povinné

`remainingHaler` integer povinné

`warnings` object\[\]

`receivedInvoiceId` null | string povinné

`number` string povinné

`contactName` string povinné

`status` null | string povinné

`warnings` object\[\] povinné

`code` null | string povinné

`level` string povinné

`reason` null | string povinné

`liability` string

```bash
curl -X POST https://api.damedoklad.cz/v1/set-offs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "setOffOn": "2026-10-30",
  "items": [
    {
      "kind": "invoice",
      "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
    {
      "kind": "invoice",
      "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/set-offs', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "setOffOn": "2026-10-30",
    "items": [
      {
        "kind": "invoice",
        "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
      },
      {
        "kind": "invoice",
        "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/set-offs",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "setOffOn": "2026-10-30",
        "items": [
            {
                "kind": "invoice",
                "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
            },
            {
                "kind": "invoice",
                "documentId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
            }
        ]
    },
)
data = response.json()
```

## Get a set-off with its documents

GET `/v1/set-offs/{id}`

Get a set-off with its documents

Nástroj MCP: `get-set-off`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`number` string povinné

`contactId` string povinné

`contactName` string povinné

`setOffOn` string povinné date

`basis` string povinné

`currency` string povinné

`exchangeRate` null | number povinné

`amountHaler` integer povinné

`note` string | null povinné

`status` string povinné

`createdAt` string povinné date-time

`items` object\[\] povinné

`object` "set\_off\_item" povinné

`id` string povinné

`side` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`issueDate` null | string povinné date

`dueDate` null | string povinné date

`documentTotalHaler` integer povinné

`amountHaler` integer povinné

`remainingHaler` integer povinné

`warnings` object\[\]

`receivedInvoiceId` null | string povinné

`number` string povinné

`contactName` string povinné

`status` null | string povinné

`warnings` object\[\] povinné

`code` null | string povinné

`level` string povinné

`reason` null | string povinné

`liability` string

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

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

## Download the printed set-off agreement or declaration, ready to sign

GET `/v1/set-offs/{id}/pdf`

Download the printed set-off agreement or declaration, ready to sign

Nástroj MCP: `download-set-off-pdf`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

Vrací soubor application/pdf.

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

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

## Cancel a set-off: its payments come off the documents and what they posted is reversed

POST `/v1/set-offs/{id}/storno`

Cancel a set-off: its payments come off the documents and what they posted is reversed

Nevratná operaceTato operace se nedá vrátit. MCP klienti se před ní ptají na potvrzení.

Nástroj MCP: `storno-set-off`

### Parametry v cestě

`id` string povinné

### Odpověď · 200

`id` string povinné

`number` string povinné

`contactId` string povinné

`contactName` string povinné

`setOffOn` string povinné date

`basis` string povinné

`currency` string povinné

`exchangeRate` null | number povinné

`amountHaler` integer povinné

`note` string | null povinné

`status` string povinné

`createdAt` string povinné date-time

`items` object\[\] povinné

`object` "set\_off\_item" povinné

`id` string povinné

`side` string povinné

`kind` string povinné

`documentId` string povinné

`documentNumber` null | string povinné

`issueDate` null | string povinné date

`dueDate` null | string povinné date

`documentTotalHaler` integer povinné

`amountHaler` integer povinné

`remainingHaler` integer povinné

`warnings` object\[\]

`receivedInvoiceId` null | string povinné

`number` string povinné

`contactName` string povinné

`status` null | string povinné

`warnings` object\[\] povinné

`code` null | string povinné

`level` string povinné

`reason` null | string povinné

`liability` string

```bash
curl -X POST https://api.damedoklad.cz/v1/set-offs/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/storno \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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