# Inventory · DameDoklad API

> Operations in the Inventory group.

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

# Inventory

Operations in the Inventory group.

## List bills of materials

GET `/v1/boms`

List bills of materials

MCP tool: `list-boms`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "bom" required

`id` string required

`itemId` string required

`itemName` string required

`name` string required

`outputQuantity` integer required

`extraCostHaler` integer required

`isActive` boolean required

`note` string | null required

`lines` object\[\] required

`id` string required

`itemId` string required

`itemName` string required

`unit` null | string required

`quantity` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a bill of materials: what one batch of a finished item consumes

POST `/v1/boms`

Create a bill of materials: what one batch of a finished item consumes. extraCostHaler is labour and overhead per batch, added to the cost of the finished goods.

MCP tool: `create-bom`

### Request body

`itemId` string required

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

`name` string required max 200 chars

`outputQuantity` number max 1000000000

`extraCostHaler` integer min 0 max 9007199254740991

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

`isActive` boolean

`note` string | null

`lines` object\[\] required

`itemId` string required

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

`quantity` number required max 1000000000

### Response · 201

`id` string required

`itemId` string required

`itemName` string required

`name` string required

`outputQuantity` integer required

`extraCostHaler` integer required

`isActive` boolean required

`note` string | null required

`lines` object\[\] required

`id` string required

`itemId` string required

`itemName` string required

`unit` null | string required

`quantity` integer required

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

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

```python
import os
import requests

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

## Get a bill of materials with its components

GET `/v1/boms/{id}`

Get a bill of materials with its components

MCP tool: `get-bom`

### Path parameters

`id` string required

### Response · 200

`id` string required

`itemId` string required

`itemName` string required

`name` string required

`outputQuantity` integer required

`extraCostHaler` integer required

`isActive` boolean required

`note` string | null required

`lines` object\[\] required

`id` string required

`itemId` string required

`itemName` string required

`unit` null | string required

`quantity` integer required

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

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

## Update a bill of materials. Production already posted keeps the quantities it used

PATCH `/v1/boms/{id}`

Update a bill of materials. Production already posted keeps the quantities it used

MCP tool: `update-bom`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`outputQuantity` number max 1000000000

`extraCostHaler` integer min 0 max 9007199254740991

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

`isActive` boolean

`note` string | null

`lines` object\[\]

`itemId` string required

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

`quantity` number required max 1000000000

### Response · 200

`id` string required

`itemId` string required

`itemName` string required

`name` string required

`outputQuantity` integer required

`extraCostHaler` integer required

`isActive` boolean required

`note` string | null required

`lines` object\[\] required

`id` string required

`itemId` string required

`itemName` string required

`unit` null | string required

`quantity` integer required

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

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

```python
import os
import requests

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

## Delete a bill of materials never used in production. A used one can only be deactivated

DELETE `/v1/boms/{id}`

Delete a bill of materials never used in production. A used one can only be deactivated

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

MCP tool: `delete-bom`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## The category tree for e-shops. An empty list for a company with no shop

GET `/v1/catalog-categories`

The category tree for e-shops. An empty list for a company with no shop

MCP tool: `list-catalog-categories`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "catalog\_category" required

`id` string required

`number` integer required

`parentId` null | string required

`name` string required

`description` string | null required

`position` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

```python
import os
import requests

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

## Add a category for e-shops, optionally under a parent

POST `/v1/catalog-categories`

Add a category for e-shops, optionally under a parent

MCP tool: `create-catalog-category`

### Request body

`name` string required max 160 chars

`parentId` string | null

ID of the parent.

`description` string | null

`position` integer min 0 max 100000

### Response · 201

`id` string required

`number` integer required

`parentId` null | string required

`name` string required

`description` string | null required

`position` integer required

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

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

```python
import os
import requests

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

## Rename or move a category

PATCH `/v1/catalog-categories/{id}`

Rename or move a category

MCP tool: `update-catalog-category`

### Path parameters

`id` string required

### Request body

`name` string max 160 chars

`parentId` string | null

ID of the parent.

`description` string | null

`position` integer min 0 max 100000

### Response · 200

`id` string required

`number` integer required

`parentId` null | string required

`name` string required

`description` string | null required

`position` integer required

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

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

```python
import os
import requests

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

## Delete a category with no subcategories. Items keep their other categories

DELETE `/v1/catalog-categories/{id}`

Delete a category with no subcategories. Items keep their other categories

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

MCP tool: `delete-catalog-category`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## Attributes an item can have in an e-shop, such as colour or size

GET `/v1/catalog-parameters`

Attributes an item can have in an e-shop, such as colour or size

MCP tool: `list-catalog-parameters`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "catalog\_parameter" required

`id` string required

`number` integer required

`name` string required

`type` string required

`unit` null | string required

`options` string\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Add an attribute for e-shops. Types follow POHODA: text, number, date, yes or no, list, unit, currency

POST `/v1/catalog-parameters`

Add an attribute for e-shops. Types follow POHODA: text, number, date, yes or no, list, unit, currency

MCP tool: `create-catalog-parameter`

### Request body

`name` string required max 120 chars

`type` "text" | "number" | "date" | "boolean" | "list" | "unit" | "currency"

`unit` string | null

`options` string\[\]

### Response · 201

`id` string required

`number` integer required

`name` string required

`type` string required

`unit` null | string required

`options` string\[\] required

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

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

```python
import os
import requests

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

## Change an attribute for e-shops

PATCH `/v1/catalog-parameters/{id}`

Change an attribute for e-shops

MCP tool: `update-catalog-parameter`

### Path parameters

`id` string required

### Request body

`name` string max 120 chars

`type` "text" | "number" | "date" | "boolean" | "list" | "unit" | "currency"

`unit` string | null

`options` string\[\]

### Response · 200

`id` string required

`number` integer required

`name` string required

`type` string required

`unit` null | string required

`options` string\[\] required

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

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

```python
import os
import requests

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

## Delete an attribute for e-shops and its values on items

DELETE `/v1/catalog-parameters/{id}`

Delete an attribute for e-shops and its values on items

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

MCP tool: `delete-catalog-parameter`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## A customer's issued delivery notes with what is not invoiced yet, optionally for given items. Name them on issue-invoice in deliveryNoteIds so the goods do not leave twice

GET `/v1/delivery-notes/uninvoiced`

A customer's issued delivery notes with what is not invoiced yet, optionally for given items. Name them on issue-invoice in deliveryNoteIds so the goods do not leave twice

MCP tool: `list-uninvoiced-delivery-notes`

### Query parameters

`contactId` string required

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

`itemIds` string max 2000 chars

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "uninvoiced\_delivery\_note" required

`deliveryNoteId` null | string required

`number` null | string required

`deliveryDate` string required date

`items` object\[\] required

`itemId` null | string required

`name` null | string required

`unit` null | string required

`quantity` integer required

`lineId` string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## List GpsrRecords

GET `/v1/gpsr-records`

List GpsrRecords

MCP tool: `list-gpsr-records`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "gpsr\_record" required

`id` string required

`code` string required

`name` string required

`manufacturerName` null | string required

`manufacturerAddress` null | string required

`manufacturerEmail` null | string required

`manufacturerWeb` null | string required

`euRepresentativeName` null | string required

`euRepresentativeAddress` null | string required

`euRepresentativeEmail` null | string required

`safetyInfo` null | string required

`isActive` boolean required

`note` null | string

`attachments` object\[\]

`kind` string required

`name` string required

`url` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a GpsrRecord

POST `/v1/gpsr-records`

Create a GpsrRecord

MCP tool: `create-gpsr-record`

### Request body

`code` string required max 32 chars

`name` string required max 200 chars

`manufacturerName` string | null

`manufacturerAddress` string | null

`manufacturerEmail` string | null | ""

`manufacturerWeb` string | null

`euRepresentativeName` string | null

`euRepresentativeAddress` string | null

`euRepresentativeEmail` string | null | ""

`safetyInfo` string | null

`note` string | null

`isActive` boolean

### Response · 201

`id` string required

`code` string required

`name` string required

`manufacturerName` null | string required

`manufacturerAddress` null | string required

`manufacturerEmail` null | string required

`manufacturerWeb` null | string required

`euRepresentativeName` null | string required

`euRepresentativeAddress` null | string required

`euRepresentativeEmail` null | string required

`safetyInfo` null | string required

`isActive` boolean required

`note` null | string

`attachments` object\[\]

`kind` string required

`name` string required

`url` string

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

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

```python
import os
import requests

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

## Get a GpsrRecord

GET `/v1/gpsr-records/{id}`

Get a GpsrRecord

MCP tool: `get-gpsr-record`

### Path parameters

`id` string required

### Response · 200

`id` string required

`code` string required

`name` string required

`manufacturerName` null | string required

`manufacturerAddress` null | string required

`manufacturerEmail` null | string required

`manufacturerWeb` null | string required

`euRepresentativeName` null | string required

`euRepresentativeAddress` null | string required

`euRepresentativeEmail` null | string required

`safetyInfo` null | string required

`isActive` boolean required

`note` null | string

`attachments` object\[\]

`kind` string required

`name` string required

`url` string

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

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

## Update a GpsrRecord

PATCH `/v1/gpsr-records/{id}`

Update a GpsrRecord

MCP tool: `update-gpsr-record`

### Path parameters

`id` string required

### Request body

`code` string max 32 chars

`name` string max 200 chars

`manufacturerName` string | null

`manufacturerAddress` string | null

`manufacturerEmail` string | null | ""

`manufacturerWeb` string | null

`euRepresentativeName` string | null

`euRepresentativeAddress` string | null

`euRepresentativeEmail` string | null | ""

`safetyInfo` string | null

`note` string | null

`isActive` boolean

### Response · 200

`id` string required

`code` string required

`name` string required

`manufacturerName` null | string required

`manufacturerAddress` null | string required

`manufacturerEmail` null | string required

`manufacturerWeb` null | string required

`euRepresentativeName` null | string required

`euRepresentativeAddress` null | string required

`euRepresentativeEmail` null | string required

`safetyInfo` null | string required

`isActive` boolean required

`note` null | string

`attachments` object\[\]

`kind` string required

`name` string required

`url` string

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

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

## Delete a GpsrRecord

DELETE `/v1/gpsr-records/{id}`

Delete a GpsrRecord

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

MCP tool: `delete-gpsr-record`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

```python
import os
import requests

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

## Certificates and declarations kept on a GPSR record

GET `/v1/gpsr-records/{id}/certificates`

Certificates and declarations kept on a GPSR record

MCP tool: `list-gpsr-certificates`

### Path parameters

`id` string required

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "gpsr\_certificate" required

`id` string required

`gpsrId` string required

`name` string required

`issuedOn` null | string required date

`validUntil` null | string required date

`note` null | string required

`contentType` string required

`byteSize` integer | null required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Keep a certificate or declaration on a GPSR record: PDF, PNG or JPEG, up to 10 MB. The dates are for your own overview

POST `/v1/gpsr-records/{id}/certificates`

Keep a certificate or declaration on a GPSR record: PDF, PNG or JPEG, up to 10 MB. The dates are for your own overview

MCP tool: `upload-gpsr-certificate`

### Path parameters

`id` string required

### Request body

`name` string required max 200 chars

`fileBase64` string required max 14000000 chars

File content encoded as base64.

`contentType` "application/pdf" | "image/png" | "image/jpeg" required

`issuedOn` string | null

Date as YYYY-MM-DD.

`validUntil` string | null

`note` string | null

### Response · 201

`id` string required

`gpsrId` string required

`name` string required

`issuedOn` null | string required date

`validUntil` null | string required date

`note` null | string required

`contentType` string required

`byteSize` integer | null required

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

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/gpsr-records/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/certificates', {
  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.",
    "fileBase64": "string",
    "contentType": "application/pdf"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/gpsr-records/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/certificates",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "fileBase64": "string",
        "contentType": "application/pdf"
    },
)
data = response.json()
```

## Remove a certificate from a GPSR record and delete its file

DELETE `/v1/gpsr-records/{id}/certificates/{certificateId}`

Remove a certificate from a GPSR record and delete its file

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

MCP tool: `delete-gpsr-certificate`

### Path parameters

`id` string required

`certificateId` string required

ID of the certificate.

### Response · 200

`id` string required

`deleted` boolean required

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

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

## Download a certificate kept on a GPSR record

GET `/v1/gpsr-records/{id}/certificates/{certificateId}/file`

Download a certificate kept on a GPSR record

MCP tool: `get-gpsr-certificate-file`

### Path parameters

`id` string required

`certificateId` string required

ID of the certificate.

### Response · 200

Returns a application/pdf file.

```bash
curl https://api.damedoklad.cz/v1/gpsr-records/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/certificates/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/file \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

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

## All GPSR records as a POHODA XML file (GPSR.xsd, version 2.0), with the names of their certificates, to load into POHODA

GET `/v1/gpsr-records/export.xml`

All GPSR records as a POHODA XML file (GPSR.xsd, version 2.0), with the names of their certificates, to load into POHODA

MCP tool: `export-gpsr-records-xml`

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/gpsr-records/export.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

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

```python
import os
import requests

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

## Items selling below their cost or below the minimum margin set in inventory settings, worst first

GET `/v1/inventory/margin-warnings`

