Custom API Routes
By default Mastra automatically exposes registered agents and workflows via the server. For additional behaviour you can define your own HTTP routes.
Routes are provided with a helper registerApiRoute
from @mastra/core/server
.
Routes can live in the same file as the Mastra
instance but separating them
helps keep configuration concise.
import { Mastra } from "@mastra/core";
import { registerApiRoute } from "@mastra/core/server";
export const mastra = new Mastra({
server: {
apiRoutes: [
registerApiRoute("/my-custom-route", {
method: "GET",
handler: async (c) => {
const mastra = c.get("mastra");
const agents = await mastra.getAgent("my-agent");
return c.json({ message: "Hello, world!" });
},
}),
],
},
});
Each route’s handler receives the Hono Context
. Within the handler you can
access the Mastra
instance to fetch or call agents and workflows.
To add route-specific middleware pass a middleware
array when calling
registerApiRoute
.
registerApiRoute("/my-custom-route", {
method: "GET",
middleware: [
async (c, next) => {
console.log(`${c.req.method} ${c.req.url}`);
await next();
},
],
handler: async (c) => {
return c.json({ message: "My route with custom middleware" });
},
});