# Security

How kaibo protects tenant data, and how to report a problem. Draft pending legal review.

Updated 2026-11-12

> Draft. Lawyer review is required before this page is relied on.

Draft. This describes controls that exist in the code today. It is not a certification.

## Tenant isolation

Every record belongs to an organization. The organization is taken from your verified sign-in token or from the API key record, never from a request field. An automated test lists every public function and fails the build if one is missing from the cross-tenant test matrix.

## API keys

Keys look like `kaibo_<id>.<secret>`. We store a SHA-256 hash, compare in constant time, and show the full key once. Scopes limit what a key can do (read, write, forget, admin), and a key can only grant scopes it holds. Failed attempts are rate limited per source, and every valid key has its own limit.

## Data integrity

Events are stored in an append-only hash chain. Anyone with read access can recompute it. Deletions go through a hash-chained ledger and return a receipt you can verify.

## Webhooks

Deliveries are signed with HMAC-SHA256 over the timestamp and body, expire after five minutes, never follow redirects, and carry ids only. Endpoints must be public https hosts.

## Untrusted memory

Text returned by recall is data. The MCP server wraps it in delimiters with a random value per response so stored text cannot close the block early. This lowers risk and does not remove it.

## Reporting

Send reports to [security contact email]. We will acknowledge within [timeframe]. Please do not test against other customers' data.