Items selling below their cost or below the minimum margin set in inventory settings, worst first

MCP tool: `list-margin-warnings`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`salePriceHaler` integer required

`costHaler` integer required

`marginHaler` integer required

`marginPercent` integer required

`warning` string required

`lastPurchaseOn` string required date

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Reorder suggestions from minimum and maximum stock and sales velocity, with supplier, price, and quantity

GET `/v1/inventory/purchase-planning`

Reorder suggestions from minimum and maximum stock and sales velocity, with supplier, price, and quantity. Projected stock = on hand − reserved + on order. Reorder point = minimum + sales during the lead time. Below it, the suggestion goes up to the maximum, or to the reorder point plus the cover period, rounded up to packs and the supplier minimum.

MCP tool: `get-purchase-planning`

### Query parameters

`supplierId` string

ID of the supplier.

`warehouseId` string

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

`periodDays` integer min 7 max 730

`leadDays` integer min 0 max 365

`coverDays` integer min 0 max 365

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`periodDays` integer required

`leadDays` integer | null required

`coverDays` integer required

`rows` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`supplierId` string required

`supplierName` string required

`supplierSku` string | null required

`onHand` integer required

`reserved` integer required

`onOrder` integer required

`minStock` integer required

`maxStock` integer | null required

`soldInPeriod` integer required

`soldPerDay` integer required

`leadDays` integer | null required

`projected` integer required

`reorderPoint` integer required

`target` integer required

`needed` integer required

`quantity` integer required

`unitPriceHaler` integer | null required

`currency` null | string required

`priceSource` string required

`lineValueHaler` integer required

`lastPurchase` null | object required

`date` string required date

`documentNumber` null | string required

`supplierId` any required

Null in every recorded response.

`supplierName` any required

Null in every recorded response.

`unitPriceHaler` integer | null required

`landedUnitCostHaler` integer required

`marginWarning` any required

Null in every recorded response.

`marginPercent` integer | null required

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

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

## Turn reorder lines into one issued order per supplier, in one call

POST `/v1/inventory/purchase-planning/orders`

Turn reorder lines into one issued order per supplier, in one call. Prices default to the supplier price list, then the last purchase, then the item. Set issue to false to get drafts. Sending the order to the supplier is a separate step.

MCP tool: `create-purchase-orders`

### Request body

`lines` object\[\] required

`itemId` string required

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

`quantity` number required max 1000000000

`supplierId` string

ID of the supplier.

`unitPriceHaler` integer min 0 max 9007199254740991

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

`warehouseId` string

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

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`issue` boolean

### Response · 201

`data` object\[\] required

`object` "sales\_document" required

`id` string required

`kind` string required

`number` null | string required

`status` string required

`contactId` null | string required

`contactName` null | string required

`issueDate` string required date

`dueDate` null | string required date

`validUntil` null | string required date

`currency` string required

`totalHaler` integer required

`paidHaler` integer required

`overdue` boolean required

`reservationStatus` string required

`externalNumber` null | string required

`fileId` null | string required

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

`id` string required

`description` string required

`quantity` integer required

`unit` string required

`unitPriceHaler` integer required

`vatRate` integer required

`netHaler` integer required

`vatHaler` integer required

`totalHaler` integer required

`accountNumber` null | string required

`itemId` null | string required

`warehouseId` null | string required

`fulfilledQuantity` number required

`invoicedQuantity` integer required

`reservedQuantity` integer required

`returnedQuantity` integer required

`originalLineId` null | string required

`lots` object\[\] required

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`orderLineId` string | null required

`recycling` null | object

`text` string required

`unit` string required

`feeId` string required

`rateHaler` integer required

`totalHaler` integer required

`weightMilli` integer required

`perUnitHaler` integer required

`coefficientMilli` integer required

`payments` object\[\]

`object` "sales\_document\_payment" required

`id` string required

`amountHaler` integer required

`paidOn` string required date

`method` string required

`note` null | string required

`links` object\[\]

`object` "document\_link" required

`id` string required

`fromKind` string required

`fromId` string required

`toKind` string required

`toId` string required

`kind` string required

`amountHaler` integer | null

`carrierId` null | string

`bankMovement` object

`id` string required

`bankAccountId` string required

```bash
curl -X POST https://api.damedoklad.cz/v1/inventory/purchase-planning/orders \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "lines": [
    {
      "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "quantity": 1
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/inventory/purchase-planning/orders', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "lines": [
      {
        "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/inventory/purchase-planning/orders",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "lines": [
            {
                "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Items in stock with no issue for at least a number of days, largest tied-up value first

GET `/v1/inventory/reports/slow-movers`

Items in stock with no issue for at least a number of days, largest tied-up value first

MCP tool: `get-slow-movers-report`

### Query parameters

`days` integer min 1 max 3650

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`warehouseId` string

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

### Response · 200

`date` string required date

`days` integer required

`totalValueHaler` integer required

`rows` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`quantity` integer required

`valueHaler` integer | null required

`lastIssueOn` null | string required date

`idleDays` integer required

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

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

## Stock card of an item: every movement over a period with running quantity and value

GET `/v1/inventory/reports/stock-card`

Stock card of an item: every movement over a period with running quantity and value

MCP tool: `get-stock-card`

### Query parameters

`itemId` string required

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

`warehouseId` string

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

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`valuation` string required

`warehouseId` string | null required

`from` string required date

`to` string required date

`opening` object required

`quantity` integer required

`valueHaler` integer | null required

`received` integer required

`issued` integer required

`closing` object required

`quantity` integer required

`valueHaler` integer | null required

`rows` object\[\] required

`id` string required

`date` string required date

`type` string required

`reason` null | string required

`documentId` null | string required

`documentType` null | string required

`documentNumber` null | string required

`contactName` string | null required

`warehouseId` null | string required

`warehouseName` string required

`isReversal` boolean required

`received` integer required

`issued` integer required

`moved` any required

Null in every recorded response.

`valueDeltaHaler` integer required

`unitCostHaler` integer | null required

`balance` integer required

`balanceValueHaler` integer required

`note` string | null required

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

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

## Stock turnover per item over a period: receipts, issues at cost, average stock, turnover ratio and days

GET `/v1/inventory/reports/turnover`

Stock turnover per item over a period: receipts, issues at cost, average stock, turnover ratio and days

MCP tool: `get-stock-turnover-report`

### Query parameters

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`warehouseId` string

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

### Response · 200

`from` string required date

`to` string required date

`days` integer required

`rows` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`openingValueHaler` integer required

`receivedQuantity` integer required

`receivedValueHaler` integer required

`issuedQuantity` integer required

`issuedValueHaler` integer required

`closingValueHaler` integer required

`averageValueHaler` integer required

`ratio` null | number required

`days` integer | null required

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

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

## Inventory value by account on a date, against the ledger balance of 112, 123, and 132, for reconciliation

GET `/v1/inventory/reports/valuation`

Inventory value by account on a date, against the ledger balance of 112, 123, and 132, for reconciliation. Under accounting method B the accounts only move at year end, so differences during the year are expected. Daňová evidence has no ledger to compare with.

MCP tool: `get-stock-valuation`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 200

`date` string required date

`mode` string required

`totalStockValueHaler` integer required

`totalLedgerValueHaler` integer | null required

`totalDifferenceHaler` integer | null required

`rows` object\[\] required

`accountNumber` null | string required

`synthetic` string required

`stockValueHaler` integer required

`ledgerValueHaler` integer | null required

`items` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`warehouseId` null | string required

`warehouseName` string required

`quantity` integer required

`valueHaler` integer | null required

`differenceHaler` integer | null required

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

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

## Stock quantity and value per item on a given date, from the movement ledger

GET `/v1/inventory/reports/value`

Stock quantity and value per item on a given date, from the movement ledger

MCP tool: `get-stock-value-report`

### Query parameters

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`warehouseId` string

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

### Response · 200

`date` string required date

`totalValueHaler` integer required

`rows` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`type` string required

`quantity` integer required

`averageCostHaler` integer required

`valueHaler` integer | null required

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

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

## Stock accounting method (A or B), negative stock policy, which advanced options are on, and document number series

GET `/v1/inventory/settings`

Stock accounting method (A or B), negative stock policy, which advanced options are on, and document number series

MCP tool: `get-inventory-settings`

### Response · 200

`regime` string required

`accountingMethod` string required

`allowNegativeStock` boolean required

`features` object required

`purchasing` boolean required

`landedCosts` boolean required

`variants` boolean required

`units` boolean required

`kits` boolean required

`images` boolean required

`locations` boolean required

`registers` boolean required

`minMarginPercent` number required

`planning` object required

`periodDays` integer required

`leadDays` integer | null required

`coverDays` integer required

`series` object\[\] required

`documentType` null | string required

`prefix` string required

`pad` integer required

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

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

## Change the stock accounting method, negative stock policy, advanced options, or number series prefixes

PATCH `/v1/inventory/settings`

Change the stock accounting method, negative stock policy, advanced options, or number series prefixes. The accounting method can only change while the current year has no stock movements.

MCP tool: `update-inventory-settings`

### Request body

`accountingMethod` "A" | "B"

`allowNegativeStock` boolean

`features` object

`purchasing` boolean

`landedCosts` boolean

`variants` boolean

`units` boolean

`kits` boolean

`images` boolean

`locations` boolean

`registers` boolean

`minMarginPercent` number min 0 max 100

`planning` object

`periodDays` integer min 7 max 730

`leadDays` integer min 0 max 365

`coverDays` integer min 0 max 365

`series` object\[\]

`documentType` "receipt" | "issue" | "transfer" | "production" | "stocktake" required

`prefix` string required

`pad` integer min 3 max 6

### Response · 200

`regime` string required

`accountingMethod` string required

`allowNegativeStock` boolean required

`features` object required

`purchasing` boolean required

`landedCosts` boolean required

`variants` boolean required

`units` boolean required

`kits` boolean required

`images` boolean required

`locations` boolean required

`registers` boolean required

`minMarginPercent` number required

`planning` object required

`periodDays` integer required

`leadDays` integer | null required

`coverDays` integer required

`series` object\[\] required

`documentType` null | string required

`prefix` string required

`pad` integer required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/inventory/settings \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "accountingMethod": "A",
  "allowNegativeStock": false,
  "features": {
    "purchasing": false,
    "landedCosts": false,
    "variants": false
  }
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/inventory/settings', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "accountingMethod": "A",
    "allowNegativeStock": false,
    "features": {
      "purchasing": false,
      "landedCosts": false,
      "variants": false
    }
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/inventory/settings",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "accountingMethod": "A",
        "allowNegativeStock": False,
        "features": {
            "purchasing": False,
            "landedCosts": False,
            "variants": False
        }
    },
)
data = response.json()
```

## Opening and closing stock value of a year, and the entry it needs under accounting method B

GET `/v1/inventory/year-end`

Opening and closing stock value of a year, and the entry it needs under accounting method B. In daňová evidence this is the year-end inventory value to record; nothing is posted during the year.

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

### Query parameters

`year` integer required min 2000 max 2100

### Response · 200

`year` integer required

`canPost` boolean

`mode` string

`openingValueHaler` integer required

`closingValueHaler` integer required

`positions` object\[\]

`category` null | string required

`analytic` any required

Null in every recorded response.

`openingValueHaler` integer required

`closingValueHaler` integer required

`lines` object\[\]

`debitHaler` integer required

`creditHaler` integer required

`accountNumber` null | string required

`posted` any

Null in every recorded response.

`journalEntryId` null | string

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

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

```python
import os
import requests

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

## Post the year-end stock change under accounting method B: opening to expense, closing back to stock

POST `/v1/inventory/year-end`

Post the year-end stock change under accounting method B: opening to expense, closing back to stock. Refused for method A and outside double-entry. Once posted, repost reverses the old entry and writes a new one.

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

MCP tool: `post-stock-year-end`

### Request body

`year` integer required min 2000 max 2100

`repost` boolean

### Response · 200

`year` integer required

`canPost` boolean

`mode` string

`openingValueHaler` integer required

`closingValueHaler` integer required

`positions` object\[\]

`category` null | string required

`analytic` any required

Null in every recorded response.

`openingValueHaler` integer required

`closingValueHaler` integer required

`lines` object\[\]

`debitHaler` integer required

`creditHaler` integer required

`accountNumber` null | string required

`posted` any

Null in every recorded response.

`journalEntryId` null | string

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

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

```python
import os
import requests

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

## List item groups

GET `/v1/item-groups`

List item groups

MCP tool: `list-item-groups`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "item\_group" required

`id` string required

`name` string required

`code` string required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create an item group

POST `/v1/item-groups`

Create an item group

MCP tool: `create-item-group`

### Request body

`name` string required max 200 chars

`code` string required max 64 chars

### Response · 201

`id` string required

`name` string required

`code` string required

```bash
curl -X POST https://api.damedoklad.cz/v1/item-groups \
  -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/item-groups', {
  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/item-groups",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "code": "string"
    },
)
data = response.json()
```

## Rename an item group

PATCH `/v1/item-groups/{id}`

Rename an item group

MCP tool: `update-item-group`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`code` string max 64 chars

### Response · 200

`id` string required

`name` string required

`code` string required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/item-groups/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"
}'
```

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

```python
import os
import requests

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

## Delete an empty item group

