> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sleak.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Verstuur een bericht

> Verstuurt een bericht naar een bestaande conversatie en ontvangt een AI-gegenereerd antwoord

Dit endpoint verstuurt een bericht naar een bestaande conversatie en retourneert het antwoord van de AI-chatbot.

## Voorbeeld

```bash theme={null}
curl -X POST https://api.v1.sleak.chat/api/message \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": "conv_abc123def456",
    "message": "Wat zijn jullie openingstijden?"
  }'
```

## Response

```json theme={null}
{
  "messages": [
    {
      "role": "user",
      "content": "Wat zijn jullie openingstijden?",
      "timestamp": "2024-02-15T12:35:10Z"
    },
    {
      "role": "assistant",
      "content": "Onze klantenservice is bereikbaar van maandag t/m vrijdag van 9:00 tot 17:00 uur.",
      "timestamp": "2024-02-15T12:35:12Z",
      "metadata": {
        "sources": ["kennisbank_artikel_123"],
        "tools_used": ["kennisbank_zoeken"]
      }
    }
  ],
  "conversation_id": "conv_abc123def456"
}
```

<Warning>
  **Berichtlengte limiet**

  Berichten kunnen tussen 1 en 4000 karakters lang zijn. Langere berichten worden afgewezen met een 400 error.
</Warning>

<Info>
  **Metadata in responses**

  Het antwoord bevat optionele metadata zoals gebruikte databronnen en tools. Dit helpt bij debugging en het begrijpen van hoe de chatbot tot het antwoord kwam.
</Info>


## OpenAPI

````yaml openapi.yaml POST /api/message
openapi: 3.0.3
info:
  title: Sleak Chat API
  description: >
    API voor het beheren van chatbot conversaties. Deze API maakt het mogelijk
    om veilig gesprekken te starten 

    en berichten uit te wisselen met AI-chatbots.


    ## Authenticatie

    Alle beveiligde endpoints vereisen een Bearer token in de Authorization
    header:

    ```

    Authorization: Bearer <jouw-api-sleutel>

    ```


    ## Rate Limiting

    API requests zijn beperkt per minuut. De limiet wordt gecommuniceerd via
    response headers:

    - `X-RateLimit-Limit`: Maximum aantal requests per minuut

    - `X-RateLimit-Remaining`: Aantal resterende requests

    - `X-RateLimit-Reset`: Timestamp wanneer de limiet reset


    ## Foutafhandeling

    De API gebruikt standaard HTTP statuscodes:

    - `200`: Succesvol verwerkt

    - `400`: Ongeldige aanvraag

    - `401`: Niet geautoriseerd

    - `403`: Geen toegang

    - `404`: Niet gevonden

    - `429`: Te veel aanvragen (rate limit overschreden)

    - `500`: Server fout
  version: 1.0.0
  contact:
    name: Sleak Support
    email: support@sleak.chat
  license:
    name: Proprietary
servers:
  - url: https://api.v1.sleak.chat
    description: Api server
security:
  - bearerAuth: []
tags:
  - name: Monitoring
    description: Endpoints voor het monitoren van de API status
  - name: Conversaties
    description: Beheer van chatbot conversaties
  - name: Berichten
    description: Berichten uitwisseling binnen conversaties
paths:
  /api/message:
    post:
      tags:
        - Berichten
      summary: Verstuur een bericht
      description: >
        Verstuurt een bericht naar een bestaande conversatie en ontvangt het
        antwoord van de chatbot.

        De conversatie moet eerder aangemaakt zijn via het /api/conversation
        endpoint.
      operationId: sendMessage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageRequest'
      responses:
        '200':
          description: Bericht succesvol verwerkt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResponse'
          headers:
            X-Process-Time:
              description: Verwerkingstijd in milliseconden
              schema:
                type: string
            X-RateLimit-Limit:
              description: Maximum aantal requests per minuut
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Aantal resterende requests in huidige window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp wanneer de rate limit reset
              schema:
                type: integer
        '400':
          description: Ongeldige aanvraag
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Geen geldige API sleutel opgegeven
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: API sleutel heeft geen toegang tot deze conversatie
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Conversatie niet gevonden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit overschreden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Interne server fout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    MessageRequest:
      type: object
      required:
        - conversation_id
        - message
      properties:
        conversation_id:
          type: string
          description: Identifier van de conversatie
          example: 8337afe2-2158-4332-a8aa-2946a357606p
        message:
          type: string
          description: Het bericht dat naar de chatbot wordt gestuurd
          example: Hallo, ik heb een vraag over jullie producten
          minLength: 1
          maxLength: 4000
    MessageResponse:
      type: object
      required:
        - messages
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/Message'
          description: Array van berichten van de chatbot
        chat_id:
          type: string
          description: ID van de chat sessie
          nullable: true
        process_time:
          type: number
          description: Verwerkingstijd in seconden
          nullable: true
        source_documents:
          type: array
          items:
            type: object
          description: Bronndocumenten gebruikt voor het antwoord
          nullable: true
        execution_metrics:
          type: object
          description: Uitvoeringsstatistieken
          nullable: true
    ErrorResponse:
      type: object
      properties:
        detail:
          type: string
          description: Gedetailleerde foutmelding
          example: API key not found or invalid
        error:
          type: string
          description: Korte foutcode
          example: invalid_api_key
    Message:
      type: object
      required:
        - id
        - type
        - message_type
        - body
      properties:
        id:
          type: string
          description: Unieke identifier van het bericht
          example: msg_123456
        type:
          type: string
          description: Type van het bericht (ai_response, tool_message)
          example: ai_response
        message_type:
          type: string
          description: Specifiek berichttype voor rendering
          example: default_bot
        body:
          type: string
          description: De inhoud van het bericht
          example: Hallo! Ik help je graag met vragen over onze producten.
        message_type_data:
          type: object
          description: Extra data voor het berichttype
          nullable: true
        outputlogs:
          type: object
          description: Output logging informatie
          nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Gebruik je API sleutel als Bearer token. 

        Voorbeeld: `Authorization: Bearer
        28339789ad921d554cddc678e3e91bd3ff6676cb209741aa30b818135ef33060`

````