API
OpenAPI (Swagger)
Make your oRPC router accessible via /api/v1 and expose OpenAPI JSON.
This project exposes:
- API endpoint:
/api/v1/* - OpenAPI spec:
/openapi.json
You do not need to manually edit src/app/api/v1/[[...rest]]/route.ts for each new endpoint.
Just define routes in your feature router, for example:
list: base
.route({ method: 'GET', path: '/todo/list' })
.output(ListTodosOutputSchema)
.handler(async () => {
return listTodos();
})This route becomes available at:
/api/v1/todo/listExpose OpenAPI JSON
Create or update:
src/app/openapi.json/route.tsUse this scaffold:
import { OpenAPIGenerator } from '@orpc/openapi';
import { ZodToJsonSchemaConverter } from '@orpc/zod/zod4';
import { NextResponse } from 'next/server';
import { router } from '@/lib/orpc/router';
const generator = new OpenAPIGenerator({
schemaConverters: [new ZodToJsonSchemaConverter()],
});
async function handleRequest() {
const spec = await generator.generate(router, {
info: {
title: 'Public API',
version: '1.0.0',
},
});
return NextResponse.json(spec);
}
export const GET = handleRequest;Quick check
Run the app and open:
http://localhost:3000/api/v1/todo/list
http://localhost:3000/openapi.jsonIf your feature router is registered in src/lib/orpc/router.ts, both endpoints will include it.