DELETE `/v1/item-groups/{id}`

Delete an empty item group

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

MCP tool: `delete-item-group`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## List stock items and services with their prices

GET `/v1/items`

List stock items and services with their prices

MCP tool: `list-items`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`type` "goods" | "material" | "product" | "service"

`groupId` string

ID of the group.

`active` "true" | "false"

`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

### Response · 200

`data` object\[\] required

`object` "item" required

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

```python
import os
import requests

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

## Create a stock item or service

POST `/v1/items`

Create a stock item or service

MCP tool: `create-item`

### Request body

`sku` string required max 64 chars

`name` string required max 160 chars

`ean` string | null

`groupId` string | null

ID of the group.

`unit` string max 16 chars

`vatRate` 0 | 10 | 12 | 15 | 21

`type` "goods" | "material" | "product" | "service" required

`purchasePriceHaler` integer min 0 max 9007199254740991

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

`salePriceHaler` integer min 0 max 9007199254740991

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

`supplierId` string | null

ID of the supplier.

`minStock` number | null

`maxStock` number | null

`valuation` "fifo" | "weighted\_average"

`tracking` "none" | "serial" | "lot"

`tracksExpiry` boolean

`allowNegative` boolean | null

`isActive` boolean

`note` string | null

`weightKg` number | null

`gpsrId` string | null

ID of the gpsr.

`recyclingFeeId` string | null

ID of the recycling fee. Find it with list-recycling-fees.

`recyclingCoefficient` number | null

`portableBattery` boolean

`attributes` object

### Response · 201

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

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

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

```python
import os
import requests

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

## Get one item

GET `/v1/items/{id}`

Get one item

MCP tool: `get-item`

### Path parameters

`id` string required

### Response · 200

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

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

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

## Update an item. Valuation and tracking can only change while it holds no stock

PATCH `/v1/items/{id}`

Update an item. Valuation and tracking can only change while it holds no stock

MCP tool: `update-item`

### Path parameters

`id` string required

### Request body

`sku` string max 64 chars

`name` string max 160 chars

`ean` string | null

`groupId` string | null

ID of the group.

`unit` string max 16 chars

`vatRate` 0 | 10 | 12 | 15 | 21

`type` "goods" | "material" | "product" | "service"

`purchasePriceHaler` integer min 0 max 9007199254740991

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

`salePriceHaler` integer min 0 max 9007199254740991

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

`supplierId` string | null

ID of the supplier.

`minStock` number | null

`maxStock` number | null

`valuation` "fifo" | "weighted\_average"

`tracking` "none" | "serial" | "lot"

`tracksExpiry` boolean

`allowNegative` boolean | null

`isActive` boolean

`note` string | null

`weightKg` number | null

`gpsrId` string | null

ID of the gpsr.

`recyclingFeeId` string | null

ID of the recycling fee. Find it with list-recycling-fees.

`recyclingCoefficient` number | null

`portableBattery` boolean

`attributes` object

### Response · 200

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

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

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

```python
import os
import requests

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

## Delete an item that was never used. Used items can only be deactivated

DELETE `/v1/items/{id}`

Delete an item that was never used. Used items can only be deactivated

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

MCP tool: `delete-item`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

```python
import os
import requests

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

## What an item shows in e-shops: categories, attributes, descriptions, and the shops it is sold in

GET `/v1/items/{id}/catalog`

What an item shows in e-shops: categories, attributes, descriptions, and the shops it is sold in

MCP tool: `get-item-catalog`

### Path parameters

`id` string required

### Response · 200

`itemId` null | string required

`listed` boolean required

`shortDescription` null | string required

`description` null | string required

`categoryIds` string\[\] required

`parameters` object required

`shopIds` string\[\] required

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

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

## Set what an item shows in e-shops. Stock goes out only for an item listed in that shop

PUT `/v1/items/{id}/catalog`

Set what an item shows in e-shops. Stock goes out only for an item listed in that shop

MCP tool: `put-item-catalog`

### Path parameters

`id` string required

### Request body

`listed` boolean

`shortDescription` string | null

`description` string | null

`categoryIds` string\[\]

`parameters` object

Values by parameter ID

`shopIds` string\[\]

The shops this item is sold in. Stock goes only to these

### Response · 200

`itemId` null | string required

`listed` boolean required

`shortDescription` null | string required

`description` null | string required

`categoryIds` string\[\] required

`parameters` object required

`shopIds` string\[\] required

```bash
curl -X PUT https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/catalog \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "listed": false,
  "shortDescription": "Pečivo, říjen",
  "description": "Pečivo, říjen"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/catalog', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "listed": false,
    "shortDescription": "Pečivo, říjen",
    "description": "Pečivo, říjen"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/catalog",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "listed": False,
        "shortDescription": "Pečivo, říjen",
        "description": "Pečivo, říjen"
    },
)
data = response.json()
```

## List the images of an item

GET `/v1/items/{id}/images`

List the images of an item

MCP tool: `list-item-images`

### Path parameters

`id` string required

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "item\_image" required

`id` string required

`itemId` string required

`position` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Upload an image of an item (PNG, JPEG, or WebP, up to 2 MB)

POST `/v1/items/{id}/images`

Upload an image of an item (PNG, JPEG, or WebP, up to 2 MB)

MCP tool: `upload-item-image`

### Path parameters

`id` string required

### Request body

`fileBase64` string required max 4000000 chars

File content encoded as base64.

`contentType` "image/png" | "image/jpeg" | "image/webp" required

### Response · 201

`id` string required

`itemId` string required

`position` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/images \
  -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/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/images', {
  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/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/images",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "fileBase64": "string",
        "contentType": "image/png"
    },
)
data = response.json()
```

## Download an image of an item

GET `/v1/items/{id}/images/{imageId}`

Download an image of an item

MCP tool: `get-item-image`

### Path parameters

`id` string required

`imageId` string required

ID of the image.

### Response · 200

Returns a image/png file.

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

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

## Remove an image from an item

DELETE `/v1/items/{id}/images/{imageId}`

Remove an image from an item

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

MCP tool: `delete-item-image`

### Path parameters

`id` string required

`imageId` string required

ID of the image.

### Response · 200

`id` string required

`deleted` boolean required

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

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

## Components of a kit and how many whole sets the free stock makes

GET `/v1/items/{id}/kit`

Components of a kit and how many whole sets the free stock makes

MCP tool: `get-item-kit`

### Path parameters

`id` string required

### Response · 200

`itemId` null | string required

`isKit` boolean required

`availableSets` integer | null required

`componentCostHaler` integer required

`components` array | null required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`tracking` string required

`quantity` integer required

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

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

## Make the item a kit sold as a bundle: selling it moves its components. An empty list makes it an ordinary item again

PUT `/v1/items/{id}/kit`

Make the item a kit sold as a bundle: selling it moves its components. An empty list makes it an ordinary item again. A kit has no stock of its own. A sale of a kit moves its components: lots are taken by what expires first, and a serial-tracked component must be named on the document line, as a lot entry with its itemId.

MCP tool: `put-item-kit`

### Path parameters

`id` string required

### Request body

`components` object\[\] required

`itemId` string required

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

`quantity` number required max 1000000000

### Response · 200

`itemId` null | string required

`isKit` boolean required

`availableSets` integer | null required

`componentCostHaler` integer required

`components` array | null required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`tracking` string required

`quantity` integer required

```bash
curl -X PUT https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/kit \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "components": [
    {
      "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "quantity": 1
    }
  ]
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/kit",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "components": [
            {
                "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Sale price of an item for a customer, date, and quantity, after price lists and discounts

GET `/v1/items/{id}/price`

Sale price of an item for a customer, date, and quantity, after price lists and discounts

MCP tool: `get-item-price`

### Path parameters

`id` string required

### Query parameters

`contactId` string

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

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`quantity` number

### Response · 200

`itemId` null | string required

`vatRate` integer required

`grossPriceHaler` integer required

`priceHaler` integer required

`basePriceHaler` integer required

`priceListId` null | string required

`source` string required

`discountPercent` integer required

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

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

## What an item costs: last purchase price with and without landed costs, supplier prices, and the margin on its sale price

GET `/v1/items/{id}/purchase-info`

What an item costs: last purchase price with and without landed costs, supplier prices, and the margin on its sale price

MCP tool: `get-item-purchase-info`

### Path parameters

`id` string required

### Response · 200

`itemId` null | string required

`salePriceHaler` integer required

`lastPurchase` object required

`date` string required date

`documentNumber` null | string required

`supplierId` null | string required

`supplierName` null | string required

`unitPriceHaler` integer | null required

`landedUnitCostHaler` integer required

`supplierPrices` any\[\] required

`minMarginPercent` integer required

`margin` object required

`costHaler` integer required

`marginHaler` integer | null required

`marginPercent` integer | null required

`warning` null | string required

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

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

## Recompute an item in date order and show how it differs from the posted values, without changing anything

GET `/v1/items/{id}/revaluation`

Recompute an item in date order and show how it differs from the posted values, without changing anything. Differences appear when documents were backdated. Posted costs stay as they are unless a correction is posted. A corrected component cost is carried into the finished goods made from it: \`carried\` lists them, and \`totalDifferenceHaler\` is the whole effect.

MCP tool: `preview-item-revaluation`

### Path parameters

`id` string required

### Response · 200

`itemId` null | string required

`valuation` string

`warehouses` object\[\]

`warehouseId` null | string required

`quantity` integer required

`computedQuantity` integer required

`valueHaler` integer | null required

`computedValueHaler` integer required

`differenceHaler` integer required

`layers` object\[\] required

`id` string required

`seq` integer required

`receivedOn` null | string required date

`lotId` null | string required

`qtyMilli` integer required

`valueHaler` integer | null required

`issues` object\[\]

`id` string required

`postedCostHaler` integer required

`computedCostHaler` integer required

`differenceHaler` integer required

`differenceHaler` integer

`carried` object\[\]

`itemId` null | string required

`sku` string required

`name` null | string required

`differenceHaler` integer required

`warehouses` object\[\] required

`warehouseId` null | string required

`quantity` integer required

`computedQuantity` integer required

`valueHaler` integer | null required

`computedValueHaler` integer required

`differenceHaler` integer required

`layers` object\[\] required

`id` string required

`seq` integer required

`receivedOn` null | string required date

`lotId` string | null required

`qtyMilli` integer required

`valueHaler` integer | null required

`totalDifferenceHaler` integer

`postedHaler` integer

`journalEntryId` null | string

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

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

## Post the recompute difference as a dated correction. Earlier postings are never edited

POST `/v1/items/{id}/revaluation`

Post the recompute difference as a dated correction. Earlier postings are never edited. Send the differences the preview showed, of the item and of the finished goods it carries into: if history changed since, nothing is posted. Refused in a closed period. Everything posts in one entry, and earlier documents stay as they were.

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

MCP tool: `post-item-revaluation`

### Path parameters

`id` string required

### Request body

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`expectedDifferenceHaler` integer required min -9007199254740991 max 9007199254740991

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

`expectedCarried` object\[\]

`itemId` string required

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

`differenceHaler` integer required min -9007199254740991 max 9007199254740991

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

### Response · 200

`itemId` null | string required

`valuation` string

`warehouses` object\[\]

`warehouseId` null | string required

`quantity` integer required

`computedQuantity` integer required

`valueHaler` integer | null required

`computedValueHaler` integer required

`differenceHaler` integer required

`layers` object\[\] required

`id` string required

`seq` integer required

`receivedOn` null | string required date

`lotId` null | string required

`qtyMilli` integer required

`valueHaler` integer | null required

`issues` object\[\]

`id` string required

`postedCostHaler` integer required

`computedCostHaler` integer required

`differenceHaler` integer required

`differenceHaler` integer

`carried` object\[\]

`itemId` null | string required

`sku` string required

`name` null | string required

`differenceHaler` integer required

`warehouses` object\[\] required

`warehouseId` null | string required

`quantity` integer required

`computedQuantity` integer required

`valueHaler` integer | null required

`computedValueHaler` integer required

`differenceHaler` integer required

`layers` object\[\] required

`id` string required

`seq` integer required

`receivedOn` null | string required date

`lotId` string | null required

`qtyMilli` integer required

`valueHaler` integer | null required

`totalDifferenceHaler` integer

`postedHaler` integer

`journalEntryId` null | string

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

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

```python
import os
import requests

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

## Item card: balance per warehouse, cost layers, lots, reservations, and movement history

GET `/v1/items/{id}/stock`

Item card: balance per warehouse, cost layers, lots, reservations, and movement history

MCP tool: `get-item-stock`

### Path parameters

`id` string required

### Response · 200

`item` object required

`object` "item" required

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

`position` object required

`object` "stock\_position" required

`id` string required

`itemId` null | string required

`sku` string required

`name` null | string required

`ean` null | string required

`unit` null | string required

`type` string required

`valuation` string required

`tracking` string required

`onHand` number required

`reserved` integer required

`available` number required

`averageCostHaler` integer required

`valueHaler` integer | null required

`minStock` integer | null required

`maxStock` any required

Null in every recorded response.

`lowStock` boolean required

`warehouses` object\[\] required

`warehouseId` null | string required

`name` null | string required

`onHand` number required

`reserved` integer required

`available` number required

`valueHaler` integer | null required

`averageCostHaler` integer required

