API REFERENCE
All endpoints require a valid JWT in the Authorization: Bearer <token> header except the auth endpoints.
/api/auth/api/auth/registerCreate a new tenant account.
Request Body
{ name, email, password }Response
{ token, tenantId, gatewayApiKey }/api/auth/loginAuthenticate with email and password.
Request Body
{ email, password }Response
{ token, tenantId }/api/auth/forgot-passwordSend a password reset email. Always returns 200 to prevent user enumeration.
Request Body
{ email }Response
{ message }/api/auth/reset-passwordReset password using the token from the email link.
Request Body
{ token, password }Response
{ message }/api/tenants/:tenantId/api/tenants/:tenantId/routesList all non-deleted routes for the tenant.
Request Body
—Response
RouteEntity[]/api/tenants/:tenantId/routesCreate a new route.
Request Body
{ method, pathPattern, serviceId, authRequired, rateLimitOverride?, enabled? }Response
RouteEntity/api/tenants/:tenantId/routes/:idUpdate an existing route. Accepts partial updates.
Request Body
Partial<RouteEntity>Response
RouteEntity/api/tenants/:tenantId/routes/:idSoft-delete a route (sets deletedAt). Config is updated immediately.
Request Body
—Response
204 No Content/api/tenants/:tenantId/api/tenants/:tenantId/servicesList all non-deleted services.
Request Body
—Response
ServiceEntity[]/api/tenants/:tenantId/servicesCreate a new downstream service.
Request Body
{ name, targetUrl, healthCheckPath?, timeoutMs? }Response
ServiceEntity/api/tenants/:tenantId/services/:idUpdate a service. Accepts partial updates.
Request Body
Partial<ServiceEntity>Response
ServiceEntity/api/tenants/:tenantId/services/:idSoft-delete a service. All routes pointing to this service will fail until reassigned.
Request Body
—Response
204 No Content/api/tenants/:tenantId/api/tenants/:tenantId/consumersList all active (non-revoked) consumers.
Request Body
—Response
ConsumerEntity[]/api/tenants/:tenantId/consumersCreate a consumer and generate an API key. Key is returned in plaintext once.
Request Body
{ name, rateLimitTier? }Response
{ ...ConsumerEntity, apiKey: string }/api/tenants/:tenantId/consumers/:idRevoke a consumer (sets revokedAt). Their API key stops working immediately.
Request Body
—Response
204 No Content/api/tenants/:tenantId/api/tenants/:tenantId/logs?from=ISO&to=ISO&path=&statusCode=&consumerId=&page=Paginated request logs. 50 per page.
Request Body
—Response
RequestLog[]/api/tenants/:tenantId/errors?resolved=false&page=Paginated error events.
Request Body
—Response
ErrorEvent[]/api/tenants/:tenantId/errors/:idMark an error event as resolved.
Request Body
{ resolved: true }Response
204 No Content/api/tenants/:tenantId/healthLatest health snapshot per service (DISTINCT ON serviceId).
Request Body
—Response
HealthSnapshot[]/api/tenants/:tenantId/metrics?period=1h|24h|7dAggregated metrics snapshots for a time period.
Request Body
—Response
MetricsSnapshot[]/api/tenants/:tenantId/gateway-statusWhether the tenant's gateway is currently connected to the control plane.
Request Body
—Response
{ tenantId, online: boolean }Looking for the getting-started guide instead?
Read the Documentation →