DORETPRISM

Security

DORET Prism holds your model-provider keys and decides which of your agents' calls may run. This is how that trust is protected today.

01Provider keys

  • Encrypted with AES-256-GCM, each with its own data key, wrapped by a master key kept outside the database.
  • Bound to the organization, provider and key type: a sealed key copied to another organization does not decrypt.
  • Never shown again after saving; only the last four characters. Agents never see them.
  • Sent only to their own provider, over https, without following redirects; scrubbed from anything a provider sends back.

02Isolation and access

  • Organization data is separated by row-level security in Postgres, enforced on the application's own database role; sign-in and sessions use a few narrow, reviewed functions.
  • Six roles, from Owner to Viewer; managers act only on their own groups. Provider keys are changed only by an Owner, signed in.
  • Two-factor sign-in with recovery codes, which an Owner can require for the whole organization.
  • Sign-in limits per address and per network, the same answer for known and unknown emails, origin checks on every change.
  • The dashboard runs only its own scripts: each page has a fresh nonce in its Content-Security-Policy, and it cannot be framed by another site.

03Credentials

  • Agent keys, API keys, sessions and one-time links are stored only as SHA-256 hashes and shown once.
  • Invitation, password-reset and confirmation links carry their token after #, so it reaches no server or proxy log.
  • The master key can be rotated: every secret is re-encrypted in one transaction and checked before it is saved.
  • An organization can reset a teammate's password or two-factor sign-in only if that person belongs to no other organization.

04Money and records

  • Every limit is checked and reserved in one Postgres transaction before a call, so concurrent calls through the gateway cannot overrun it together. The exception, providers that bill reasoning beyond max_tokens, is held with a reasoning allowance; a call that goes past it is charged and flagged.
  • Every change and approval is written to a hash-chained audit log, so an edit to a past entry shows up; the ledger and the log are checked every hour.
  • A call whose outcome is unknown stays charged at its full reservation until it is settled: automatically from OpenAI's or Anthropic's usage report when a scoped admin key is connected (Business), or by an Owner, Admin or Finance member working from the provider's console. Either is recorded.
  • An Owner can close the organization: keys stop working at once, and its records are deleted 30 days later (payment event ids from Paddle are kept).

What DORET Prism does not do

It holds no funds and issues no payment cards: you pay your providers directly. It does not store prompts or model responses: a transaction keeps the model, tokens, cost and status, and for a call the provider rejects, the first 200 characters of its error, which can quote the request.

Reporting a vulnerability

Write to hello@doretprism.com before publishing anything. We confirm receipt within two working days.