Skip to content
Get API key

Data retention and security

Every Mouse API customer gets Zero Data Retention (ZDR) by default on the standard API. No enterprise contract, sales approval, or request header is required.

Data elementRetained on disk?Where it livesLifecycle
state, questions, instructions, criteriaNoProcess memory for the active HTTP requestDiscarded as soon as the HTTP response is sent
answers, probabilities, confidenceNoProcess memory for the active HTTP requestDiscarded as soon as the HTTP response is sent
POST /v1/calibrations labeled examplesNoProcess memory during 5-fold cross-fittingDiscarded as soon as the signed profile is returned
Calibration profile (calp1.)NoReturned to caller, HMAC-SHA256 signedHeld by the caller and passed back on /v1/systemone
Prefix cache (KV tensors of recent states)Memory onlyGPU VRAM on the inference worker, keyed by SHA-256(state)5-minute TTL; evicted automatically; gone on worker restart; never written to disk
Request metadata (request_id, key_id, model, status, input_tokens, cached_tokens, questions count, latency_ms, region)YesStructured logs and billing usage rollups30 days in console activity logs; billing aggregates as required by law

Zero data retention in apps/decide is enforced mechanically rather than by policy alone:

  1. Allow-listed log filter (MetadataOnly): The API logger strips every attribute outside the fixed metadata allow-list (event, request_id, key_id, path, status, latency_ms, model, region, input_tokens, cached_tokens, questions, error_code) and drops any formatted string arguments before serialization. Even an accidental log.info(..., extra={"state": ...}) cannot emit request content.
  2. Non-echoing validation errors: When Pydantic rejects a malformed request body (422 invalid_schema), the error handler extracts only the field path (loc) and schema rule, never the rejected input value. Automated tests place secret canary strings inside invalid state and criteria payloads and assert they never appear in error bodies or log streams.
  3. Explicit HTTP headers on every response: Every response carries:
    Cache-Control: no-store
    Mouse-Data-Retention: none
  4. No response cache: Only input state KV tensors live in ephemeral GPU memory (keyed by SHA-256 digest with a 300-second TTL), which matches the industry ZDR standard for stateless in-memory prompt caching.

Infrastructure, availability SLO, and subprocessors

Section titled “Infrastructure, availability SLO, and subprocessors”
  • Serving region: https://api.mouse.dev runs in US-East (Mouse-Region: us) on stateless CPU API gateways paired with isolated GPU workers on Modal.
  • Availability SLO (preview): We target 99.5% monthly availability on POST /v1/decisions and POST /v1/systemone during the mouse-preview-2026-10-13 preview, monitored via GET https://api.mouse.dev/healthz. Formal contractual SLAs with service credits ship at General Availability after 30 days of continuous production telemetry.
  • No model training on customer traffic: Customer requests, states, questions, and calibration examples are never used to train or fine-tune models.
  • Key security: API keys (sk_mouse_...) include a 6-character base62 CRC32 checksum verified before any database query, are stored exclusively as SHA-256 hashes, and are automatically revoked via GitHub secret scanning if leaked to a public repository.

12-Question AI-CAIQ Enterprise Security & Trust Reference

Section titled “12-Question AI-CAIQ Enterprise Security & Trust Reference”

For security and procurement reviews (CSA AI-CAIQ), here are direct answers for https://api.mouse.dev:

#Security review questionMouse (api.mouse.dev) answer
1Is Zero Data Retention (ZDR) enabled by default?Yes. Every response includes Mouse-Data-Retention: none and Cache-Control: no-store on all accounts with $0 surcharge.
2Are customer prompts, state, or questions used for training?Never. Neither inference requests nor POST /v1/calibrations labeled examples are stored or used for training, distillation, or evaluations.
3Where does calibration data live?Stateless in-memory only. POST /v1/calibrations scores examples in memory, fits temperature T and cutoff, and returns an HMAC-SHA256 signed calp1. token. Examples and profiles are immediately discarded.
4How is the in-memory prefix cache isolated across tenants?Cache keys are scoped to (user_id, state) (cache_salt per tenant) in ephemeral GPU memory (~5m best-effort TTL) and never written to disk, preventing cross-tenant cache probing.
5What is retained in audit logs?Only allow-listed operational metadata (request_id, key_id, path, status, model, region, input_tokens, cached_tokens, questions count, latency_ms, error_code) enforced by MetadataOnly in apps/decide/mouse_api/zdr.py.
6Can validation errors leak sensitive payload contents?No. RequestValidationError handlers strip rejected values and return only the schema field path (param).
7How are API keys stored and protected against leaks?Keys (sk_mouse_...) carry a base62 CRC32 checksum (invalid keys are rejected before any DB query), are stored as SHA-256 digests only, and support automatic revocation on public GitHub exposure.
8How is prompt injection inside state mitigated?mouse-1 is non-autoregressive (output_tokens = 0) and only scores the fixed option keys you supply in criteria. Untrusted text placed in state cannot invoke tools or emit free-form output.
9How are model versions pinned and deprecated?Every response echoes Mouse-Model-Version: mouse-preview-2026-10-13. Immutable snapshots receive at least 12 months' notice (retire_after in GET /v1/models) before retirement, and calp1. profiles reject mismatched snapshots with 409 profile_model_mismatch.
10What are theserving regions and data residency options?Currently US-East (us) only. We do not charge regional surcharges; EU residency will be announced in GET /v1/models and /healthz when live.
11How are rate limits and runaway spend bounded?Token buckets enforce 200 RPS (burst 400) and 20M TPM per key with standard x-ratelimit-* headers. Prepaid balances stop at $0.00 (402 insufficient_credits), and optional auto-reload fires at most once per 24 hours.
12How do committed-throughput upgrades work?Keys can be upgraded to reserved RPS/TPM capacity via purchase order at the same $0.10 / $0.02 per-token rate (mailto:sales@mouse.dev).