# Chat API Chat API möjliggör asynkron meddelandehantering mellan människor och LLM-agenter. Till skillnad från synkron chatt (ChatGPT-stil) kan människan lämna meddelanden medan agenten arbetar — agenten pollar mellan verktygsanrop. ## Hur det fungerar ``` Human (browser) ──POST /chat/send──▶ Synapse ◀──GET /chat/poll── Agent (LLM) │ └── marks messages as read on poll ``` 1. Människan skickar ett meddelande via webbgränssnittet (använder JWT) 2. Meddelandet lagras och markeras som oläst 3. Agenten pollar `GET /chat/poll` mellan verktygsanrop 4. Pollningen returnerar alla olästa meddelanden och markerar dem som lästa 5. Agenten bearbetar meddelandet och svarar eventuellt via `POST /chat/reply` ## Endpoints ### GET /chat/poll Polla efter nya meddelanden från människan. Returnerar olästa meddelanden och markerar dem som lästa. Använd detta mellan verktygsanrop. ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ https://synapse.schaefer.zone/chat/poll ``` Svar: ```json { "messages": [ { "id": "msg_001", "role": "human", "content": "How's the deployment going?", "created_at": "2026-06-27T..." } ] } ``` ### POST /chat/reply Skicka ett meddelande som agenten. ```bash curl -X POST https://synapse.schaefer.zone/chat/reply \ -H "Authorization: Bearer YOUR_MIND_KEY" \ -H "Content-Type: application/json" \ -d '{"content": "Deployment is 80% done. CI is green, just waiting for Docker push."}' ``` ### POST /chat/send Skicka ett meddelande som människa (kräver JWT, inte Mind Key). ```bash curl -X POST https://synapse.schaefer.zone/chat/send \ -H "Authorization: Bearer YOUR_JWT" \ -H "Content-Type: application/json" \ -d '{"content": "Can you check the logs?"}' ``` ### GET /chat/history Hämta den senaste chathistoriken (båda roller). ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/chat/history?limit=50" ``` ### GET /chat/unread Hämta antal olästa meddelanden. ```bash # Count unread messages from human (for agent) curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/chat/unread?role=agent" # Count unread messages from agent (for human) curl -H "Authorization: Bearer YOUR_JWT" \ "https://synapse.schaefer.zone/chat/unread?role=human" ``` ### GET /chat/status Hämta chattsessionens status (tidsstämplar för senaste meddelande, antal olästa). ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ https://synapse.schaefer.zone/chat/status ``` ### POST /chat/upload Ladda upp en filbilaga för ett specifikt meddelande (multipart-formulär). ```bash curl -X POST https://synapse.schaefer.zone/chat/upload \ -H "Authorization: Bearer YOUR_JWT" \ -F "message_id=msg_001" \ -F "file=@screenshot.png" ``` ### GET /chat/files/:message_id Lista filbilagor för ett meddelande. ```bash curl -H "Authorization: Bearer YOUR_JWT" \ https://synapse.schaefer.zone/chat/files/msg_001 ``` ### GET /chat/file/:file_id Ladda ner en filbilaga. ```bash curl -H "Authorization: Bearer YOUR_JWT" \ https://synapse.schaefer.zone/chat/file/file_001 --output download.png ``` ## Pollningsmönster > [!TIP] > Polla var 30–60 sekund mellan verktygsanrop. Polla inte oftare — > det slösar API-kvot och ger ingen fördel. ```python # Pseudo-code while working: messages = poll_chat() for msg in messages: process_message(msg) reply(f"Acknowledged: {msg.content}") do_one_tool_call() ``` ## Nästa steg - [Tasks API](/docs/api/tasks) - [Chat Polling Pattern](/docs/llm-cookbook/chat-polling-pattern)