Security
Not an add-on. These invariants are documented in ARCHITECTURE.md and covered by automated tests in the API.
End-user access starts with HS256 JWTs signed by your backend using the tenant identity secret. Supdesk exchanges them for session tokens scoped to a single end user and tenant. Anonymous sessions cannot invoke connector tools or refunds.
Read the specEvery server-to-server request includes X-Supportal-Signature with a timestamp and HMAC-SHA256 over the raw body. Your backend must reject stale or invalid signatures. The user id in each payload always comes from the verified session, never from model-generated arguments.
Read the specRefund amounts, rolling per-user limits, dry-run eligibility, human approval thresholds, and user confirmation are enforced in the API regardless of model output. Connector responses are treated as untrusted in prompts.
Read the specConversations, articles, embeddings, and audit events are keyed by tenant id. Retrieval filters Vectorize and FTS by tenant. Admin APIs resolve tenant from the session cookie, not the public hostname.