`layers` object\[\] required

`object` "stock\_layer" required

`id` string required

`itemId` string required

`warehouseId` string required

`lotId` null | string required

`receivedOn` string required date

`quantity` number required

`valueHaler` integer required

`unitCostHaler` integer | null required

`originalQuantity` integer required

`originalValueHaler` integer required

`warehouseName` string required

`lots` object\[\] required

`object` "stock\_lot" required

`id` string required

`itemId` string required

`kind` string required

`code` string required

`expiryDate` null | string required date

`receivedOn` string required date

`note` null | string required

`onHand` integer

`itemName` string

`itemSku` string

`unit` null | string

`warehouses` object\[\]

`warehouseId` null | string required

`name` null | string required

`onHand` integer required

`reservations` object\[\] required

`object` "stock\_reservation" required

`id` string required

`itemId` string required

`warehouseId` string required

`quantity` number required

`fulfilled` integer required

`remaining` number required

`status` string required

`orderId` null | string required

`orderLineId` null | string required

`orderNumber` null | string required

`contactId` null | string required

`reservedUntil` null | string required date

`note` string | null required

`itemName` string

`itemSku` string

`unit` null | string

`warehouseName` string

`movements` object\[\] required

`object` "movement" required

`id` string required

`warehouseId` string required

`toWarehouseId` null | string required

`itemId` string required

`type` string required

`quantity` number required

`delta` number required

`valueDeltaHaler` integer required

`date` string required date

`documentId` null | string required

`stocktakeId` null | string required

`invoiceId` null | string required

`deliveryNoteId` null | string required

`receivedInvoiceId` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`note` null | string required

`warehouseName` string

`documentNumber` null | string

`documentType` null | string

`balance` integer

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

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

## List an item's alternative units with their conversion to the base unit

GET `/v1/items/{id}/units`

List an item's alternative units with their conversion to the base unit

MCP tool: `get-item-units`

### Path parameters

`id` string required

### Response · 200

`itemId` string required

`baseUnit` string required

`units` object\[\] required

`object` "item\_unit" required

`id` string required

`itemId` string required

`unit` string required

`factor` integer required

`ean` null | string required

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

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

## Replace an item's alternative units, for example 1 balení = 12 ks, each optionally with its own barcode

PUT `/v1/items/{id}/units`

Replace an item's alternative units, for example 1 balení = 12 ks, each optionally with its own barcode. A document line in such a unit moves the converted quantity of the base unit. Stock always stays in the base unit.

MCP tool: `put-item-units`

### Path parameters

`id` string required

### Request body

`units` object\[\] required

`unit` string required max 16 chars

`factor` number required max 1000000000

`ean` string | null

### Response · 200

`itemId` string required

`baseUnit` string required

`units` object\[\] required

`object` "item\_unit" required

`id` string required

`itemId` string required

`unit` string required

`factor` integer required

`ean` null | string required

```bash
curl -X PUT https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/units \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "units": [
    {
      "unit": "string",
      "factor": 1
    }
  ]
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/items/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/units",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "units": [
            {
                "unit": "string",
                "factor": 1
            }
        ]
    },
)
data = response.json()
```

## List the variants of an item with their attributes

GET `/v1/items/{id}/variants`

List the variants of an item with their attributes

MCP tool: `list-item-variants`

### Path parameters

`id` string required

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "item" required

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a variant for every combination of attributes, for example Barva × Velikost. Each variant is an ordinary item with its own stock

POST `/v1/items/{id}/variants`

Create a variant for every combination of attributes, for example Barva × Velikost. Each variant is an ordinary item with its own stock. Variants take the unit, prices, VAT, valuation, and tracking of the parent. A combination that already exists is skipped, so the call can be repeated with a new value.

MCP tool: `create-item-variants`

### Path parameters

`id` string required

### Request body

`axes` object\[\] required

`name` string required max 40 chars

`values` string\[\] required

### Response · 201

`itemId` null | string required

`created` integer required

`data` object\[\] required

`object` "item" required

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

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

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

```python
import os
import requests

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

## Download all items as an XLSX workbook, ready to edit and import again

GET `/v1/items/export`

Download all items as an XLSX workbook, ready to edit and import again

MCP tool: `export-items`

### Response · 200

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

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

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

```python
import os
import requests

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

## Create or update items from an XLSX workbook, matched by SKU

POST `/v1/items/import`

Create or update items from an XLSX workbook, matched by SKU. Send the file as base64. With dryRun nothing is saved and the answer says what would happen. Rows with an error are skipped and listed.

MCP tool: `import-items`

### Request body

`fileBase64` string required max 40000000 chars

File content encoded as base64.

`dryRun` boolean

### Response · 200

`dryRun` boolean required

`created` integer required

`updated` integer required

`errors` object\[\] required

`line` integer required

`message` null | string required

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

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

```python
import os
import requests

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

## Labels with name, price, EAN bars, and a QR code as PDF: an A4 sheet of 3 × 8, or one 50 × 30 mm label per page for a label printer

GET `/v1/items/labels`

Labels with name, price, EAN bars, and a QR code as PDF: an A4 sheet of 3 × 8, or one 50 × 30 mm label per page for a label printer. Pass item ids separated by commas. An item with no valid EAN-13, EAN-8, or UPC-12 prints the QR code and its SKU only.

MCP tool: `get-item-labels`

### Query parameters

`ids` string required max 20000 chars

`copies` integer min 1 max 500

`layout` "sheet" | "roll"

`withPrice` "true" | "false"

`withGpsr` "true" | "false"

### Response · 200

Returns a application/pdf file.

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

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

## Find one item by exact SKU or EAN, as a barcode scanner would. A pack barcode also returns the pack unit and its size

GET `/v1/items/lookup`

Find one item by exact SKU or EAN, as a barcode scanner would. A pack barcode also returns the pack unit and its size

MCP tool: `lookup-item`

### Query parameters

`code` string required max 64 chars

### Response · 200

`id` string required

`sku` string required

`name` string required

`ean` null | string required

`groupId` null | string required

`unit` string required

`vatRate` integer required

`type` string required

`tracking` string required

`tracksExpiry` boolean required

`valuation` string required

`purchasePriceHaler` integer required

`salePriceHaler` integer required

`supplierId` null | string required

`minStock` null | number required

`maxStock` integer | null required

`allowNegative` boolean | null required

`isActive` boolean required

`note` string | null required

`weightKg` null | number required

`gpsrId` null | string required

`recyclingFeeId` null | string required

`recyclingCoefficient` null | number required

`customFields` object required

`barva` string

`zimni` string

`prumer` integer

`zaruka` string date

`vyrobce` string

`parentId` null | string required

`attributes` object required

`Barva` string

`Velikost` string

`isKit` boolean required

`portableBattery` boolean

`scannedUnit` string

`scannedFactor` integer

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

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

```python
import os
import requests

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

## Give many items the same GPSR record or recycling fee at once. Name only what should change; null clears it. Nothing already on a document changes, those lines are frozen

POST `/v1/items/product-data/assign`

Give many items the same GPSR record or recycling fee at once. Name only what should change; null clears it. Nothing already on a document changes, those lines are frozen

MCP tool: `assign-item-product-data`

### Request body

`itemIds` string\[\] required

`gpsrId` string | null

ID of the gpsr.

`recyclingFeeId` string | null

ID of the recycling fee. Find it with list-recycling-fees.

`recyclingCoefficient` number | null

### Response · 200

`updatedCount` integer required

`requestedCount` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/items/product-data/assign \
  -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/items/product-data/assign', {
  method: 'POST',
  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.post(
    "https://api.damedoklad.cz/v1/items/product-data/assign",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "itemIds": [
            "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        ]
    },
)
data = response.json()
```

## List stock movements, newest first, with quantity and value changes

GET `/v1/movements`

List stock movements, newest first, with quantity and value changes

MCP tool: `list-movements`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`itemId` string

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

`warehouseId` string

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

`type` string max 32 chars

### Response · 200

`data` object\[\] required

`object` "movement" required

`id` string required

`warehouseId` string required

`toWarehouseId` null | string required

`itemId` string required

`type` string required

`quantity` number required

`delta` number required

`valueDeltaHaler` integer required

`date` string required date

`documentId` null | string required

`stocktakeId` null | string required

`invoiceId` null | string required

`deliveryNoteId` null | string required

`receivedInvoiceId` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`note` null | string required

`warehouseName` string

`documentNumber` null | string

`documentType` null | string

`balance` integer

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

```python
import os
import requests

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

## Record one stock movement without a document

POST `/v1/movements`

Record one stock movement without a document. Prefer stock documents, which have numbers, PDFs, and storno. Refuses to oversell unless negative stock is allowed. Items tracked by lot or serial need a document. A stocktake quantity is signed: the difference to apply.

MCP tool: `create-movement`

### Request body

`warehouseId` string required

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

`toWarehouseId` string

ID of the to warehouse.

`itemId` string required

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

`type` "receipt" | "issue" | "transfer" | "stocktake" required

`quantity` number required

`unitPriceHaler` integer min 0 max 9007199254740991

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

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`documentId` string

ID of the document.

`note` string max 2000 chars

### Response · 201

`id` string required

`warehouseId` string required

`toWarehouseId` null | string required

`itemId` string required

`type` string required

`quantity` number required

`delta` number required

`valueDeltaHaler` integer required

`date` string required date

`documentId` null | string required

`stocktakeId` null | string required

`invoiceId` null | string required

`deliveryNoteId` null | string required

`receivedInvoiceId` null | string required

`reversalOfId` null | string required

`reversedById` null | string required

`note` null | string required

`warehouseName` string

`documentNumber` null | string

`documentType` null | string

`balance` integer

```bash
curl -X POST https://api.damedoklad.cz/v1/movements \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "type": "receipt",
  "quantity": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/movements', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "type": "receipt",
    "quantity": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/movements",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "type": "receipt",
        "quantity": 1
    },
)
data = response.json()
```

## List price lists

GET `/v1/price-lists`

List price lists

MCP tool: `list-price-lists`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "price\_list" required

`id` string required

`name` string required

`code` string required

`isDefault` boolean required

`discountPercent` integer required

`validFrom` null | string required date

`validTo` null | string required date

`note` string | null required

`items` object\[\]

`object` "price\_list\_item" required

`id` string required

`priceListId` string required

`itemId` string required

`priceHaler` integer required

`minQuantity` integer required

`itemName` string required

`itemSku` string required

`rules` object\[\]

`object` "price\_list\_rule" required

`id` string required

`priceListId` string required

`contactId` null | string required

`contactGroupId` string | null required

`discountPercent` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a price list with an optional overall discount and validity dates

POST `/v1/price-lists`

Create a price list with an optional overall discount and validity dates

MCP tool: `create-price-list`

### Request body

`name` string required max 200 chars

`code` string required max 64 chars

`isDefault` boolean

`discountPercent` number min 0 max 100

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

`note` string | null

### Response · 201

`id` string required

`name` string required

`code` string required

`isDefault` boolean required

`discountPercent` integer required

`validFrom` null | string required date

`validTo` null | string required date

`note` string | null required

`items` object\[\]

`object` "price\_list\_item" required

`id` string required

`priceListId` string required

`itemId` string required

`priceHaler` integer required

`minQuantity` integer required

`itemName` string required

`itemSku` string required

`rules` object\[\]

`object` "price\_list\_rule" required

`id` string required

`priceListId` string required

`contactId` null | string required

`contactGroupId` string | null required

`discountPercent` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/price-lists \
  -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/price-lists', {
  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/price-lists",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "code": "string"
    },
)
data = response.json()
```

## Get a price list with its prices and contact or group discounts

GET `/v1/price-lists/{id}`

Get a price list with its prices and contact or group discounts

MCP tool: `get-price-list`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` string required

`code` string required

`isDefault` boolean required

`discountPercent` integer required

`validFrom` null | string required date

`validTo` null | string required date

`note` string | null required

`items` object\[\]

`object` "price\_list\_item" required

`id` string required

`priceListId` string required

`itemId` string required

`priceHaler` integer required

`minQuantity` integer required

`itemName` string required

`itemSku` string required

`rules` object\[\]

`object` "price\_list\_rule" required

`id` string required

`priceListId` string required

`contactId` null | string required

`contactGroupId` string | null required

`discountPercent` integer required

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

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

## Update a price list

PATCH `/v1/price-lists/{id}`

Update a price list

MCP tool: `update-price-list`

### Path parameters

`id` string required

### Request body

`name` string max 200 chars

`code` string max 64 chars

`isDefault` boolean

`discountPercent` number min 0 max 100

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

`note` string | null

### Response · 200

`id` string required

`name` string required

`code` string required

`isDefault` boolean required

`discountPercent` integer required

`validFrom` null | string required date

`validTo` null | string required date

`note` string | null required

`items` object\[\]

`object` "price\_list\_item" required

`id` string required

`priceListId` string required

`itemId` string required

`priceHaler` integer required

`minQuantity` integer required

`itemName` string required

`itemSku` string required

`rules` object\[\]

`object` "price\_list\_rule" required

`id` string required

`priceListId` string required

`contactId` null | string required

`contactGroupId` string | null required

`discountPercent` integer required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/price-lists/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",
  "isDefault": false
}'
```

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

```python
import os
import requests

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

