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

# Subscribe to new messages (SSE)

> A long-lived `text/event-stream` carrying everything that reaches the conversation
without the client asking: scheduled messages, the silence check-in, and messages or
reactions from the student's other devices.

- `event: message` — `data` is a `StreamMessageEvent`.
- `event: reaction` — `data` is a `StreamReactionEvent`. The reactions on it changed.
- `event: ping` — an empty keep-alive, about every 25 seconds.

The stream also repeats messages this device produced through `POST /api/chat/send`, so
de-duplicate by `message.id`. Reconnect on close, then call `GET /api/chat/messages`
with `after=<cursor of your newest message>` to fill the gap.



## OpenAPI

````yaml /api-reference/openapi.json get /api/chat/stream
openapi: 3.1.0
info:
  title: Lala Client API
  description: >-
    The HTTP API behind Lala, the AI study companion for Turkish YKS and LGS
    students. This document is generated from the Zod schemas that validate each
    request at runtime. Do not hand-edit openapi.json. Student-visible text is
    Turkish. All identifiers are English.
  version: 1.0.0
servers:
  - url: https://client-api.lala.ist
    description: production
  - url: http://localhost:3000
    description: local dev
security:
  - supabaseJwt: []
tags:
  - name: chat
    description: The chat stream, the message history, and reactions
  - name: media
    description: Upload and read message attachments
  - name: plan
    description: The study planner — blocks of work on a day
  - name: journey
    description: Deneme results, topic performance, study-hours stats, and the streak
  - name: profile
    description: The student profile and onboarding
  - name: devices
    description: Push notification devices
  - name: system
    description: Health check
paths:
  /api/chat/stream:
    get:
      tags:
        - chat
      summary: Subscribe to new messages (SSE)
      description: >-
        A long-lived `text/event-stream` carrying everything that reaches the
        conversation

        without the client asking: scheduled messages, the silence check-in, and
        messages or

        reactions from the student's other devices.


        - `event: message` — `data` is a `StreamMessageEvent`.

        - `event: reaction` — `data` is a `StreamReactionEvent`. The reactions
        on it changed.

        - `event: ping` — an empty keep-alive, about every 25 seconds.


        The stream also repeats messages this device produced through `POST
        /api/chat/send`, so

        de-duplicate by `message.id`. Reconnect on close, then call `GET
        /api/chat/messages`

        with `after=<cursor of your newest message>` to fill the gap.
      operationId: getApiChatStream
      responses:
        '200':
          description: The event stream
          content:
            text/event-stream:
              schema:
                type: string
        '401':
          description: The token is missing, expired, or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        issues:
          description: >-
            Present only on a 400 raised by request validation, capped at 10
            entries. Every other error carries `error` alone.
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssue'
      required:
        - error
      description: Error body. `error` is a short English string.
    ValidationIssue:
      type: object
      properties:
        path:
          type: string
          description: Dotted path to the offending field, empty at the root.
        message:
          type: string
      required:
        - path
        - message
  securitySchemes:
    supabaseJwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Supabase access token: `Authorization: Bearer <token>`'

````

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