Authenticate via POST /auth/login or POST /auth/signup. Session cookie sp_session (HttpOnly, Secure, SameSite=Lax). Mutating requests require X-Requested-With: supportal.
Auth & tenant
POST /auth/signup { email, password, name, companyName, slug }
POST /auth/login
POST /auth/logout
GET /auth/me → { user, tenant, role }
POST /auth/accept-invite { token, password, name }
GET|PATCH /tenant
POST /tenant/secrets/:kind/rotate (identity|connector) → { secret }Connector & actions
GET|PUT /connector { baseUrl, userContext }
POST /connector/test
GET|POST /actions
PATCH|DELETE /actions/:idDomains, content, inbox
GET|POST /domains
DELETE /domains/:id
POST /domains/:id/refresh
GET|POST /categories | PATCH|DELETE /categories/:id
GET|POST /articles | GET|PATCH|DELETE /articles/:id
GET /conversations?status=&q=&cursor=
GET /conversations/:id
POST /conversations/:id/messages | /assign | /status | /knowledge-draft
GET /refunds?status=
POST /actions-queue/:actionId/approve | /rejectTeam & analytics
GET|POST /members | DELETE /members/:userId | POST /invites
GET /stats?days=30
GET /inbox/ws
GET /audit?cursor=Roles
Membership roles: owner, admin, agent. Tenant context comes from the admin session, not the hostname.