## Delete a price list with its prices and rules

DELETE `/v1/price-lists/{id}`

Delete a price list with its prices and rules

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

MCP tool: `delete-price-list`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## Download a price list as an XLSX workbook

GET `/v1/price-lists/{id}/export`

Download a price list as an XLSX workbook

MCP tool: `export-price-list`

### Path parameters

`id` string required

### Response · 200

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

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

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

```python
import os
import requests

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

## Set prices on a price list from an XLSX workbook, matched by SKU

POST `/v1/price-lists/{id}/import`

Set prices on a price list from an XLSX workbook, matched by SKU

MCP tool: `import-price-list`

### Path parameters

`id` string required

### Request body

`fileBase64` string required max 40000000 chars

File content encoded as base64.

`dryRun` boolean

### Response · 200

`dryRun` boolean required

`imported` integer required

`errors` object\[\] required

`line` integer required

`message` null | string required

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

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

```python
import os
import requests

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

## Set prices on a price list. A row with a minimum quantity is a quantity break

PUT `/v1/price-lists/{id}/items`

Set prices on a price list. A row with a minimum quantity is a quantity break

MCP tool: `put-price-list-items`

### Path parameters

`id` string required

### Request body

`items` object\[\] required

`itemId` string required

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

`priceHaler` integer required min 0 max 9007199254740991

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

`minQuantity` number min 0

### Response · 200

`id` string required

`name` string required

`code` string required

`isDefault` boolean required

`discountPercent` integer required

`validFrom` null | string required date

`validTo` null | string required date

`note` string | null required

`items` object\[\]

`object` "price\_list\_item" required

`id` string required

`priceListId` string required

`itemId` string required

`priceHaler` integer required

`minQuantity` integer required

`itemName` string required

`itemSku` string required

`rules` object\[\]

`object` "price\_list\_rule" required

`id` string required

`priceListId` string required

`contactId` null | string required

`contactGroupId` string | null required

`discountPercent` integer required

```bash
curl -X PUT https://api.damedoklad.cz/v1/price-lists/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/items \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "priceHaler": 1210000
    }
  ]
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/price-lists/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/items",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "items": [
            {
                "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "priceHaler": 1210000
            }
        ]
    },
)
data = response.json()
```

## Remove one price from a price list

DELETE `/v1/price-lists/{id}/items/{rowId}`

Remove one price from a price list

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

MCP tool: `delete-price-list-item`

### Path parameters

`id` string required

`rowId` string required

ID of the row.

### Response · 200

`id` string required

`deleted` boolean required

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

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

```python
import os
import requests

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

## Assign a price list to a contact or contact group, with an optional extra discount

POST `/v1/price-lists/{id}/rules`

Assign a price list to a contact or contact group, with an optional extra discount

MCP tool: `create-price-list-rule`

### Path parameters

`id` string required

### Request body

`contactId` string

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

`contactGroupId` string

ID of the contact group. Find it with list-contact-groups.

`discountPercent` number min 0 max 100

### Response · 201

`id` string required

`priceListId` string required

`contactId` null | string required

`contactGroupId` string | null required

`discountPercent` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/price-lists/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/rules \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "contactGroupId": "cgr_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "priceHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/price-lists/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/rules', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "contactGroupId": "cgr_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "priceHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/price-lists/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/rules",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "contactGroupId": "cgr_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "priceHaler": 1210000
    },
)
data = response.json()
```

## Remove a contact or group assignment from a price list

DELETE `/v1/price-lists/{id}/rules/{ruleId}`

Remove a contact or group assignment from a price list

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

MCP tool: `delete-price-list-rule`

### Path parameters

`id` string required

`ruleId` string required

ID of the rule.

### Response · 200

`id` string required

`deleted` boolean required

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

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

```python
import os
import requests

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

## List production requests: what should be produced, before anything moves in stock

GET `/v1/production-requests`

List production requests: what should be produced, before anything moves in stock

MCP tool: `list-production-requests`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "production\_request" required

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

```python
import os
import requests

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

## Plan a production from a bill of materials. Moves nothing in stock

POST `/v1/production-requests`

Plan a production from a bill of materials. Moves nothing in stock

MCP tool: `create-production-request`

### Request body

`bomId` string required

ID of the bom. Find it with list-boms.

`quantity` number required max 1000000000

`warehouseId` string required

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

`toWarehouseId` string | null

ID of the to warehouse.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`orderId` string | null

ID of the order.

`orderLineId` string | null

ID of the order line.

`note` string | null

### Response · 201

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/production-requests \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bomId": "wbm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "quantity": 1,
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/production-requests', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "bomId": "wbm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "quantity": 1,
    "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/production-requests",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "bomId": "wbm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "quantity": 1,
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
data = response.json()
```

## Get a production request with the components it needs

GET `/v1/production-requests/{id}`

Get a production request with the components it needs

MCP tool: `get-production-request`

### Path parameters

`id` string required

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

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

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

## Change an open production request. A reserved one cannot change its quantity or warehouse. Components of its own follow a new quantity, and lots picked for the old one are cleared

PATCH `/v1/production-requests/{id}`

Change an open production request. A reserved one cannot change its quantity or warehouse. Components of its own follow a new quantity, and lots picked for the old one are cleared

MCP tool: `update-production-request`

### Path parameters

`id` string required

### Request body

`quantity` number max 1000000000

`warehouseId` string

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

`toWarehouseId` string | null

ID of the to warehouse.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`note` string | null

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "quantity": 1,
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "toWarehouseId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "quantity": 1,
    "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "toWarehouseId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "quantity": 1,
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "toWarehouseId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
data = response.json()
```

## Cancel an open production request and give back what it reserved

POST `/v1/production-requests/{id}/cancel`

Cancel an open production request and give back what it reserved

MCP tool: `cancel-production-request`

### Path parameters

`id` string required

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

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

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

## Change what one production request uses: add, remove or change components, in the item unit or a pack, and pick lots or serial numbers. The bill of materials stays as it is

PUT `/v1/production-requests/{id}/components`

Change what one production request uses: add, remove or change components, in the item unit or a pack, and pick lots or serial numbers. The bill of materials stays as it is. components: null goes back to the bill of materials. A reserved request has to give its reservation back first, because the reservation holds the old components.

MCP tool: `put-production-request-components`

### Path parameters

`id` string required

### Request body

`components` object\[\] | null required

What this request uses. null goes back to the bill of materials

`itemId` string required

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

`quantity` number required max 1000000000

`unit` string max 16 chars

`lots` object\[\]

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number required max 1000000000

`expiryDate` string | null

Date as YYYY-MM-DD.

`outputLots` object\[\]

The lot or serial numbers the finished product will carry, when it is tracked

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number required max 1000000000

`expiryDate` string | null

Date as YYYY-MM-DD.

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

```bash
curl -X PUT https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/components \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "components": [
    {
      "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "quantity": 1
    }
  ]
}'
```

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

```python
import os
import requests

response = requests.put(
    "https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/components",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "components": [
            {
                "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Send a request to production: posts the production stock document, taking out components and adding the product

POST `/v1/production-requests/{id}/produce`

Send a request to production: posts the production stock document, taking out components and adding the product. What it reserved is given back first, because this is the production it was reserved for.

MCP tool: `produce-production-request`

### Path parameters

`id` string required

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`overrideReservations` boolean

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

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

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

```python
import os
import requests

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

## Reserve all components of a production request. A request is reserved whole or not at all

POST `/v1/production-requests/{id}/reserve`

Reserve all components of a production request. A request is reserved whole or not at all

MCP tool: `reserve-production-request`

### Path parameters

`id` string required

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/reserve \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Give back what a production request reserved

POST `/v1/production-requests/{id}/unreserve`

Give back what a production request reserved

MCP tool: `unreserve-production-request`

### Path parameters

`id` string required

### Response · 200

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/production-requests/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/unreserve \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

## Make one production request for each line of one or several received orders whose item has an active bill of materials, or only for the lines named

POST `/v1/production-requests/from-order`

Make one production request for each line of one or several received orders whose item has an active bill of materials, or only for the lines named. Lines already in a request are left out, so it can run again after the order changes. Give orderId, or orderIds for several at once.

MCP tool: `create-production-requests-from-order`

### Request body

`orderId` string

ID of the order.

`orderIds` string\[\]

Several received orders at once, POHODA's Přenést vše

`lineIds` string\[\]

Only these lines, POHODA's Přenést s výběrem položek

`warehouseId` string required

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

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

### Response · 201

`data` object\[\] required

`object` "production\_request" required

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`total` integer required

`hasMore` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/production-requests/from-order \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/production-requests/from-order",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
data = response.json()
```

## Plan several products at once, each from its bill of materials. All or none, and nothing moves in stock

POST `/v1/production-requests/many`

Plan several products at once, each from its bill of materials. All or none, and nothing moves in stock

MCP tool: `create-production-requests`

### Request body

`warehouseId` string required

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

`toWarehouseId` string | null

ID of the to warehouse.

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`lines` object\[\] required

`bomId` string required

ID of the bom. Find it with list-boms.

`quantity` number required max 1000000000

### Response · 201

`data` object\[\] required

`object` "production\_request" required

`id` string required

`number` string required

`date` string required date

`bomId` string required

`itemId` string required

`itemName` string required

`quantity` integer required

`unit` null | string required

`warehouseId` string required

`toWarehouseId` string | null required

`orderId` null | string required

`orderNumber` string | null required

`reserved` boolean required

`status` string required

`stockDocumentId` null | string required

`note` null | string required

`outputTracking` string

`outputLots` object\[\]

`lotId` string | null required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`componentsChanged` boolean

`components` array | null required

`itemId` string required

`name` null | string required

`unit` null | string required

`tracking` string

`quantity` number required

`enteredUnit` string | null

`enteredQuantity` any

Null in every recorded response.

`lots` object\[\]

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` string | null required

`total` integer required

`hasMore` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/production-requests/many \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "lines": [
    {
      "bomId": "wbm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
      "quantity": 1
    }
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/production-requests/many', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "lines": [
      {
        "bomId": "wbm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "quantity": 1
      }
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/production-requests/many",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "lines": [
            {
                "bomId": "wbm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
                "quantity": 1
            }
        ]
    },
)
data = response.json()
```

## Send many requests to production at once. Each runs on its own, so one that lacks stock or a lot stops nothing else, and the answer says what happened to each

POST `/v1/production-requests/produce-many`

Send many requests to production at once. Each runs on its own, so one that lacks stock or a lot stops nothing else, and the answer says what happened to each

MCP tool: `produce-production-requests`

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`overrideReservations` boolean

`ids` string\[\] required

### Response · 200

`results` object\[\] required

`id` string

`ok` boolean required

`error` null | string

`code` null | string

`number` null | string

`stockDocumentId` null | string

`documentId` null | string

`status` string

`contactName` null | string

`name` null | string

`to` string

`amountHaler` integer | null

`movementId` null | string

`row` integer

`recognised` boolean

`shipmentId` string

`trackingNumber` null | string

`total` integer required

`succeeded` integer required

`failed` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/production-requests/produce-many \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "ids": [
    "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/production-requests/produce-many', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "ids": [
      "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

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

## Add a transport or customs invoice to the cost of receipts: it moves to 131/111, and what the receipts did not expect is added to the goods

POST `/v1/received-invoices/{id}/landed-cost`

Add a transport or customs invoice to the cost of receipts: it moves to 131/111, and what the receipts did not expect is added to the goods. Legal effect: posts to the books. By default the invoice lines that do not move stock are allocated. Several receipts share the amount by value, each receipt's lines by value or weight. The first invoice answers for the landed cost the receipt stated, so a difference can be negative. Whatever has left stock goes to 504/501.

MCP tool: `allocate-landed-cost-invoice`

### Path parameters

`id` string required

### Request body

`stockDocumentIds` string\[\] required

`lineIds` string\[\]

`method` "value" | "weight"

### Response · 201

`receivedInvoiceId` null | string required

`data` object\[\] required

`object` "stock\_cost\_adjustment" required

`id` string required

`kind` string required

`stockDocumentId` null | string required

`stockDocumentNumber` string required

`itemId` string required

`statedHaler` integer required

`amountHaler` integer required

`stockHaler` integer required

`soldHaler` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/received-invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/landed-cost \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "stockDocumentIds": [
    "wdc_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
  ]
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/received-invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/landed-cost', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "stockDocumentIds": [
      "wdc_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    ]
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/received-invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/landed-cost",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "stockDocumentIds": [
            "wdc_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
        ]
    },
)
data = response.json()
```

## Take a transport or customs invoice off the receipts it was added to and reverse the postings

DELETE `/v1/received-invoices/{id}/landed-cost`

Take a transport or customs invoice off the receipts it was added to and reverse the postings

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

MCP tool: `remove-landed-cost-invoice`

### Path parameters

`id` string required

### Response · 200

`receivedInvoiceId` null | string required

`data` object\[\] required

`object` "stock\_cost\_adjustment" required

`id` string required

`kind` string required

`stockDocumentId` null | string required

`stockDocumentNumber` string required

`itemId` string required

`statedHaler` integer required

`amountHaler` integer required

`stockHaler` integer required

`soldHaler` integer required

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

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

## What this received invoice changed on the value of receipts: a price difference against the receipt, or transport allocated to it

