Security and data
What Dcision stores and for how long, where your state goes — destinations included — how keys, secrets and passwords are protected, roles and workspace isolation, and how to keep sensitive data out.
What Dcision stores
| Data | What is kept | For how long |
|---|---|---|
| Account | E-mail, name, avatar (from Google, when you sign in with it), language and — only if you set one — a password hash (scrypt) | While the account exists |
| Sign-in codes | Only a keyed hash of each 6-digit code; valid 10 minutes, 5 attempts | Deleted after a day |
| Sessions | A signed token in your browser, valid 30 days. Dcision only keeps the time of your last Sign out everywhere or password change | — |
| Invitations | The invited e-mail, the role, who invited and when, and a SHA-256 hash of the link's token — never the link | While the workspace exists |
| Organization details | Legal name, tax ID, billing e-mail, country, address and website — also saved on your Stripe customer for invoices | While the workspace exists |
| Decisions | Drafts and every deployed version (the schemas) | Until you delete the decision |
| API keys | A SHA-256 hash of the key, a masked prefix, name, environment and dates — never the key itself | Until the workspace is deleted |
| Provider keys (BYOK) | The key encrypted with AES-256-GCM and its last 4 characters | Until you remove it |
| Workspace secrets | Each value encrypted with AES-256-GCM, with its last 4 characters | Until you delete it |
| Signing secret | Encrypted; after a rotation, the previous one too, for 24 hours | While the workspace exists |
| Executions | Always: decision, version, source, status, error, action and reason, latency, input and output tokens, estimated cost, model, request ID and the destination entries of the run. The state only if storeInput is on; answers, confidence, weighted levels, composites and distributions only if storeOutput is on | Your log retention (below) |
| Destination deliveries | Status, attempts, the receiver's status code, latency and first 1,024 characters of its answer, and a masked preview of the request — never its body. The full request is kept encrypted until it succeeds, and for failed deliveries so they can be resent | 30 days |
| Idempotency records | A hash of the request and the response it returned | 24 hours |
| Usage counters | Number of billable decisions per hour | About 400 days, for billing |
| Billing | Stripe customer and subscription IDs, plan, status and cycle dates. Card data is handled by Stripe and never reaches Dcision | While the workspace exists |
Where your state goes
To answer a decision, Dcision sends the engine provider:
- the state — all of its fields, including fields the schema doesn't declare — and the decision's
context, asdecision_context; - the question instructions, the options, levels and criteria, as text or JSON;
- the model name.
Composite weights, policies and settings stay in Dcision: they are applied after the engine answers.
Destinations can send data on after the decision — only where you configure it:
- Webhooks and workflows send the answers, the action and the params you map — never the state itself.
- API requests send what your URL, headers and body template contain.
- Agents receive the whole state as
input; LLM destinations send the state — or theinputyou set — to your model provider, under your key. - Fixed replies and functions are returned to the caller; nothing leaves Dcision.
See Destination security and limits.
With Dcision's engine key, the call goes directly to TypeSafe's API (Jev) under Dcision's account; TypeSafe states that Jev is not trained on customer requests or responses — see its legal documents. With your own key, it goes to the provider you chose, under your account and its terms. See Engines and BYOK.
Dcision doesn't write your state or your keys to its application logs.
Retention and deletion
- Executions are deleted after the shorter of your plan's retention (Genesis 7 days, Developer 14, Growth 30, Enterprise 365) and the workspace's Execution log retention setting.
- Deleting a decision deletes its versions and executions immediately.
- Idempotency records expire after 24 hours, whatever the decision's storage settings.
- Revoking an API key disables it at once; the hashed record stays for your history.
- Destination deliveries are deleted 30 days after they were created, whatever the log retention — also when their decision was deleted.
- Deleting a workspace (its Owner can) deletes its decisions, versions, executions, API keys, invitations, secrets and deliveries. The Stripe customer is kept, so past invoices stay available.
- Sign out everywhere, in Account, ends every session of your account at once.
Keep sensitive data out
- Turn off
storeInput— andstoreOutputif answers are sensitive too — on decisions that receive personal data. See Decision settings. - Send only what the decision needs: undeclared fields are forwarded to the engine. It also makes answers more accurate — see Writing good questions.
- Keep personal data out of instructions, options and
context: they are part of the schema, stored with every version and sent with every call. - Replace direct identifiers (names, e-mails, document numbers) with your own IDs when they don't change the answer.
- Shorten Execution log retention in Settings.
- Map into destination params only what each receiver needs: destination entries — function params included — are kept with the execution even when
storeInputandstoreOutputare off.
Access control
- Workspace isolation. Every query is scoped to a workspace. An API key resolves exactly one workspace and can only run that workspace's decisions — anything else is
404 DECISION_NOT_FOUND— and only list that workspace's executions. - Inputs stay in the app.
GET /v1/executionsreturns answers, actions and metrics but never the stored state: inputs, which may hold personal data, are only shown to workspace members in the app. - Keys and sessions are separate. API keys only work on the public API (
/v1); the app's endpoints refuse them with403 FORBIDDEN, and a session token is not accepted on/v1. - Sign-in. Google, a 6-digit e-mail code, or an optional password: at least 10 characters with letters and numbers, never your e-mail or a common password, stored as a scrypt hash. Wrong passwords lock sign-in with a password for 15 minutes after 5 attempts, and the answer is the same for an unknown e-mail. Setting or changing a password sends you an e-mail, and changing it ends your other sessions.
- Sessions. A signed token in an
httpOnlycookie, never exposed to the browser's JavaScript, valid 30 days. Sign out everywhere revokes them all. - Roles. Every member is an Owner, Admin, Member or Viewer. Viewers read; Members build, deploy and run decisions, API keys and destinations; Admins also manage people, settings, provider keys and secrets; only the Owner manages billing, transfers ownership and deletes the workspace. Refusals answer
403 FORBIDDEN. See Team, roles and account. - Workspace access. Every app request is checked against your membership of the workspace; a workspace you don't belong to answers
403 FORBIDDENwithdetails.reason = "workspace_access".
Secure integration checklist
- Call the API from your backend over HTTPS; never expose an API key in a browser, a mobile app or a repository.
- Use one key per service and revoke keys you no longer use. Use test keys for staging and CI.
- Send an
Idempotency-Keyso retries can't duplicate a decision — see Idempotency. - Log
execution_idandX-Request-IDinstead of the state when you need to trace a decision. - Verify
Dcision-Signatureon every webhook, workflow, agent and API request you receive from Dcision, reject old timestamps and deduplicate on the delivery ID — see Webhooks. - Keep tokens and secret URLs in workspace secrets and reference them as
{{secrets.NAME}}— never type them into a destination's URL, headers or body. - Keep
livemode: falseevents — test keys and the Playground — out of production systems.
Responsible use
Dcision returns probabilities, not certainties. For consequential decisions about people — credit, employment, housing, healthcare, legal matters — use it to triage and route, keep a person in the loop (for example with escalate), and review outcomes regularly.
Legal
CLI
The dcision command line — save an API key, run decisions, list templates, scaffold and validate decision schemas offline — with exit codes for scripts and CI.
Changelog
Release notes of Dcision — v0.6 Laya engine; v0.5 prepaid credits; v0.4 MCP server, Claude Code and webhook triggers; v0.3 destinations, teams, SDKs and Overview; v0.2 full Jev coverage; v0.1 launch.