trpc-rest

API Reference

Complete API reference for all exported functions and types.

Functions

createOpenApiFetchHandler

Handle an incoming HTTP request as a tRPC OpenAPI call.

function createOpenApiFetchHandler(opts: FetchHandlerOptions): Promise<Response>
interface FetchHandlerOptions<TRouter extends AnyRouter = AnyRouter> {
  router: TRouter;
  endpoint: string;
  req: Request;
  createContext: (opts: { req: Request } & Record<string, unknown>) => Promise<unknown> | unknown;
  responseMeta?: (opts: {
    type: ProcedureType | 'unknown';
    paths: string[] | undefined;
    ctx: unknown;
    data: unknown[];
    errors: unknown[];
    info: unknown;
    eagerGeneration: boolean;
  }) => { status?: number; headers?: Record<string, string> } | undefined;
  onError?: (opts: {
    error: TRPCError;
    type: ProcedureType | 'unknown';
    path: string | undefined;
    input: unknown;
    ctx: unknown;
    req: Request;
  }) => void;
}

generateOpenApiDocument

Generate an OpenAPI 3.1.0 document from a tRPC router.

function generateOpenApiDocument(router: AnyRouter, opts: GenerateOptions): OpenApiDocument
interface GenerateOptions {
  title: string;
  description?: string;
  version: string;
  baseUrl: string;
  tags?: string[];
  docsUrl?: string;
  securitySchemes?: Record<string, unknown>;
  filter?: (opts: { path: string[]; metadata: OpenApiMeta }) => boolean;
  extensions?: (opts: {
    meta: OpenApiMeta;
    procedurePath: string[];
    operationId: string;
  }) => Record<string, unknown> | undefined;
  errorSchemas?: ErrorSchemaConfig;
}

createErrorResponseSchema

Create a Zod schema for a standard error response, registered as an OpenAPI component.

function createErrorResponseSchema(refName: string, code: string, message: string): z.ZodObject<...>

Types

OpenApiMeta

Metadata interface for tRPC procedures. Pass to initTRPC.meta<OpenApiMeta>().

interface OpenApiMeta {
  openapi?: {
    method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
    path: string;
    tags?: string[];
    summary?: string;
    description?: string;
    successDescription?: string;
    errorResponses?: Record<number, string>;
    protect?: boolean;
    enabled?: boolean;
    contentTypes?: string[];
    deprecated?: boolean;
  } & Record<`x-${string}`, unknown>;
  [key: string]: unknown;
}

ErrorSchemaConfig

interface ErrorSchemaConfig {
  schemas: Record<number, string>;  // HTTP status → component schema name
  autoAdd401?: boolean;             // Auto-add 401 to all operations
}

OpenApiDocument

interface OpenApiDocument {
  openapi: string;
  info: { title: string; description?: string; version: string };
  servers?: Array<{ url: string; description?: string }>;
  paths: Record<string, Record<string, unknown>>;
  components?: {
    schemas?: Record<string, unknown>;
    securitySchemes?: Record<string, unknown>;
  };
  tags?: Array<{ name: string; description?: string }>;
  security?: Array<Record<string, string[]>>;
  externalDocs?: { url: string; description?: string };
}

Constants

TRPC_ERROR_CODE_HTTP_STATUS

Map from tRPC error code keys to HTTP status codes.

const TRPC_ERROR_CODE_HTTP_STATUS: Record<TRPC_ERROR_CODE_KEY, number>;

TRPC_ERROR_CODE_HTTP_STATUS['NOT_FOUND']     // 404
TRPC_ERROR_CODE_HTTP_STATUS['BAD_REQUEST']   // 400
TRPC_ERROR_CODE_HTTP_STATUS['UNAUTHORIZED']  // 401

On this page