GET `/v1/received-invoices/{id}/stock-costs`

What this received invoice changed on the value of receipts: a price difference against the receipt, or transport allocated to it

MCP tool: `get-received-invoice-stock-costs`

### Path parameters

`id` string required

### Response · 200

`receivedInvoiceId` null | string required

`data` object\[\] required

`object` "stock\_cost\_adjustment" required

`id` string required

`kind` string required

`stockDocumentId` null | string required

`stockDocumentNumber` string required

`itemId` string required

`statedHaler` integer required

`amountHaler` integer required

`stockHaler` integer required

`soldHaler` integer required

```bash
curl https://api.damedoklad.cz/v1/received-invoices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/stock-costs \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY"
```

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

```python
import os
import requests

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

## List RecyclingFees

GET `/v1/recycling-fees`

List RecyclingFees

MCP tool: `list-recycling-fees`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "recycling\_fee" required

`id` string required

`code` string required

`name` string required

`rateHaler` integer required

`unit` string required

`documentText` null | string required

`isActive` boolean required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a RecyclingFee

POST `/v1/recycling-fees`

Create a RecyclingFee

MCP tool: `create-recycling-fee`

### Request body

`code` string required max 32 chars

`name` string required max 200 chars

`rateHaler` integer required min 0 max 9007199254740991

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

`unit` string max 10 chars

`documentText` string | null

`isActive` boolean

### Response · 201

`id` string required

`code` string required

`name` string required

`rateHaler` integer required

`unit` string required

`documentText` null | string required

`isActive` boolean required

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

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

```python
import os
import requests

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

## Get a RecyclingFee

GET `/v1/recycling-fees/{id}`

Get a RecyclingFee

MCP tool: `get-recycling-fee`

### Path parameters

`id` string required

### Response · 200

`id` string required

`code` string required

`name` string required

`rateHaler` integer required

`unit` string required

`documentText` null | string required

`isActive` boolean required

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

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

## Update a RecyclingFee

PATCH `/v1/recycling-fees/{id}`

Update a RecyclingFee

MCP tool: `update-recycling-fee`

### Path parameters

`id` string required

### Request body

`code` string max 32 chars

`name` string max 200 chars

`rateHaler` integer min 0 max 9007199254740991

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

`unit` string max 10 chars

`documentText` string | null

`isActive` boolean

### Response · 200

`id` string required

`code` string required

`name` string required

`rateHaler` integer required

`unit` string required

`documentText` null | string required

`isActive` boolean required

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

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

```python
import os
import requests

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

## Delete a RecyclingFee

DELETE `/v1/recycling-fees/{id}`

Delete a RecyclingFee

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

MCP tool: `delete-recycling-fee`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## All recycling fees as a POHODA XML file (recyclingContrib.xsd, version 2.0), to load into POHODA

GET `/v1/recycling-fees/export.xml`

All recycling fees as a POHODA XML file (recyclingContrib.xsd, version 2.0), to load into POHODA

MCP tool: `export-recycling-fees-xml`

### Response · 200

Returns a application/xml file.

```bash
curl https://api.damedoklad.cz/v1/recycling-fees/export.xml \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -o soubor
```

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

```python
import os
import requests

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

## Recycling fees charged in a period, per fee: quantity sold, weight, and total in crowns, from issued invoices, credit notes, and receipts

GET `/v1/recycling-fees/report`

Recycling fees charged in a period, per fee: quantity sold, weight, and total in crowns, from issued invoices, credit notes, and receipts

MCP tool: `get-recycling-report`

### Query parameters

`from` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`direction` "sold" | "purchased"

sold: what this company charged. purchased: what suppliers stated on received invoices

### Response · 200

`data` object\[\] required

`object` "recycling\_report\_row" required

`feeId` null | string required

`typed` boolean required

`code` null | string required

`name` null | string required

`quantityMilli` integer | null required

`weightMilli` integer required

`totalHaler` integer | null required

`unit` null | string required

`total` integer required

`hasMore` boolean required

`totalHaler` integer | null required

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

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

```python
import os
import requests

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

## List stock positions: on hand, reserved, available, average cost, value, and low-stock flag per item

GET `/v1/stock`

List stock positions: on hand, reserved, available, average cost, value, and low-stock flag per item

MCP tool: `list-stock`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`warehouseId` string

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

`groupId` string

ID of the group.

`lowStock` "true" | "false"

`inStock` "true" | "false"

### Response · 200

`data` object\[\] required

`object` "stock\_position" required

`id` string required

`itemId` null | string required

`sku` string required

`name` null | string required

`ean` null | string required

`unit` null | string required

`type` string required

`valuation` string required

`tracking` string required

`onHand` number required

`reserved` integer required

`available` number required

`averageCostHaler` integer required

`valueHaler` integer | null required

`minStock` integer | null required

`maxStock` any required

Null in every recorded response.

`lowStock` boolean required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## List stock documents: receipts, issues, transfers, and production

GET `/v1/stock-documents`

List stock documents: receipts, issues, transfers, and production

MCP tool: `list-stock-documents`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`type` "receipt" | "issue" | "transfer" | "production"

`status` "draft" | "posted" | "storno"

`warehouseId` string

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

`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

### Response · 200

`data` object\[\] required

`object` "stock\_document" required

`id` string required

`type` string required

`reason` string required

`status` string required

`number` null | string required

`date` string required date

`warehouseId` string required

`toWarehouseId` null | string required

`contactId` null | string required

`contactName` null | string required

`bomId` null | string required

`quantity` integer | null required

`extraCostHaler` integer required

`landedCosts` object\[\] required

`label` null | string required

`method` null | string

`amountHaler` integer | null required

`totalValueHaler` integer required

`invoiceId` null | string required

`receivedInvoiceId` null | string required

`deliveryNoteId` null | string required

`orderId` null | string required

`orderNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`stornoDate` null | string required date

`note` null | string required

`customFields` object

`tistene_pole` string

`lines` object\[\]

`object` "stock\_document\_line" required

`id` string required

`role` string required

`itemId` string required

`warehouseId` null | string required

`quantity` number required

`unitPriceHaler` integer | null required

`valueHaler` integer | null required

`postedValueHaler` integer | null required

`lots` object\[\] required

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` null | string required date

`reservationId` null | string required

`orderLineId` null | string required

`landedCostHaler` integer required

`enteredUnit` null | string required

`enteredQuantity` integer | null required

`locationId` null | string required

`toLocationId` null | string required

`note` string | null required

`itemName` string required

`itemSku` string required

`unit` null | string required

`creditWarning` object

`level` string required

`exposureHaler` integer required

`afterHaler` integer required

`warnHaler` any required

Null in every recorded response.

`blockHaler` integer required

`availableHaler` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a stock document as a draft, or post it at once with post: true

POST `/v1/stock-documents`

Create a stock document as a draft, or post it at once with post: true. Production documents take bomId and quantity and fill their lines from the bill of materials.

MCP tool: `create-stock-document`

### Request body

`type` "receipt" | "issue" | "transfer" | "production" required

`landedCosts` object\[\]

`label` string required max 120 chars

`amountHaler` integer required min 0 max 9007199254740991

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

`method` "value" | "weight"

`reason` "purchase" | "return\_customer" | "opening" | "other\_receipt" | "sale" | "consumption" | "return\_supplier" | "warranty\_repair" | "loss" | "transfer" | "production"

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`warehouseId` string required

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

`toWarehouseId` string | null

ID of the to warehouse.

`extraCostHaler` integer min 0 max 9007199254740991

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

`bomId` string

ID of the bom. Find it with list-boms.

`quantity` number max 1000000000

`lines` object\[\]

`itemId` string required

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

`unit` string max 16 chars

`locationId` string | null

ID of the location.

`toLocationId` string | null

ID of the to location.

`role` "line" | "component" | "output"

`quantity` number required max 1000000000

`unitPriceHaler` integer min 0 max 9007199254740991

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

`valueHaler` integer min 0 max 9007199254740991

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

`lots` object\[\]

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number max 1000000000

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`reservationId` string

ID of the reservation.

`note` string max 2000 chars

`post` boolean

`overrideReservations` boolean

`overrideCreditLimit` boolean

`contactId` string | null

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

`invoiceId` string | null

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

`receivedInvoiceId` string | null

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

`deliveryNoteId` string | null

ID of the delivery note. Find it with list-delivery-notes.

`orderId` string | null

ID of the order.

`orderNumber` string | null

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

`note` string | null

### Response · 201

`id` string required

`type` string required

`reason` string required

`status` string required

`number` null | string required

`date` string required date

`warehouseId` string required

`toWarehouseId` null | string required

`contactId` null | string required

`contactName` null | string required

`bomId` null | string required

`quantity` integer | null required

`extraCostHaler` integer required

`landedCosts` object\[\] required

`label` null | string required

`method` null | string

`amountHaler` integer | null required

`totalValueHaler` integer required

`invoiceId` null | string required

`receivedInvoiceId` null | string required

`deliveryNoteId` null | string required

`orderId` null | string required

`orderNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`stornoDate` null | string required date

`note` null | string required

`customFields` object

`tistene_pole` string

`lines` object\[\]

`object` "stock\_document\_line" required

`id` string required

`role` string required

`itemId` string required

`warehouseId` null | string required

`quantity` number required

`unitPriceHaler` integer | null required

`valueHaler` integer | null required

`postedValueHaler` integer | null required

`lots` object\[\] required

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` null | string required date

`reservationId` null | string required

`orderLineId` null | string required

`landedCostHaler` integer required

`enteredUnit` null | string required

`enteredQuantity` integer | null required

`locationId` null | string required

`toLocationId` null | string required

`note` string | null required

`itemName` string required

`itemSku` string required

`unit` null | string required

`creditWarning` object

`level` string required

`exposureHaler` integer required

`afterHaler` integer required

`warnHaler` any required

Null in every recorded response.

`blockHaler` integer required

`availableHaler` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/stock-documents \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "type": "receipt",
  "date": "2026-10-30",
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
}'
```

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

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/stock-documents",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "type": "receipt",
        "date": "2026-10-30",
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL"
    },
)
data = response.json()
```

## Get a stock document with its lines

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

Get a stock document with its lines

MCP tool: `get-stock-document`

### Path parameters

`id` string required

### Response · 200

`id` string required

`type` string required

`reason` string required

`status` string required

`number` null | string required

`date` string required date

`warehouseId` string required

`toWarehouseId` null | string required

`contactId` null | string required

`contactName` null | string required

`bomId` null | string required

`quantity` integer | null required

`extraCostHaler` integer required

`landedCosts` object\[\] required

`label` null | string required

`method` null | string

`amountHaler` integer | null required

`totalValueHaler` integer required

`invoiceId` null | string required

`receivedInvoiceId` null | string required

`deliveryNoteId` null | string required

`orderId` null | string required

`orderNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`stornoDate` null | string required date

`note` null | string required

`customFields` object

`tistene_pole` string

`lines` object\[\]

`object` "stock\_document\_line" required

`id` string required

`role` string required

`itemId` string required

`warehouseId` null | string required

`quantity` number required

`unitPriceHaler` integer | null required

`valueHaler` integer | null required

`postedValueHaler` integer | null required

`lots` object\[\] required

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` null | string required date

`reservationId` null | string required

`orderLineId` null | string required

`landedCostHaler` integer required

`enteredUnit` null | string required

`enteredQuantity` integer | null required

`locationId` null | string required

`toLocationId` null | string required

`note` string | null required

`itemName` string required

`itemSku` string required

`unit` null | string required

`creditWarning` object

`level` string required

`exposureHaler` integer required

`afterHaler` integer required

`warnHaler` any required

Null in every recorded response.

`blockHaler` integer required

`availableHaler` integer required

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

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

## Edit a draft stock document

PATCH `/v1/stock-documents/{id}`

Edit a draft stock document

MCP tool: `update-stock-document`

### Path parameters

`id` string required

### Request body

`landedCosts` object\[\]

`label` string required max 120 chars

`amountHaler` integer required min 0 max 9007199254740991

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

`method` "value" | "weight"

`reason` "purchase" | "return\_customer" | "opening" | "other\_receipt" | "sale" | "consumption" | "return\_supplier" | "warranty\_repair" | "loss" | "transfer" | "production"

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`warehouseId` string

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

`toWarehouseId` string | null

ID of the to warehouse.

`extraCostHaler` integer min 0 max 9007199254740991

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

`bomId` string

ID of the bom. Find it with list-boms.

`quantity` number max 1000000000

`lines` object\[\]

`itemId` string required

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

`unit` string max 16 chars

`locationId` string | null

ID of the location.

`toLocationId` string | null

ID of the to location.

`role` "line" | "component" | "output"

`quantity` number required max 1000000000

`unitPriceHaler` integer min 0 max 9007199254740991

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

`valueHaler` integer min 0 max 9007199254740991

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

`lots` object\[\]

`lotId` string

ID of the lot.

`code` string max 64 chars

`quantity` number max 1000000000

`expiryDate` string | null

Date as YYYY-MM-DD.

`serialNumbers` string\[\]

`reservationId` string

ID of the reservation.

`note` string max 2000 chars

`overrideCreditLimit` boolean

`contactId` string | null

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

`invoiceId` string | null

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

`receivedInvoiceId` string | null

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

`deliveryNoteId` string | null

