Skip to main content

chatRoute()

Creates a chat route handler for streaming agent conversations using the AI SDK format. This function registers an HTTP POST endpoint that accepts messages, executes an agent, and streams the response back to the client in AI SDK-compatible format. You have to use it inside a custom API route.

Use handleChatStream() if you need a framework-agnostic handler.

Usage example
Direct link to Usage example

This example shows how to set up a chat route at the /chat endpoint that uses an agent with the ID weatherAgent.

src/mastra/index.ts
import { Mastra } from "@mastra/core";
import { chatRoute } from "@mastra/ai-sdk";

export const mastra = new Mastra({
server: {
apiRoutes: [
chatRoute({
path: "/chat",
agent: "weatherAgent",
}),
],
},
});

You can also use dynamic agent routing based on an agentId. The URL /chat/weatherAgent will resolve to the agent with the ID weatherAgent.

src/mastra/index.ts
import { Mastra } from "@mastra/core";
import { chatRoute } from "@mastra/ai-sdk";

export const mastra = new Mastra({
server: {
apiRoutes: [
chatRoute({
path: "/chat/:agentId",
}),
],
},
});

Parameters
Direct link to Parameters

path:

string
= '/chat/:agentId'
The route path (e.g., `/chat` or `/chat/:agentId`). Include `:agentId` for dynamic agent routing.

agent?:

string
The ID of the agent to use for this chat route. Required if the path doesn't include `:agentId`.

defaultOptions?:

AgentExecutionOptions
Default options passed to agent execution. These can include instructions, memory configuration, maxSteps, and other execution settings.

sendStart?:

boolean
= true
Whether to send start events in the stream.

sendFinish?:

boolean
= true
Whether to send finish events in the stream.

sendReasoning?:

boolean
= false
Whether to include reasoning steps in the stream.

sendSources?:

boolean
= false
Whether to include source citations in the stream.

Additional configuration
Direct link to Additional configuration

You can use prepareSendMessagesRequest to customize the request sent to the chat route, for example to pass additional configuration to the agent:

const { error, status, sendMessage, messages, regenerate, stop } = useChat({
transport: new DefaultChatTransport({
api: "http://localhost:4111/chat",
prepareSendMessagesRequest({ messages }) {
return {
body: {
messages,
// Pass memory config
memory: {
thread: "user-1",
resource: "user-1",
},
},
};
},
}),
});

On this page