Skip to Content
runelay

REST API

Everything the panel does goes through a versioned JSON API.

Every response is { data, error }.

MethodRouteAuth
*/v1/auth/*better-auth (email and password, GitHub)
GET/v1/mesession
GET, POST/v1/organizations, POST /v1/organizations/activesession
GET, POST/v1/api-keys, DELETE /v1/api-keys/:id, GET /v1/api-keys/:id/secretsession
POST, GET/v1/cli/auth, /v1/cli/auth/:pollToken (browser login for the CLI)public, rate limited
GET, POST/v1/cli/auth/requests/:code, /v1/cli/auth/approvesession
GET, DELETE/v1/cli/status, /v1/cli/key (revokes the calling key)API key (status also session)
GET, POST/v1/sources, /v1/sources/summary, /v1/sources/importsession or API key
GET, PATCH, DELETE/v1/sources/:name, POST /v1/sources/:name/test, POST /v1/sources/:name/oauthsession or API key
GET, POST/v1/catalog, /v1/catalog/installsession or API key
GET, POST, PATCH, DELETE/v1/memories, /v1/memories/:slug, /v1/memories/:slug/versions, /v1/memories/health, /v1/memories/importsession or API key
GET, POST, PATCH, DELETE/v1/skills, /v1/skills/:slug, /v1/skills/:slug/files, /v1/skills/importsession or API key
GET/v1/context/search, /v1/context/briefsession or API key
GET/v1/activity/summary, /v1/onboarding, /v1/toolssession or API key
*/v1/mcpAPI key
GET/healthpublic

API keys go in the Authorization: Bearer rnl_… header. Each key belongs to one organization and is rate limited (see Security).