ID of the delivery note. Find it with list-delivery-notes.

`orderId` string | null

ID of the order.

`orderNumber` string | null

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

`note` string | null

### Response · 200

`id` string required

`type` string required

`reason` string required

`status` string required

`number` null | string required

`date` string required date

`warehouseId` string required

`toWarehouseId` null | string required

`contactId` null | string required

`contactName` null | string required

`bomId` null | string required

`quantity` integer | null required

`extraCostHaler` integer required

`landedCosts` object\[\] required

`label` null | string required

`method` null | string

`amountHaler` integer | null required

`totalValueHaler` integer required

`invoiceId` null | string required

`receivedInvoiceId` null | string required

`deliveryNoteId` null | string required

`orderId` null | string required

`orderNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`stornoDate` null | string required date

`note` null | string required

`customFields` object

`tistene_pole` string

`lines` object\[\]

`object` "stock\_document\_line" required

`id` string required

`role` string required

`itemId` string required

`warehouseId` null | string required

`quantity` number required

`unitPriceHaler` integer | null required

`valueHaler` integer | null required

`postedValueHaler` integer | null required

`lots` object\[\] required

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` null | string required date

`reservationId` null | string required

`orderLineId` null | string required

`landedCostHaler` integer required

`enteredUnit` null | string required

`enteredQuantity` integer | null required

`locationId` null | string required

`toLocationId` null | string required

`note` string | null required

`itemName` string required

`itemSku` string required

`unit` null | string required

`creditWarning` object

`level` string required

`exposureHaler` integer required

`afterHaler` integer required

`warnHaler` any required

Null in every recorded response.

`blockHaler` integer required

`availableHaler` integer required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/stock-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "landedCosts": [
    {
      "label": "string",
      "amountHaler": 1210000
    }
  ],
  "reason": "purchase",
  "date": "2026-10-30"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/stock-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "landedCosts": [
      {
        "label": "string",
        "amountHaler": 1210000
      }
    ],
    "reason": "purchase",
    "date": "2026-10-30"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/stock-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "landedCosts": [
            {
                "label": "string",
                "amountHaler": 1210000
            }
        ],
        "reason": "purchase",
        "date": "2026-10-30"
    },
)
data = response.json()
```

## Delete a draft stock document

DELETE `/v1/stock-documents/{id}`

Delete a draft stock document

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

MCP tool: `delete-stock-document`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## Download a stock document as PDF, in Czech, English, German or French

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

Download a stock document as PDF, in Czech, English, German or French

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

### Path parameters

`id` string required

### Query parameters

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

### Response · 200

Returns a application/pdf file.

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

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

```python
import os
import requests

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

## Post a draft: assign a number, move stock, and write the accounting entry

POST `/v1/stock-documents/{id}/post`

Post a draft: assign a number, move stock, and write the accounting entry. Refuses to oversell unless negative stock is allowed. Set overrideReservations to issue stock reserved for other orders. A sale to a contact over Kredit max is refused with credit\_limit\_exceeded; an owner or accountant may set overrideCreditLimit.

MCP tool: `post-stock-document`

### Path parameters

`id` string required

### Request body

`overrideReservations` boolean

`overrideCreditLimit` boolean

### Response · 200

`id` string required

`type` string required

`reason` string required

`status` string required

`number` null | string required

`date` string required date

`warehouseId` string required

`toWarehouseId` null | string required

`contactId` null | string required

`contactName` null | string required

`bomId` null | string required

`quantity` integer | null required

`extraCostHaler` integer required

`landedCosts` object\[\] required

`label` null | string required

`method` null | string

`amountHaler` integer | null required

`totalValueHaler` integer required

`invoiceId` null | string required

`receivedInvoiceId` null | string required

`deliveryNoteId` null | string required

`orderId` null | string required

`orderNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`stornoDate` null | string required date

`note` null | string required

`customFields` object

`tistene_pole` string

`lines` object\[\]

`object` "stock\_document\_line" required

`id` string required

`role` string required

`itemId` string required

`warehouseId` null | string required

`quantity` number required

`unitPriceHaler` integer | null required

`valueHaler` integer | null required

`postedValueHaler` integer | null required

`lots` object\[\] required

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` null | string required date

`reservationId` null | string required

`orderLineId` null | string required

`landedCostHaler` integer required

`enteredUnit` null | string required

`enteredQuantity` integer | null required

`locationId` null | string required

`toLocationId` null | string required

`note` string | null required

`itemName` string required

`itemSku` string required

`unit` null | string required

`creditWarning` object

`level` string required

`exposureHaler` integer required

`afterHaler` integer required

`warnHaler` any required

Null in every recorded response.

`blockHaler` integer required

`availableHaler` integer required

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

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

```python
import os
import requests

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

## Reverse a posted stock document with opposite movements and journal entries

POST `/v1/stock-documents/{id}/storno`

Reverse a posted stock document with opposite movements and journal entries. Refused when received stock was already issued, or when the document came from an invoice or delivery note: storno that document instead.

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

MCP tool: `storno-stock-document`

### Path parameters

`id` string required

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`note` string max 2000 chars

### Response · 200

`id` string required

`type` string required

`reason` string required

`status` string required

`number` null | string required

`date` string required date

`warehouseId` string required

`toWarehouseId` null | string required

`contactId` null | string required

`contactName` null | string required

`bomId` null | string required

`quantity` integer | null required

`extraCostHaler` integer required

`landedCosts` object\[\] required

`label` null | string required

`method` null | string

`amountHaler` integer | null required

`totalValueHaler` integer required

`invoiceId` null | string required

`receivedInvoiceId` null | string required

`deliveryNoteId` null | string required

`orderId` null | string required

`orderNumber` null | string required

`sourceType` null | string required

`sourceId` null | string required

`centerId` string | null required

`activityId` string | null required

`projectId` string | null required

`stornoDate` null | string required date

`note` null | string required

`customFields` object

`tistene_pole` string

`lines` object\[\]

`object` "stock\_document\_line" required

`id` string required

`role` string required

`itemId` string required

`warehouseId` null | string required

`quantity` number required

`unitPriceHaler` integer | null required

`valueHaler` integer | null required

`postedValueHaler` integer | null required

`lots` object\[\] required

`lotId` null | string required

`code` null | string required

`quantity` integer required

`expiryDate` null | string required date

`reservationId` null | string required

`orderLineId` null | string required

`landedCostHaler` integer required

`enteredUnit` null | string required

`enteredQuantity` integer | null required

`locationId` null | string required

`toLocationId` null | string required

`note` string | null required

`itemName` string required

`itemSku` string required

`unit` null | string required

`creditWarning` object

`level` string required

`exposureHaler` integer required

`afterHaler` integer required

`warnHaler` any required

Null in every recorded response.

`blockHaler` integer required

`availableHaler` integer required

```bash
curl -X POST https://api.damedoklad.cz/v1/stock-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/storno \
  -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/stock-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/storno', {
  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/stock-documents/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/storno",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "date": "2026-10-30",
        "note": "string"
    },
)
data = response.json()
```

## What sits on which location, per item and lot. Stock on no location is listed as unplaced when an item is given

GET `/v1/stock-locations`

What sits on which location, per item and lot. Stock on no location is listed as unplaced when an item is given

MCP tool: `list-stock-location-balances`

### Query parameters

`warehouseId` string

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

`itemId` string

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

`locationId` string

ID of the location.

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`itemId` null | string required

`sku` string required

`name` null | string required

`unit` null | string required

`locationId` null | string required

`locationCode` string required

`warehouseId` null | string required

`lotId` null | string required

`lotCode` null | string required

`quantity` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Move goods between locations of one warehouse. Quantity only: no value change and no accounting entry

POST `/v1/stock-locations/transfer`

Move goods between locations of one warehouse. Quantity only: no value change and no accounting entry. Leave fromLocationId empty to shelve unplaced stock, toLocationId empty to take it off a location. A lot- or serial-tracked item names lotId or lotCode.

MCP tool: `transfer-stock-location`

### Request body

`itemId` string required

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

`warehouseId` string required

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

`fromLocationId` string | null

ID of the from location.

`toLocationId` string | null

ID of the to location.

`lotId` string | null

ID of the lot.

`lotCode` string | null

`quantity` number required max 1000000000

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`note` string max 2000 chars

### Response · 200

`movementId` null | string required

`itemId` null | string required

`quantity` integer required

`fromLocationId` null | string required

`toLocationId` null | string required

`lotId` null | string required

```bash
curl -X POST https://api.damedoklad.cz/v1/stock-locations/transfer \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "quantity": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/stock-locations/transfer', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "quantity": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/stock-locations/transfer",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "quantity": 1
    },
)
data = response.json()
```

## List lots and serial numbers with expiry and quantity in stock

GET `/v1/stock-lots`

List lots and serial numbers with expiry and quantity in stock

MCP tool: `list-stock-lots`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`itemId` string

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

`expiringBefore` string YYYY-MM-DD

Date as YYYY-MM-DD.

`inStock` "true" | "false"

### Response · 200

`data` object\[\] required

`object` "stock\_lot" required

`id` string required

`itemId` string required

`kind` string required

`code` string required

`expiryDate` null | string required date

`receivedOn` string required date

`note` null | string required

`onHand` integer

`itemName` string

`itemSku` string

`unit` null | string

`warehouses` object\[\]

`warehouseId` null | string required

`name` null | string required

`onHand` integer required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Correct the expiry date or note of a lot

PATCH `/v1/stock-lots/{id}`

Correct the expiry date or note of a lot

MCP tool: `update-stock-lot`

### Path parameters

`id` string required

### Request body

`expiryDate` string | null

Date as YYYY-MM-DD.

`note` string | null

### Response · 200

`id` string required

`itemId` string required

`kind` string required

`code` string required

`expiryDate` null | string required date

`receivedOn` string required date

`note` null | string required

`onHand` integer

`itemName` string

`itemSku` string

`unit` null | string

`warehouses` object\[\]

`warehouseId` null | string required

`name` null | string required

`onHand` integer required

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

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

```python
import os
import requests

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

## List stock reservations for received orders

GET `/v1/stock-reservations`

List stock reservations for received orders

MCP tool: `list-stock-reservations`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`itemId` string

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

`status` "active" | "fulfilled" | "released"

`orderId` string max 64 chars

ID of the order.

### Response · 200

`data` object\[\] required

`object` "stock\_reservation" required

`id` string required

`itemId` string required

`warehouseId` string required

`quantity` number required

`fulfilled` integer required

`remaining` number required

`status` string required

`orderId` null | string required

`orderLineId` null | string required

`orderNumber` null | string required

`contactId` null | string required

`reservedUntil` null | string required date

`note` string | null required

`itemName` string

`itemSku` string

`unit` null | string

`warehouseName` string

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Reserve stock for a received order

POST `/v1/stock-reservations`

Reserve stock for a received order. Refused when less is available than requested, unless allowShort is set. Set orderLineId to make repeated calls for one order line idempotent.

MCP tool: `create-stock-reservation`

### Request body

`itemId` string required

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

`warehouseId` string required

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

`quantity` number required max 1000000000

`orderId` string | null

ID of the order.

`orderLineId` string | null

ID of the order line.

`orderNumber` string | null

`contactId` string | null

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

`reservedUntil` string | null

`note` string | null

`allowShort` boolean

### Response · 201

`id` string required

`itemId` string required

`warehouseId` string required

`quantity` number required

`fulfilled` integer required

`remaining` number required

`status` string required

`orderId` null | string required

`orderLineId` null | string required

`orderNumber` null | string required

`contactId` null | string required

`reservedUntil` null | string required date

`note` string | null required

`itemName` string

`itemSku` string

`unit` null | string

`warehouseName` string

```bash
curl -X POST https://api.damedoklad.cz/v1/stock-reservations \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "quantity": 1
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/stock-reservations', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "quantity": 1
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/stock-reservations",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "contactId": "con_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "quantity": 1
    },
)
data = response.json()
```

## Mark a reservation as fulfilled when the goods left on a document without a link to it

POST `/v1/stock-reservations/{id}/fulfil`

Mark a reservation as fulfilled when the goods left on a document without a link to it. Does not move stock. An issue document that names the reservation fulfils it by itself.

MCP tool: `fulfil-stock-reservation`

### Path parameters

`id` string required

### Request body

`quantity` number max 1000000000

### Response · 200

`id` string required

`itemId` string required

`warehouseId` string required

`quantity` number required

`fulfilled` integer required

`remaining` number required

`status` string required

`orderId` null | string required

`orderLineId` null | string required

`orderNumber` null | string required

`contactId` null | string required

`reservedUntil` null | string required date

`note` string | null required

`itemName` string

`itemSku` string

`unit` null | string

`warehouseName` string

```bash
curl -X POST https://api.damedoklad.cz/v1/stock-reservations/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/fulfil \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "quantity": 1
}'
```

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

