Route Schema
Complete reference for route configuration.
Route Object
typescript
interface RouteConfig {
path: string;
method: 'get' | 'post' | 'put' | 'patch' | 'delete';
description?: string;
tags?: string[];
requireAuth?: boolean;
authProvider?: 'jwt' | 'firebase';
requiredPermissions?: string[];
supabaseQueries?: Query[];
integrations?: Integration[];
request?: RequestSchema;
response?: ResponseSchema;
cache?: RouteCache;
rateLimit?: RateLimitOptions;
}Properties
path
Endpoint path with optional parameters.
json
"/users"
"/users/:id"
"/users/:userId/posts/:postId"method
HTTP method (lowercase).
json
"get" | "post" | "put" | "patch" | "delete"description
OpenAPI description for documentation.
json
"Get user by ID"tags
OpenAPI tags for grouping.
json
["Users", "Admin"]requireAuth
Require JWT authentication.
json
true | falseauthProvider
Authentication provider.
json
"jwt" | "firebase"requiredPermissions
RBAC permissions required.
json
["users:read", "users:write"]supabaseQueries
Database operations. See Query Schema.
integrations
External service calls.
typescript
interface Integration {
type: string;
action: string;
params?: Record<string, any>;
}request
Request validation schema.
typescript
interface RequestSchema {
body?: SchemaObject;
params?: SchemaObject;
query?: SchemaObject;
}
interface SchemaObject {
[field: string]: {
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
required?: boolean;
format?: string;
minimum?: number;
maximum?: number;
minLength?: number;
maxLength?: number;
pattern?: string;
enum?: any[];
items?: SchemaObject;
};
}response
Response schema for documentation.
typescript
interface ResponseSchema {
type: 'object' | 'array';
properties?: Record<string, any>;
items?: Record<string, any>;
}cache
Route-specific caching.
typescript
interface RouteCache {
enabled: boolean;
ttl?: number; // Seconds
}rateLimit
Route-specific rate limiting.
typescript
interface RateLimitOptions {
windowMs?: number;
max: number;
message?: string;
statusCode?: number;
}Examples
Basic GET
json
{
"path": "/users",
"method": "get",
"description": "List all users",
"tags": ["Users"],
"supabaseQueries": [{
"table": "users",
"operation": "select"
}]
}Protected POST
json
{
"path": "/users",
"method": "post",
"description": "Create user",
"tags": ["Users"],
"requireAuth": true,
"requiredPermissions": ["users:create"],
"request": {
"body": {
"name": { "type": "string", "required": true },
"email": { "type": "string", "format": "email", "required": true }
}
},
"supabaseQueries": [{
"table": "users",
"operation": "insert",
"data": {
"name": "{{body.name}}",
"email": "{{body.email}}"
}
}]
}With Integration
json
{
"path": "/notify",
"method": "post",
"requireAuth": true,
"integrations": [{
"type": "slack",
"action": "sendMessage",
"params": {
"channel": "#general",
"text": "{{body.message}}"
}
}]
}