API routes
API routes are route.ts files in the app/ directory. They export functions named after HTTP methods (GET, POST, PUT, DELETE, etc).
A simple GET handler
app/api/posts/route.ts
import type { RouteHandler } from "swift-rust/router";
export const GET: RouteHandler = async ({ request }) => {
const posts = await db.posts.findMany();
return Response.json(posts);
};A POST handler with body parsing
app/api/posts/route.ts
import type { RouteHandler } from "swift-rust/router";
export const POST: RouteHandler = async ({ request }) => {
const body = await request.json();
const post = await db.posts.create({ data: body });
return Response.json(post, { status: 201 });
};Dynamic API routes
Use the same [param] syntax as pages.
app/api/posts/[id]/route.ts
import type { RouteHandler } from "swift-rust/router";
export const GET: RouteHandler = async ({ params }) => {
const post = await db.posts.findUnique({ where: { id: params.id } });
if (!post) return new Response("Not found", { status: 404 });
return Response.json(post);
};Cookies and headers
The request object exposes cookies, headers, and standard Fetch API methods.
usage
export const POST: RouteHandler = async ({ request }) => {
const session = request.cookies.get("session")?.value;
if (!session) return new Response("Unauthorized", { status: 401 });
return Response.json({ ok: true });
};Custom responses
Return any standard Response object. The framework passes it through unchanged. For PDFs, use Response.pdf(tree).