```python
import os
import requests

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

## Release a reservation, returning its remaining quantity to available stock

POST `/v1/stock-reservations/{id}/release`

Release a reservation, returning its remaining quantity to available stock

MCP tool: `release-stock-reservation`

### Path parameters

`id` string required

### Response · 200

`id` string required

`itemId` string required

`warehouseId` string required

`quantity` number required

`fulfilled` integer required

`remaining` number required

`status` string required

`orderId` null | string required

`orderLineId` null | string required

`orderNumber` null | string required

`contactId` null | string required

`reservedUntil` null | string required date

`note` string | null required

`itemName` string

`itemSku` string

`unit` null | string

`warehouseName` string

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

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

## Check whether a quantity of an item is available, in total or in one warehouse

GET `/v1/stock/availability`

Check whether a quantity of an item is available, in total or in one warehouse. Available is on hand minus active reservations. \`sufficient\` compares it with the requested quantity.

MCP tool: `get-stock-availability`

### Query parameters

`itemId` string required

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

`warehouseId` string

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

`quantity` number

### Response · 200

`itemId` null | string required

`onHand` integer required

`reserved` integer required

`available` integer required

`requested` integer | null required

`sufficient` boolean | null required

`short` integer | null required

`warehouses` object\[\] required

`warehouseId` null | string required

`name` null | string required

`onHand` integer required

`reserved` integer required

`available` integer required

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

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

## Total stock value and how many items are below their minimum

GET `/v1/stock/summary`

Total stock value and how many items are below their minimum

MCP tool: `get-stock-summary`

### Response · 200

`valueHaler` integer | null required

`itemCount` integer required

`lowStockCount` integer required

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

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

## List stocktakes

GET `/v1/stocktakes`

List stocktakes

MCP tool: `list-stocktakes`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "stocktake" required

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Start a stocktake: freezes the quantities of a warehouse, or of one item group in it, in total or shelf by shelf

POST `/v1/stocktakes`

Start a stocktake: freezes the quantities of a warehouse, or of one item group in it, in total or shelf by shelf. While it runs, movements in the warehouse are refused unless blockMovements is false. One stocktake per warehouse at a time. byLocation freezes one line per item, lot, and shelf, plus what is on no shelf; locationId counts one shelf only. Goods found on another shelf of the warehouse become a shelf move, not a shortage and a surplus.

MCP tool: `create-stocktake`

### Request body

`warehouseId` string required

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

`date` string required YYYY-MM-DD

Date as YYYY-MM-DD.

`groupId` string | null

ID of the group.

`byLocation` boolean

`locationId` string | null

ID of the location.

`blockMovements` boolean

`note` string | null

### Response · 201

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

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

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

```python
import os
import requests

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

## Get a stocktake with its frozen quantities, counts, and differences

GET `/v1/stocktakes/{id}`

Get a stocktake with its frozen quantities, counts, and differences

MCP tool: `get-stocktake`

### Path parameters

`id` string required

### Response · 200

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

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

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

## Cancel a running stocktake and unblock the warehouse. Nothing is posted

POST `/v1/stocktakes/{id}/cancel`

Cancel a running stocktake and unblock the warehouse. Nothing is posted

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

MCP tool: `cancel-stocktake`

### Path parameters

`id` string required

### Response · 200

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

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

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

## Record counted quantities. An item not on the list is added at frozen zero

POST `/v1/stocktakes/{id}/counts`

Record counted quantities. An item not on the list is added at frozen zero

MCP tool: `record-stocktake-counts`

### Path parameters

`id` string required

### Request body

`counts` object\[\] required

`lineId` string

ID of the line.

`itemId` string

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

`lotCode` string max 64 chars

`locationId` string | null

ID of the location.

`quantity` number | null required

`unitCostHaler` integer min 0 max 9007199254740991

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

`withinNorm` boolean

`note` string | null

### Response · 200

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/stocktakes/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL/counts \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "counts": [
    {
      "quantity": 1
    }
  ]
}'
```

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

```python
import os
import requests

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

## Record counts from CSV with a code column (SKU or EAN), a quantity column, and optionally lot and shelf columns

POST `/v1/stocktakes/{id}/import`

Record counts from CSV with a code column (SKU or EAN), a quantity column, and optionally lot and shelf columns. Semicolon and comma separated files both work, with a decimal comma or point. Rows with an error are skipped and returned.

MCP tool: `import-stocktake-counts`

### Path parameters

`id` string required

### Request body

`csv` string required max 5000000 chars

### Response · 200

`imported` integer required

`errors` object\[\] required

`line` integer required

`message` null | string required

`stocktake` object required

`object` "stocktake" required

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

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

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

```python
import os
import requests

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

## Post the differences: shortages and surpluses become stock movements and accounting entries

POST `/v1/stocktakes/{id}/post`

Post the differences: shortages and surpluses become stock movements and accounting entries. Refused while a line is uncounted, unless treatUncountedAsFrozen confirms those lines agree. Cannot be undone; a later stocktake corrects it.

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

MCP tool: `post-stocktake`

### Path parameters

`id` string required

### Request body

`date` string YYYY-MM-DD

Date as YYYY-MM-DD.

`treatUncountedAsFrozen` boolean

### Response · 200

`id` string required

`warehouseId` string required

`number` null | string required

`status` string required

`date` string required date

`postedDate` null | string required date

`blockMovements` boolean required

`groupId` string | null required

`byLocation` boolean required

`locationId` null | string required

`shortageValueHaler` integer required

`surplusValueHaler` integer required

`note` string | null required

`lineCount` integer required

`countedCount` integer required

`differenceCount` integer required

`lines` object\[\]

`object` "stocktake\_line" required

`id` string required

`itemId` string required

`itemName` string required

`itemSku` string required

`unit` null | string required

`lotId` null | string required

`lotCode` null | string required

`locationId` null | string required

`locationCode` null | string required

`frozen` integer required

`frozenValueHaler` integer required

`counted` null | number required

`difference` null | number required

`unitCostHaler` integer | null required

`withinNorm` boolean required

`postedValueHaler` integer | null required

`note` string | null required

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

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

```python
import os
import requests

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

## List supplier price list rows, by item or supplier

GET `/v1/supplier-prices`

List supplier price list rows, by item or supplier

MCP tool: `list-supplier-prices`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`itemId` string

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

`supplierId` string

ID of the supplier.

### Response · 200

`data` any\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Add a row to a supplier's price list: price per the item's own unit, minimum order, pack size, lead time

POST `/v1/supplier-prices`

Add a row to a supplier's price list: price per the item's own unit, minimum order, pack size, lead time

MCP tool: `create-supplier-price`

### Request body

`supplierId` string required

ID of the supplier.

`itemId` string required

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

`supplierSku` string | null

`priceHaler` integer required min 0 max 9007199254740991

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

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`minQuantity` number min 0

`packQuantity` number | null

`leadDays` integer | null

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

### Response · 201

`id` string required

`supplierId` string required

`itemId` string required

`supplierSku` string | null required

`priceHaler` integer required

`currency` string required

`minQuantity` integer required

`packQuantity` integer required

`leadDays` integer | null required

`validFrom` string | null required

`validTo` string | null required

```bash
curl -X POST https://api.damedoklad.cz/v1/supplier-prices \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "supplierId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "priceHaler": 1210000
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/supplier-prices', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "supplierId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    "priceHaler": 1210000
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.post(
    "https://api.damedoklad.cz/v1/supplier-prices",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "supplierId": "obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "itemId": "itm_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
        "priceHaler": 1210000
    },
)
data = response.json()
```

## Change a supplier price list row

PATCH `/v1/supplier-prices/{id}`

Change a supplier price list row

MCP tool: `update-supplier-price`

### Path parameters

`id` string required

### Request body

`supplierSku` string | null

`priceHaler` integer min 0 max 9007199254740991

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

`currency` string 3 chars

ISO 4217 currency code, for example CZK or EUR.

`minQuantity` number min 0

`packQuantity` number | null

`leadDays` integer | null

`validFrom` string | null

Date as YYYY-MM-DD.

`validTo` string | null

Date as YYYY-MM-DD.

### Response · 200

`id` string required

`supplierId` string required

`itemId` string required

`supplierSku` string | null required

`priceHaler` integer required

`currency` string required

`minQuantity` integer required

`packQuantity` integer required

`leadDays` integer | null required

`validFrom` string | null required

`validTo` string | null required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/supplier-prices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "supplierSku": "string",
  "priceHaler": 1210000,
  "currency": "CZK"
}'
```

```javascript
const response = await fetch('https://api.damedoklad.cz/v1/supplier-prices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.DAMEDOKLAD_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "supplierSku": "string",
    "priceHaler": 1210000,
    "currency": "CZK"
  }),
});
const data = await response.json();
```

```python
import os
import requests

response = requests.patch(
    "https://api.damedoklad.cz/v1/supplier-prices/obj_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "supplierSku": "string",
        "priceHaler": 1210000,
        "currency": "CZK"
    },
)
data = response.json()
```

## Delete a supplier price list row

DELETE `/v1/supplier-prices/{id}`

Delete a supplier price list row

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

MCP tool: `delete-supplier-price`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## List warehouse locations (regály)

GET `/v1/warehouse-locations`

List warehouse locations (regály)

MCP tool: `list-warehouse-locations`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

`from` string YYYY-MM-DD

Date as YYYY-MM-DD.

`to` string YYYY-MM-DD

Date as YYYY-MM-DD.

`warehouseId` string

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

### Response · 200

`data` any\[\] required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Add a location (regál) to a warehouse

POST `/v1/warehouse-locations`

Add a location (regál) to a warehouse

MCP tool: `create-warehouse-location`

### Request body

`warehouseId` string required

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

`code` string required max 32 chars

`name` string | null

`isActive` boolean

### Response · 201

`id` string required

`warehouseId` string required

`code` string required

`name` null | string required

`isActive` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/warehouse-locations \
  -H "Authorization: Bearer $DAMEDOKLAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "warehouseId": "whs_2n9F4kT7wQ1xYz0aBcDeFgHiJkL",
  "code": "string"
}'
```

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

```python
import os
import requests

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

## Rename or deactivate a warehouse location

PATCH `/v1/warehouse-locations/{id}`

Rename or deactivate a warehouse location

MCP tool: `update-warehouse-location`

### Path parameters

`id` string required

### Request body

`code` string max 32 chars

`name` string | null

`isActive` boolean

### Response · 200

`id` string required

`warehouseId` string required

`code` string required

`name` null | string required

`isActive` boolean required

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

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

```python
import os
import requests

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

## Delete an empty warehouse location that was never used. Used ones can be deactivated

DELETE `/v1/warehouse-locations/{id}`

Delete an empty warehouse location that was never used. Used ones can be deactivated

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

MCP tool: `delete-warehouse-location`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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

## List warehouses

GET `/v1/warehouses`

List warehouses

MCP tool: `list-warehouses`

### Query parameters

`limit` integer min 1 max 500

`offset` integer min 0 max 9007199254740991

`search` string max 200 chars

### Response · 200

`data` object\[\] required

`object` "warehouse" required

`id` string required

`name` string required

`code` string required

`analyticSuffix` null | string required

`address` string | null required

`note` string | null required

`isActive` boolean required

`isDefault` boolean required

`total` integer

Rows that match, on all pages.

`hasMore` boolean required

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

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

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

## Create a warehouse. An analytic suffix splits its stock accounts, for example 132001

POST `/v1/warehouses`

Create a warehouse. An analytic suffix splits its stock accounts, for example 132001

MCP tool: `create-warehouse`

### Request body

`name` string required max 120 chars

`code` string required max 32 chars

`analyticSuffix` string | null

`address` string | null

`note` string | null

`isActive` boolean

`isDefault` boolean

### Response · 201

`id` string required

`name` string required

`code` string required

`analyticSuffix` null | string required

`address` string | null required

`note` string | null required

`isActive` boolean required

`isDefault` boolean required

```bash
curl -X POST https://api.damedoklad.cz/v1/warehouses \
  -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/warehouses', {
  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/warehouses",
    headers={"Authorization": f"Bearer {os.environ['DAMEDOKLAD_API_KEY']}"},
    json={
        "name": "Pekárna U Lípy s.r.o.",
        "code": "string"
    },
)
data = response.json()
```

## Get a warehouse

GET `/v1/warehouses/{id}`

Get a warehouse

MCP tool: `get-warehouse`

### Path parameters

`id` string required

### Response · 200

`id` string required

`name` string required

`code` string required

`analyticSuffix` null | string required

`address` string | null required

`note` string | null required

`isActive` boolean required

`isDefault` boolean required

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

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

## Update a warehouse

PATCH `/v1/warehouses/{id}`

Update a warehouse. The analytic suffix can only change while the warehouse has never had stock movements posted.

MCP tool: `update-warehouse`

### Path parameters

`id` string required

### Request body

`name` string max 120 chars

`code` string max 32 chars

`analyticSuffix` string | null

`address` string | null

`note` string | null

`isActive` boolean

`isDefault` boolean

### Response · 200

`id` string required

`name` string required

`code` string required

`analyticSuffix` null | string required

`address` string | null required

`note` string | null required

`isActive` boolean required

`isDefault` boolean required

```bash
curl -X PATCH https://api.damedoklad.cz/v1/warehouses/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",
  "analyticSuffix": "A1"
}'
```

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

```python
import os
import requests

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

## Delete a warehouse that was never used. Used warehouses can only be deactivated

DELETE `/v1/warehouses/{id}`

Delete a warehouse that was never used. Used warehouses can only be deactivated

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

MCP tool: `delete-warehouse`

### Path parameters

`id` string required

### Response · 200

`id` string required

`deleted` boolean required

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

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