cascade-client Index

Security

How cascade-client protects your data and your customers'.

Every request is authenticated and scoped

Access is by API key. Each key carries explicit scopes — a key issued to read basket data cannot place a trade, and a key scoped for the index cannot read exposure. Scopes are checked on every request, not at login.

Keys carry a mandatory expiry. There is no non-expiring key. Keys can be rotated without downtime and revoked immediately.

Test and live keys are separate namespaces, and live keys are only issued after due-diligence approval.

Organisations are isolated at the database, not just in code

Every organisation's data is separated by row-level security in PostgreSQL. Isolation is enforced by the database itself, so a bug in application code cannot leak one organisation's data to another.

That isolation has a dedicated cross-organisation test suite that is a mandatory release gate — a build that cannot prove isolation does not ship.

Every message we send you is signed

Webhooks are signed with HMAC-SHA256 over the timestamp and the exact request body, so you can verify both that a message came from us and that it was not altered in transit. Signatures carry a timestamp, and stale ones are rejected — a captured message cannot be replayed later.

Secrets are never in our database or our code

Credentials are held in a managed secret store. What our database holds is a reference to a secret, never the secret. Venue credentials are separated per organisation, so exposure of one is bounded to that organisation.

Operator actions are logged

Every operator action against an organisation is written to an audit log. Loss-cut evaluations are logged whether or not they breached — the record exists to be evidence, not just a debugging aid.

The regulated parts fail closed

Where the rules matter, the system stops rather than guesses. If the jurisdiction policy pack that carries statutory limits cannot be read, trading halts. There is no default and no fallback: a control that passes when unconfigured is not a control.

Enrichment — news and research — is the deliberate exception and degrades visibly instead.

Security in the pipeline

Every change runs dependency-vulnerability and secret-scanning checks before it can merge. Linting failures are build failures.