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

<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 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, inclusief het meesturen van
    afbeeldingen.


    ## Authenticatie

    Gebruik je API sleutel als Bearer token in de Authorization header:

    ```

    Authorization: Bearer <jouw-api-sleutel>

    ```

    Een API sleutel hoort bij één organisatie en geeft toegang tot alle chatbots
    en conversaties van die organisatie.


    ## Werkwijze

    1. Start een conversatie met `POST /api/conversation` en bewaar de
    `conversation_id` en `contact_id`.

    2. Verstuur berichten met `POST /api/message`. Het antwoord van de chatbot
    zit direct in de response.

    3. Gebruik dezelfde `contact_id` bij een volgende conversatie om deze aan
    hetzelfde contact te koppelen.


    ## Rate Limiting

    Requests zijn beperkt tot 100 per minuut per API sleutel. Bij overschrijding
    volgt een `429` met de headers

    `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining` en
    `X-RateLimit-Reset`.
  version: 1.1.0
  contact:
    name: Sleak Support
    email: support@sleak.chat
servers:
  - url: https://api.v1.sleak.chat
security:
  - bearerAuth: []
tags:
  - 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 geeft het
        antwoord van de chatbot terug.

        De conversatie moet eerder aangemaakt zijn via `POST /api/conversation`.


        Afbeeldingen kunnen worden meegestuurd via `attachments`. De API haalt
        elke afbeelding op, slaat deze op bij

        de conversatie en geeft deze door aan de chatbot. De chatbot beantwoordt
        alleen vragen binnen zijn eigen

        onderwerp, ook als er een afbeelding is meegestuurd.
      operationId: sendMessage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageRequest'
            examples:
              tekst:
                summary: Alleen tekst
                value:
                  conversation_id: 5fc020e6-d603-4069-890e-a231c8e9003c
                  message: Hallo, ik heb een vraag over jullie producten
              afbeelding:
                summary: Met afbeelding
                value:
                  conversation_id: 5fc020e6-d603-4069-890e-a231c8e9003c
                  message: Hebben jullie iets dat op deze schoen lijkt?
                  attachments:
                    - type: image
                      url: https://example.com/uploads/schoen.jpg
      responses:
        '200':
          description: Bericht succesvol verwerkt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResponse'
        '400':
          description: >
            Ongeldige aanvraag, bijvoorbeeld een ontbrekende of onbekende
            `conversation_id`, een leeg `message`,

            ongeldige JSON, of een bijlage die niet opgehaald kan worden of geen
            ondersteunde afbeelding is.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                detail: >-
                  Invalid attachment 'https://example.com/': Attachment is not a
                  supported image (jpeg, png, gif or webp)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/SubscriptionInactive'
        '404':
          description: Conversatie of bijbehorende chatbot niet gevonden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    MessageRequest:
      type: object
      required:
        - conversation_id
        - message
      properties:
        conversation_id:
          type: string
          format: uuid
          description: Identifier van de conversatie
          example: 5fc020e6-d603-4069-890e-a231c8e9003c
        message:
          type: string
          description: Het bericht dat naar de chatbot wordt gestuurd
          example: Hallo, ik heb een vraag over jullie producten
          minLength: 1
        attachments:
          type: array
          description: >
            Optionele afbeeldingen bij het bericht. De url moet een publiek
            bereikbare https-link naar de afbeelding zijn.

            De afbeelding wordt opgehaald en opgeslagen bij de conversatie.
            Ondersteund: jpeg, png, gif en webp, maximaal 10 MB.

            Een url die niet bereikbaar is of geen afbeelding bevat geeft een
            400.
          maxItems: 5
          items:
            $ref: '#/components/schemas/Attachment'
    MessageResponse:
      type: object
      required:
        - messages
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/Message'
          description: Berichten van de chatbot als antwoord op dit bericht
        conversation_id:
          type: string
          format: uuid
          description: ID van de conversatie
          example: 5fc020e6-d603-4069-890e-a231c8e9003c
        source_documents:
          type: array
          items:
            type: object
            additionalProperties: true
          description: >-
            Brondocumenten die gebruikt zijn voor het antwoord. Ontbreekt als er
            geen bronnen zijn gebruikt.
    ErrorResponse:
      type: object
      properties:
        detail:
          type: string
          description: Foutmelding
          example: Invalid API key
    Attachment:
      type: object
      required:
        - type
        - url
      properties:
        type:
          type: string
          enum:
            - image
          description: Type bijlage
          example: image
        url:
          type: string
          format: uri
          description: Publiek bereikbare https-link naar de afbeelding
          example: https://example.com/uploads/schoen.jpg
    Message:
      type: object
      required:
        - id
        - message_type
        - body
      properties:
        id:
          type: string
          format: uuid
          description: Unieke identifier van het bericht
          example: da7f334a-ae05-417b-96f0-8067283acb44
        message_type:
          type: string
          description: Berichttype, bepaalt hoe het bericht getoond wordt
          example: default_bot
        body:
          type: string
          description: De inhoud van het bericht, in Markdown
          example: Hallo! Ik help je graag met vragen over onze producten.
    ValidationErrorResponse:
      type: object
      properties:
        detail:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                example: literal_error
              loc:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
                example:
                  - body
                  - attachments
                  - 0
                  - type
              msg:
                type: string
                example: Input should be 'image'
    RateLimitResponse:
      type: object
      properties:
        detail:
          type: object
          properties:
            error:
              type: string
              example: Rate limit exceeded
            message:
              type: string
              example: Too many requests. Please try again later.
            limit:
              type: integer
              example: 100
            remaining:
              type: integer
              example: 0
            reset:
              type: string
              format: date-time
            retry_after:
              type: integer
              example: 42
  responses:
    Unauthorized:
      description: >-
        API sleutel ontbreekt, heeft een ongeldig formaat of hoort niet bij de
        organisatie van de chatbot
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            detail: Invalid API key
    SubscriptionInactive:
      description: Het abonnement van de organisatie is niet actief
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            detail: Organization subscription is not active
    ValidationFailed:
      description: De request body voldoet niet aan het schema
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationErrorResponse'
    RateLimited:
      description: Rate limit overschreden
      headers:
        Retry-After:
          description: Aantal seconden tot er weer requests verstuurd mogen worden
          schema:
            type: integer
        X-RateLimit-Limit:
          description: Maximum aantal requests per minuut
          schema:
            type: integer
        X-RateLimit-Remaining:
          description: Aantal resterende requests in het huidige window
          schema:
            type: integer
        X-RateLimit-Reset:
          description: Unix timestamp in milliseconden waarop de limiet reset
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitResponse'
    ServerError:
      description: Interne server fout
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        Gebruik je API sleutel als Bearer token.
        Voorbeeld: `Authorization: Bearer <jouw-api-sleutel>`

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.