---
title: "Send a chat message"
method: POST
path: "/chat"
tags: ["Chat"]
---

# Send a chat message

`POST /chat`

## Request

- Base URL: `https://api.savanto.ai`
- URL: `https://api.savanto.ai/chat`
- Auth: HTTP bearer

Send a visitor message through the full multi-agent pipeline: triage classifies intent, query agents retrieve grounded context from the product / post indexes (plus any custom domain agents), and response agents synthesise a grounded answer with product cards or cited content. The response is streamed as NDJSON when `stream: true` (each line is one of `{ type: "token", ... }`, `{ type: "product", ... }`, `{ type: "done" }`), or returned as a single JSON object when `stream: false`. Pass `threadId` to continue a conversation (memories and prior turns are loaded); omit it for a fresh one. Respects the workspace's active persona / system-prompt configuration.

## Request body

- ChatRequest
  - `message` string, required
  - `threadId` string, required
  - `stream` boolean
  - `userJwt` string
  - `productFilter` object
  - `postFilter` object
  - `promptId` string
  - `offerResponse` unknown
  - `visitorId` string
  - `source` string

## Response `200`

Chat response (JSON or NDJSON stream)

- ChatResponse
  - `object` 'event', required
  - `requestId` string, required
  - `data` unknown

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict
- `413`: Payload too large
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/savanto/apis/savanto-api.md) · [All operations](https://skmtc.dev/savanto/apis/savanto-api/llms.txt) · [OpenAPI document](https://skmtc.dev/savanto/apis/savanto-api/revisions/82437327a878?raw)
