API Servers
Learn how to use the AI SDK in an Express server
You can use the AI SDK in an Express server to generate and stream text and objects to the client.
The examples start a simple HTTP server that listens on port 8080. You can e.g. test it using curl:
curl -X POST http://localhost:8080
The examples use the Vercel AI Gateway. Ensure that your AI Gateway API key is
set in the AI_GATEWAY_API_KEY environment variable.
Full example: github.com/vercel/ai/examples/express
You can use the pipeUIMessageStreamToResponse helper to pipe the stream data to the server response.
import {
pipeUIMessageStreamToResponse,
streamText,
toUIMessageStream,
} from 'ai';
import express, { Request, Response } from 'express';
const app = express();
app.post('/', async (req: Request, res: Response) => {
const result = streamText({
model: 'openai/gpt-6-astra',
prompt: 'Invent a new holiday and describe its traditions.',
});
pipeUIMessageStreamToResponse({
response: res,
stream: toUIMessageStream({ stream: result.stream }),
});
});
app.listen(8080, () => {
console.log(`Example app listening on port ${8080}`);
});
pipeUIMessageStreamToResponse can be used to send custom data to the client.
import {
createUIMessageStream,
pipeUIMessageStreamToResponse,
streamText,
toUIMessageStream,
} from 'ai';
import express, { Request, Response } from 'express';
const app = express();
app.post('/custom-data-parts', async (req: Request, res: Response) => {
pipeUIMessageStreamToResponse({
response: res,
stream: createUIMessageStream({
execute: async ({ writer }) => {
writer.write({ type: 'start' });
writer.write({
type: 'data-custom',
data: {
custom: 'Hello, world!',
},
});
const result = streamText({
model: 'openai/gpt-6-astra',
prompt: 'Invent a new holiday and describe its traditions.',
});
writer.merge(
toUIMessageStream({ stream: result.stream, sendStart: false }),
);
},
}),
});
});
app.listen(8080, () => {
console.log(`Example app listening on port ${8080}`);
});
You can send a text stream to the client using pipeTextStreamToResponse.
import { pipeTextStreamToResponse, streamText, toTextStream } from 'ai';
import express, { Request, Response } from 'express';
const app = express();
app.post('/', async (req: Request, res: Response) => {
const result = streamText({
model: 'openai/gpt-6-astra',
prompt: 'Invent a new holiday and describe its traditions.',
});
pipeTextStreamToResponse({
response: res,
stream: toTextStream({ stream: result.stream }),
});
});
app.listen(8080, () => {
console.log(`Example app listening on port ${8080}`);
});