
# Reference REST API Procurize.AI

**Programově přistupujte k vaší znalostní bázi – dokumentům, dotazníkům, RAG a reportům – pomocí vašeho API tokenu.**

> **Platí pro:** Procurize.AI API v1  
> **Autentizace:** API klíč v hlavičce `X-API-Key` (viz [API Tokens](/api-tokens/) pro správu tokenů)  
> **Základní URL:** `https://api.procurize.com`

## Přehled

REST API Procurize.AI poskytuje programový přístup k hlavním funkcím platformy. Umožňuje integrovat Procurize.AI s vašimi interními systémy, automatizovat správu znalostní báze a vytvářet vlastní pracovní postupy.

**Podporované moduly (autentizace tokenem):**

- [**RagArticle**](#ragarticle) – správa dokumentů
- [**RagFaq**](#ragfaq) – správa FAQ položek
- [**RagQuery**](#ragquery) – provádění RAG dotazů

## Autentizace

Všechny koncové body vyžadující autentizaci potřebují API token předaný v hlavičce požadavku.

| Hlavička | Hodnota |
|----------|---------|
| `X-API-Key` | `<VÁŠ_API_TOKEN>` |

**Příklad:**
```bash
curl -X GET "https://api.procurize.com/v1/..." \
  -H "X-API-Key: your-api-token-here"
```

> 💡 Tokeny jsou svázány s vaší organizací – není nutné v požadavku uvádět ID organizace.

## Základní URL

Všechny koncové body REST API jsou dostupné pod:
```
https://api.procurize.com
```

## Zpracování chyb

API používá standardní HTTP stavové kódy.

| Kód | Význam |
|-----|--------|
| `200 OK` | Požadavek úspěšný |
| `201 Created` | Zdroj úspěšně vytvořen |
| `204 No Content` | Požadavek úspěšný, tělo odpovědi prázdné |
| `400 Bad Request` | Neplatné parametry nebo špatně formovaný požadavek |
| `401 Unauthorized` | Chybějící nebo neplatný API token |
| `403 Forbidden` | Token nemá oprávnění pro tuto akci |
| `404 Not Found` | Zdroj neexistuje |
| `500 Internal Server Error` | Neočekávaná chyba serveru |

Odpovědi na chyby obsahují strojově čitelný kód chyby a lidsky čitelnou zprávu.

## Reference modulů

### RagArticle

#### GET /questionnaire/rag/articles/summary

**Shrnutí:** Souhrn pro domovskou stránku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| proj | query | string (uuid) | Ne | ID projektu. |

**Odpověď (200):**
```json
{
  "active": 5
}
```

---

#### GET /questionnaire/rag/articles/total

**Shrnutí:** Počet článků

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| q | query | string | Ne | Filtr na název nebo kód článku. |
| state | query | array | Ne | Filtr na stavy. |
| project | query | array | Ne | Filtr na projekty. |
| type | query | array | Ne | Filtr na typy dokumentů. |

**Odpověď (200):**
```json
42
```

---

#### GET /questionnaire/rag/articles/list

**Shrnutí:** Získat seznam článků

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| q | query | string | Ne | Filtr na název nebo kód článku. |
| state | query | array | Ne | Filtr na stavy. |
| project | query | array | Ne | Filtr na projekty. |
| type | query | array | Ne | Filtr na typy dokumentů. |
| s | query | string | Ne | Pole pro řazení. |
| asc | query | boolean | Ne | Vzestupné řazení. |
| ps | query | integer (int32) | Ne | Velikost stránky. |
| p | query | integer (int32) | Ne | Číslo stránky (od 1). |

**Odpověď (200):**
```json
{
  "paging": {
    "pageNumber": 1,
    "pageSize": 10,
    "total": 42,
    "totalPages": 5
  },
  "items": [
    {
      "code": "ART-001",
      "org": "00000000-0000-0000-0000-000000000000",
      "id": "00000000-0000-0000-0000-000000000000",
      "name": "Název článku",
      "description": "Popis článku",
      "documentTypes": [
        {
          "id": "00000000-0000-0000-0000-000000000000",
          "name": "Název typu",
          "plural": "Názvy typů",
          "count": 5
        }
      ],
      "size": 150,
      "revision": {
        "id": "00000000-0000-0000-0000-000000000000",
        "collectionId": "00000000-0000-0000-0000-000000000000",
        "rev": 3,
        "date": "2025-01-15T10:30:00Z",
        "author": {
          "id": "user123",
          "name": "John Doe",
          "email": "john.doe@example.com",
          "login": "johndoe",
          "ra": true
        },
        "authorName": "John Doe",
        "analysisSummary": {
          "id": "00000000-0000-0000-0000-000000000000",
          "initiator": {
            "id": "user123",
            "name": "John Doe",
            "email": "john.doe@example.com",
            "login": "johndoe",
            "ra": true
          },
          "created": "2025-01-15T10:30:00Z",
          "state": "Completed",
          "stateDate": "2025-01-15T10:35:00Z",
          "stateDetails": "Analysis completed successfully",
          "operationId": "op-12345"
        }
      },
      "type": "Article",
      "state": "Active",
      "projects": [
        "00000000-0000-0000-0000-000000000000"
      ],
      "items": [
        "00000000-0000-0000-0000-000000000000"
      ],
      "isShared": false
    }
  ]
}
```

---

#### POST /questionnaire/rag/file-to-md

**Shrnutí:** Vrátí obsah Markdownu ze souboru

**Tělo požadavku (multipart/form-data):**
```json
{
  "url": "https://example.com/file.pdf",
  "file": "binary"
}
```

**Odpověď (200):**
```json
"Markdown content from file"
```

---

#### POST /questionnaire/rag/article/create

**Shrnutí:** Vytvořit článek

**Tělo požadavku (multipart/form-data):**
```json
{
  "code": "ART-001",
  "name": "Název článku",
  "description": "Popis článku",
  "content": "# Obsah článku\n\nToto je obsah článku.",
  "url": "https://example.com/file.pdf",
  "file": "binary"
}
```

**Odpověď (200):**
```json
{
  "code": "ART-001",
  "org": "00000000-0000-0000-0000-000000000000",
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "Název článku",
  "description": "Popis článku",
  "documentTypes": null,
  "size": 150,
  "revision": null,
  "type": "Article",
  "state": "Active",
  "projects": null,
  "items": null,
  "isShared": false
}
```

---

#### GET /questionnaire/rag/article/check

**Shrnutí:** Zkontrolovat existenci článku.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |

**Odpověď (200):**
```json
true
```

---

#### GET /questionnaire/rag/article-info

**Shrnutí:** Získat informace o článku podle kódu.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |

**Odpověď (200):**
```json
{
  "code": "ART-001",
  "org": "00000000-0000-0000-0000-000000000000",
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "Název článku",
  "description": "Popis článku",
  "documentTypes": null,
  "size": 150,
  "revision": null,
  "type": "Article",
  "state": "Active",
  "projects": null,
  "items": null,
  "isShared": false
}
```

---

#### GET /questionnaire/rag/article

**Shrnutí:** Získat obsah článku podle kódu

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |
| format | query | string | Ne | Pokud je true, vrátí HTML obsah v těle odpovědi. Jinak vrátí obsah článku ve formátu Markdown. |
| split | query | boolean | Ne | Pokud je true, vrátí obsah rozdělený podle RAG elementů. |
| css | query | boolean | Ne | Pokud je true, vrátí HTML/PDF obsah s CSS. |

**Odpověď (200):**
```json
"# Název článku\n\nToto je obsah článku ve formátu Markdown."
```

#### POST /questionnaire/rag/article

**Shrnutí:** Aktualizovat metadata článku

**Tělo požadavku:**
```json
{
  "code": "ART-001",
  "name": "Aktualizovaný název článku",
  "description": "Aktualizovaný popis",
  "projects": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "documentTypes": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "name": "Název typu",
      "plural": "Názvy typů"
    }
  ],
  "isShared": true,
  "state": "Active"
}
```

**Odpověď (200):**
```json
{}
```

#### DELETE /questionnaire/rag/article

**Shrnutí:** Smazat článek

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |

---

#### GET /questionnaire/rag/article/pdf

**Shrnutí:** Získat článek jako PDF podle kódu

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |

**Odpověď (200):**
```json
(pdf binary)
```

---

#### GET /questionnaire/rag/article/content

**Shrnutí:** Získat obsah článku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |

**Odpověď (200):**
```json
{
  "content": "# Název článku\n\nObsah zde."
}
```

---

#### POST /questionnaire/rag/article/content

**Shrnutí:** Aktualizovat obsah článku

**Tělo požadavku (multipart/form-data):**
```json
{
  "code": "ART-001",
  "content": "# Aktualizovaný obsah",
  "file": "binary"
}
```

---

#### POST /questionnaire/rag/plural

**Shrnutí:** Získat množný tvar podstatného jména

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| noun | query | string | Ne | Podstatné jméno, které se má množnit. |

**Odpověď (200):**
```json
{
  "plural": "Articles"
}
```

---

#### POST /questionnaire/rag/article/find-types

**Shrnutí:** Analyzovat článek pomocí AI a vrátit jejich typy

**Tělo požadavku (multipart/form-data):**
```json
{
  "code": "ART-001",
  "content": "# Obsah článku"
}
```

**Odpověď (200):**
```json
[
  {
    "plural": "Types"
  }
]
```

---

#### POST /questionnaire/rag/article/format-with-ai

**Shrnutí:** Naformátovat obsah článku pomocí AI

**Tělo požadavku (multipart/form-data):**
```json
{
  "code": "ART-001",
  "content": "# Obsah článku"
}
```

**Odpověď (200):**
```json
{
  "formattedContent": "# Formatted Article Content"
}
```

---

#### POST /questionnaire/rag/article/improve-on-suggestions

**Shrnutí:** Vylepšit dokument na základě návrhů

**Tělo požadavku (multipart/form-data):**
```json
{
  "suggestions": [
    {
      "sectionTitle": "Úvod",
      "suggestion": "Přidejte zde více detailů."
    }
  ],
  "code": "ART-001",
  "content": "# Obsah článku"
}
```

**Odpověď (200):**
```json
{
  "improvedContent": "# Improved Content"
}
```

---

#### GET /questionnaire/rag/article/parts

**Shrnutí:** Vrací seznam částí článku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | query | array | Ano | Seznam částí článku. |

**Odpověď (200):**
```json
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "code": "part-1",
    "title": "Úvod",
    "orderNumber": 1,
    "content": "Obsah úvodu."
  }
]
```

---

#### GET /questionnaire/rag/article/revisions

**Shrnutí:** Vrací seznam revizí článku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |

**Odpověď (200):**
```json
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "collectionId": "00000000-0000-0000-0000-000000000000",
    "rev": 1,
    "date": "2025-01-15T10:30:00Z",
    "author": {
      "id": "user123",
      "name": "John Doe",
      "email": "john.doe@example.com",
      "login": "johndoe",
      "ra": true
    },
    "authorName": "John Doe",
    "analysisSummary": {
      "id": "00000000-0000-0000-0000-000000000000",
      "initiator": {
        "id": "user123",
        "name": "John Doe",
        "email": "john.doe@example.com",
        "login": "johndoe",
        "ra": true
      },
      "created": "2025-01-15T10:30:00Z",
      "state": "Completed",
      "stateDate": "2025-01-15T10:35:00Z",
      "stateDetails": "Analysis completed",
      "operationId": "op-12345"
    }
  }
]
```

---

#### GET /questionnaire/rag/article/revisions/info/{id}

**Shrnutí:** Získat informace o revizi článku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | path | string (uuid) | Ano | ID revize. |

**Odpověď (200):**
```json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "collectionId": "00000000-0000-0000-0000-000000000000",
  "rev": 1,
  "date": "2025-01-15T10:30:00Z",
  "author": {
    "id": "user123",
    "name": "John Doe",
    "email": "john.doe@example.com",
    "login": "johndoe",
    "ra": true
  },
  "authorName": "John Doe",
  "analysisSummary": {
    "id": "00000000-0000-0000-0000-000000000000",
    "initiator": {
      "id": "user123",
      "name": "John Doe",
      "email": "john.doe@example.com",
      "login": "johndoe",
      "ra": true
    },
    "created": "2025-01-15T10:30:00Z",
    "state": "Completed",
    "stateDate": "2025-01-15T10:35:00Z",
    "stateDetails": "Analysis completed",
    "operationId": "op-12345"
  }
}
```

---

#### GET /questionnaire/rag/article/revisions/{id}

**Shrnutí:** Získat obsah revize článku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | path | string (uuid) | Ano | ID revize. |

**Odpověď (200):**
```json
"# Obsah revize článku\n\nPředchozí verze."
```

---

#### GET /questionnaire/rag/article/analyze

**Shrnutí:** Analyzovat obsah článku pomocí AI

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód článku. |
| rev | query | integer (int32) | Ne | Číslo revize. |
| force | query | boolean | Ne | Vynutit vytvoření nové analýzy a smazat předchozí neúplný výsledek, pokud existuje. |

**Odpověď (200):**
```json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "initiator": {
    "id": "user123",
    "name": "John Doe",
    "email": "john.doe@example.com",
    "login": "johndoe",
    "ra": true
  },
  "created": "2025-01-15T10:30:00Z",
  "state": "Completed",
  "stateDate": "2025-01-15T10:35:00Z",
  "stateDetails": "Analysis completed",
  "operationId": "op-12345"
}
```

---

#### GET /questionnaire/rag/article/analyze/{id}

**Shrnutí:** Získat výsledek analýzy článku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | path | string (uuid) | Ano | ID analýzy. |

**Odpověď (200):**
```json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "initiator": {
    "id": "user123",
    "name": "John Doe",
    "email": "john.doe@example.com",
    "login": "johndoe",
    "ra": true
  },
  "created": "2025-01-15T10:30:00Z",
  "state": "Completed",
  "stateDate": "2025-01-15T10:35:00Z",
  "stateDetails": "Analysis completed",
  "operationId": "op-12345",
  "fragments": [
    "fragment-1",
    "fragment-2"
  ],
  "ownInconcies": "Own inconsistencies found",
  "ragInconcies": "RAG inconsistencies found",
  "proposals": "Improvement proposals"
}
```

---

#### GET /questionnaire/rag/messages/list

**Shrnutí:** Seznam všech zpráv

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | query | string (uuid) | Ano | ID RAG kolekce. |
| item | query | string (uuid) | Ne | ID RAG položky. |
| message | query | string (uuid) | Ne | ID zprávy. |
| asc | query | boolean | Ne | Vzestupné řazení. |
| ps | query | integer (int32) | Ne | Velikost stránky. |
| p | query | integer (int32) | Ne | Číslo stránky (od 1). |

**Odpověď (200):**
```json
{
  "paging": {
    "pageNumber": 1,
    "pageSize": 10,
    "total": 5,
    "totalPages": 1
  },
  "items": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "replyTo": null,
      "questionnaire": null,
      "section": null,
      "question": null,
      "ragCollection": "00000000-0000-0000-0000-000000000000",
      "ragItem": "00000000-0000-0000-0000-000000000000",
      "targetId": "00000000-0000-0000-0000-000000000000",
      "targetType": "Question",
      "targetNum": 1,
      "author": {
        "id": "user123",
        "name": "John Doe",
        "email": "john.doe@example.com",
        "login": "johndoe",
        "ra": true
      },
      "text": "Obsah zprávy",
      "created": "2025-01-15T10:30:00Z",
      "updated": "2025-01-15T10:30:00Z",
      "replies": 0
    }
  ]
}
```

---

#### POST /questionnaire/rag/messages/add

**Shrnutí:** Přidat novou zprávu

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | query | string (uuid) | Ano | ID RAG kolekce. |
| item | query | string (uuid) | Ne | ID RAG položky. |
| message | query | string (uuid) | Ne | ID zprávy, na kterou odpovídáte. |

**Tělo požadavku:**
```json
{
  "text": "Obsah nové zprávy"
}
```

**Odpověď (200):**
```json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "replyTo": null,
  "questionnaire": null,
  "section": null,
  "question": null,
  "ragCollection": "00000000-0000-0000-0000-000000000000",
  "ragItem": "00000000-0000-0000-0000-000000000000",
  "targetId": "00000000-0000-0000-0000-000000000000",
  "targetType": "Question",
  "targetNum": 1,
  "author": {
    "id": "user123",
    "name": "John Doe",
    "email": "john.doe@example.com",
    "login": "johndoe",
    "ra": true
  },
  "text": "Obsah nové zprávy",
  "created": "2025-01-15T10:30:00Z",
  "updated": "2025-01-15T10:30:00Z",
  "replies": 0
}
```

---

#### POST /questionnaire/rag/message

**Shrnutí:** Aktualizovat existující zprávu

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| c | query | string (uuid) | Ano | ID RAG kolekce. |
| id | query | string (uuid) | Ano | ID zprávy. |

**Tělo požadavku:**
```json
{
  "text": "Aktualizovaný obsah zprávy"
}
```

**Odpověď (200):**
```json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "replyTo": null,
  "questionnaire": null,
  "section": null,
  "question": null,
  "ragCollection": "00000000-0000-0000-0000-000000000000",
  "ragItem": "00000000-0000-0000-0000-000000000000",
  "targetId": "00000000-0000-0000-0000-000000000000",
  "targetType": "Question",
  "targetNum": 1,
  "author": {
    "id": "user123",
    "name": "John Doe",
    "email": "john.doe@example.com",
    "login": "johndoe",
    "ra": true
  },
  "text": "Aktualizovaný obsah zprávy",
  "created": "2025-01-15T10:30:00Z",
  "updated": "2025-01-15T10:45:00Z",
  "replies": 0
}
```

#### DELETE /questionnaire/rag/message

**Shrnutí:** Smazat existující zprávu

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| id | query | string (uuid) | Ano | ID zprávy. |

**Odpověď (200):**
```json
{}
```

---

### RagFaq

#### GET /questionnaire/rag/faq-collections/summary

**Shrnutí:** Souhrn pro domovskou stránku

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| proj | query | string (uuid) | Ne | ID projektu. |

**Odpověď (200):**
```json
{
  "active": 3
}
```

---

#### GET /questionnaire/rag/faq-collections/total

**Shrnutí:** Počet FAQ kolekcí.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| q | query | string | Ne | Filtr na název nebo kód kolekce. |
| state | query | array | Ne | Filtr na stavy. |
| project | query | array | Ne | Filtr na projekty. |

**Odpověď (200):**
```json
3
```

---

#### GET /questionnaire/rag/faq-collections/list

**Shrnutí:** Získat seznam FAQ kolekcí.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| q | query | string | Ne | Filtr na název nebo kód kolekce. |
| state | query | array | Ne | Filtr na stavy. |
| project | query | array | Ne | Filtr na projekty. |
| s | query | string | Ne | Pole pro řazení. |
| asc | query | boolean | Ne | Vzestupné řazení. |
| ps | query | integer (int32) | Ne | Velikost stránky. |
| p | query | integer (int32) | Ne | Číslo stránky (od 1). |

**Odpověď (200):**
```json
{
  "paging": {
    "pageNumber": 1,
    "pageSize": 10,
    "total": 3,
    "totalPages": 1
  },
  "items": [
    {
      "code": "FAQ-001",
      "org": "00000000-0000-0000-0000-000000000000",
      "id": "00000000-0000-0000-0000-000000000000",
      "name": "FAQ Kolekce",
      "description": "Popis FAQ kolekce",
      "documentTypes": null,
      "size": 5,
      "revision": null,
      "type": "Faq",
      "state": "Active",
      "projects": null,
      "items": null,
      "isShared": false
    }
  ]
}
```

---

#### GET /questionnaire/rag/faq-collections/find-items

**Shrnutí:** Najít FAQ položky.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| q | query | string | Ano | Filtr na otázku. |
| project | query | string (uuid) | Ne | Filtr na projekt. |
| ps | query | integer (int32) | Ne | Velikost stránky. |
| p | query | integer (int32) | Ne | Číslo stránky (od 1). |

**Odpověď (200):**
```json
{
  "paging": {
    "pageNumber": 1,
    "pageSize": 10,
    "total": 5,
    "totalPages": 1
  },
  "items": [
    {
      "index": 0,
      "question": "Co je tento produkt?",
      "answer": "Toto je skvělý produkt.",
      "comment": "Produkt FAQ",
      "state": "Active"
    }
  ]
}
```

---

#### POST /questionnaire/rag/faq-collection/create

**Shrnutí:** Vytvořit novou FAQ kolekci.

**Tělo požadavku (multipart/form-data):**
```json
{
  "code": "FAQ-001",
  "name": "FAQ Kolekce",
  "description": "Popis FAQ kolekce",
  "content": "Obsah zde",
  "file": "binary"
}
```

**Odpověď (200):**
```json
{
  "code": "FAQ-001",
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "FAQ Kolekce",
  "description": "Popis FAQ kolekce",
  "documentTypes": null,
  "size": 5,
  "revision": null,
  "type": "Faq",
  "state": "Active",
  "projects": null,
  "items": null,
  "isShared": false
}
```

---

#### POST /questionnaire/rag/faq-collection

**Shrnutí:** Aktualizovat metadata FAQ kolekce.

**Tělo požadavku:**
```json
{
  "code": "FAQ-001",
  "name": "Aktualizovaná FAQ kolekce",
  "description": "Aktualizovaný popis",
  "projects": null,
  "documentTypes": null,
  "isShared": false,
  "state": "Active"
}
```

#### DELETE /questionnaire/rag/faq-collection

**Shrnutí:** Smazat FAQ kolekci.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |

#### GET /questionnaire/rag/faq-collection

**Shrnutí:** Získat FAQ kolekci.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |

**Odpověď (200):**
```json
{
  "code": "FAQ-001",
  "org": "00000000-0000-0000-0000-000000000000",
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "FAQ Kolekce",
  "description": "Popis FAQ kolekce",
  "documentTypes": null,
  "size": 5,
  "revision": null,
  "type": "Faq",
  "state": "Active",
  "projects": null,
  "items": null,
  "isShared": false
}
```

---

#### GET /questionnaire/rag/faq-collection/check

**Shrnutí:** Zkontrolovat existenci FAQ kolekce.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |

**Odpověď (200):**
```json
true
```

---

#### GET /questionnaire/rag/faq-collection/items-total

**Shrnutí:** Počet FAQ položek.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |
| q | query | string | Ne | Filtr na obsah FAQ položky. |

**Tělo požadavku:**
```json
["Active", "Default"]
```

**Odpověď (200):**
```json
5
```

---

#### GET /questionnaire/rag/faq-collection/items

**Shrnutí:** Získat seznam FAQ položek.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |
| q | query | string | Ne | Filtr na obsah FAQ položky. |
| state | query | array | Ne | Filtr na stavy. |
| s | query | string | Ne | Pole pro řazení. |
| asc | query | boolean | Ne | Vzestupné řazení. |
| ps | query | integer (int32) | Ne | Velikost stránky. |
| p | query | integer (int32) | Ne | Číslo stránky (od 1). |

**Odpověď (200):**
```json
{
  "paging": {
    "pageNumber": 1,
    "pageSize": 10,
    "total": 5,
    "totalPages": 1
  },
  "items": [
    {
      "index": 0,
      "question": "Co je tento produkt?",
      "answer": "Toto je skvělý produkt.",
      "comment": "Produkt FAQ",
      "state": "Active"
    }
  ]
}
```

---

#### POST /questionnaire/rag/faq-collection/item/create

**Shrnutí:** Vytvořit novou FAQ položku.

**Tělo požadavku:**
```json
{
  "code": "FAQ-001",
  "index": 0,
  "question": "Co je tento produkt?",
  "answer": "Toto je skvělý produkt.",
  "comment": "Produkt FAQ",
  "state": "Active"
}
```

**Odpověď (200):**
```json
{
  "index": 0,
  "question": "Co je tento produkt?",
  "answer": "Toto je skvělý produkt.",
  "comment": "Produkt FAQ",
  "state": "Active"
}
```

---

#### GET /questionnaire/rag/faq-collection/item

**Shrnutí:** Získat FAQ položku.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |
| index | query | integer (int32) | Ano | Nulový index položky v kolekci. |

**Odpověď (200):**
```json
{
  "index": 0,
  "question": "Co je tento produkt?",
  "answer": "Toto je skvělý produkt.",
  "comment": "Produkt FAQ",
  "state": "Active"
}
```

#### POST /questionnaire/rag/faq-collection/item

**Shrnutí:** Aktualizovat FAQ položku.

**Tělo požadavku:**
```json
{
  "code": "FAQ-001",
  "index": 0,
  "newIndex": 1,
  "question": "Aktualizovaná otázka?",
  "answer": "Aktualizovaná odpověď.",
  "comment": "Aktualizovaný komentář",
  "state": "Active"
}
```

#### DELETE /questionnaire/rag/faq-collection/item

**Shrnutí:** Smazat FAQ položku.

**Parametry:**
| Název | Umístění | Typ | Povinné | Popis |
|------|----------|-----|---------|-------|
| code | query | string | Ano | Kód kolekce. |
| index | query | integer (int32) | Ano | Nulový index položky v kolekci. |

---

### RagQuery

#### POST /questionnaire/rag/query

**Shrnutí:** Provedení dotazu v RAG Knowledge Base

**Tělo požadavku:**
```json
{
  "project": "00000000-0000-0000-0000-000000000000",
  "excludeCollections": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "question": "Co je tento produkt?",
  "yourCompanyName": "Acme Corp",
  "yourCompanyAlias": "Acme",
  "customerName": "John Doe",
  "options": [
    "option1",
    "option2"
  ],
  "multiselect": false,
  "nArticles": 5,
  "nFaqs": 3,
  "threshold": 0.5,
  "debug": false,
  "withJustification": true,
  "withConfidenceLevel": true,
  "withFragments": true,
  "nAttempts": 3
}
```

**Odpověď (200):**
```json
{
  "attempt": 1,
  "preparedQuery": {
    "original": "Co je tento produkt?",
    "enhanced": "Co je tento produkt a jaké má vlastnosti?"
  },
  "ragItems": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "distance": 0.25
    }
  ],
  "question": "Co je tento produkt?",
  "generalInstructions": "Na základě znalostní báze je zde odpověď:",
  "text": "Tento produkt je skvělé řešení pro vaše potřeby.",
  "explanation": "Odpověď byla nalezena v několika zdrojích s vysokou důvěrou."
}
```

---

#### POST /questionnaire/rag/query-stream

**Shrnutí:** Provedení dotazu v RAG Knowledge Base (stream)

**Tělo požadavku:**
```json
{
  "project": "00000000-0000-0000-0000-000000000000",
  "excludeCollections": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "question": "Co je tento produkt?",
  "yourCompanyName": "Acme Corp",
  "yourCompanyAlias": "Acme",
  "customerName": "John Doe",
  "options": [
    "option1",
    "option2"
  ],
  "multiselect": false,
  "nArticles": 5,
  "nFaqs": 3,
  "threshold": 0.5,
  "debug": false,
  "withJustification": true,
  "withConfidenceLevel": true,
  "withFragments": true,
  "nAttempts": 3
}
```

**Odpověď (200):**
```json
[
  {
    "text": "Tento produkt je skvělé řešení",
    "fragments": [
      {
        "id": "00000000-0000-0000-0000-000000000000",
        "part": 1,
        "distance": 0.25,
        "type": "Article",
        "code": "ART-001",
        "title": "Název produktu",
        "fragment": "Fragment obsahu produktu"
      }
    ]
  },
  {
    "text": " pro vaše potřeby.",
    "fragments": []
  }
]
```

---

#### POST /questionnaire/rag/query-fragments

**Shrnutí:** Provedení dotazu v RAG Knowledge Base (fragmenty)

**Tělo požadavku:**
```json
{
  "project": "00000000-0000-0000-0000-000000000000",
  "exclude_documents": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "query": "Co je tento produkt?",
  "top_k": 5,
  "similarity_threshold": 0.5,
  "prepare_query": true
}
```

**Odpověď (200):**
```json
{
  "results": [
    {
      "document_id": "00000000-0000-0000-0000-000000000000",
      "document_code": "ART-001",
      "document_title": "Název produktu",
      "revision": 3,
      "chunk_index": 0,
      "content": "Fragment obsahu produktu",
      "metadata": {
        "author": "John Doe",
        "created_at": "2025-01-15T10:30:00Z",
        "last_updated_at": "2025-01-15T10:35:00Z",
        "doc_categories": [
          "Product",
          "Information"
        ]
      },
      "similarity_score": 0.85
    }
  ]
}
```

## Související články

- [API Tokens – Generování a správa](/api-tokens/) – jak vytvořit a spravovat tokeny  
- [Ask AI with your knowledge base](/ask-ai-with-your-knowledge-base/) – používání RAG dotazů