TanStack Start

03 Route Handler

Return a non-streaming Anvia response from a TanStack Start server route.

TanStack Start server routes live in src/routes and can return Web Response objects.

1. Create src/routes/api/support.ts

import { createFileRoute } from "@tanstack/react-router";
import { supportAgent } from "~/ai/support-agent";

type SupportRequest = {
  message?: string;
};

export const Route = createFileRoute("/api/support")({
  server: {
    handlers: {
      POST: async ({ request }) => {
        const body = (await request.json()) as SupportRequest;
        const message = body.message?.trim();

        if (!message) {
          return Response.json(
            { error: { code: "bad_request", message: "message is required" } },
            { status: 400 },
          );
        }

        const response = await supportAgent.prompt(message).send();

        return Response.json({
          output: response.output,
          usage: response.usage,
          messages: response.messages,
        });
      },
    },
  },
});

2. Call The Route

const response = await fetch("/api/support", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    message: "Can enterprise customers use priority support?",
  }),
});

const data = await response.json();
console.log(data.output);

3. Use Server Functions For App-Internal Calls

If you created askSupport, app code can call the server function instead:

const result = await askSupport({
  data: { message: "How long does a reset link last?" },
});

Use the raw server route for external clients, webhooks, and streaming.

Next

Return live Anvia events in Streaming. For prompt response fields, read Prompt Responses.