CarbonSite
Security

Designed to be audited.

Multi-tenant isolation, role-based access control, append-only audit logs, and immutable snapshots. Every control is enforced server-side.

P0CoreDefenceclassification key
Multi-tenant isolation
P0

Every organisation's data is strictly scoped at the query level. No tenant can access another organisation's records, files, or calculations — isolation is enforced in the data layer, not just in route handlers.

Role-based access control
Core

Six roles govern what each user can see and do: admin, editor, reviewer, viewer, auditor, and field worker. Role assignment is managed server-side. Client-supplied claims are never trusted for authorisation decisions.

Object storage access
Core

Evidence files, import data, and generated reports are stored in isolated object storage. Clients never receive raw storage keys or bucket credentials. All download links are short-lived, server-generated signed URLs issued only after authentication and membership verification.

Append-only audit log
Core

Every authentication event, role change, data import, record mutation, calculation run, snapshot publication, report download, and submission review is permanently recorded. Audit rows are never modified or deleted, providing a tamper-evident trail for SECR and ISO 14064-1 compliance.

Immutable calculation snapshots
Core

Publishing a snapshot locks the underlying calculation run. Reports produced from that snapshot will always reproduce the same figures. Recalculation produces a new versioned snapshot — prior versions are preserved and unchanged.

Rate limiting
Defence

Authentication, upload, and mutation endpoints are rate-limited per IP address. Limits are enforced before any route handler executes. Requests that exceed the limit receive a 429 response with a Retry-After header.

Security headers
Defence

Every response carries security headers: clickjacking protection, content-type sniffing prevention, strict referrer policy, a permissions policy that restricts access to device APIs, and HSTS in production. Applied globally in middleware.

Field worker isolation
Core

External users (subcontractors, suppliers, tipper hires) operate in a strictly limited mode. They can submit evidence for the reporting periods they were invited to and check the status of their own submissions — nothing else.

No external auth dependencies.

Authentication runs entirely on your own infrastructure. Session data lives in your database, not a third-party auth service, so you have full custody of who has access and when. Mobile clients use short-lived tokens with automatic renewal.

Files are stored in isolated, access-controlled object storage. Each organisation's content is scoped to its own namespace. Download links expire after a short window and are only issued to authenticated, authorised users.

Cross-tenant access is a P0 security bug, enforced in the data layer.

Audit rows are append-only. Never updated. Never deleted.

Calculation results are immutable after publication.

Field worker scope is zero, no org data, no other users.

Security questions? Talk to the team.

We're happy to walk through the controls architecture, data residency, and compliance positioning.

Get in touch