← Back to Ataski

Security posture

GDPR Article 28 ready · CCPA Service Provider · SOC 2 Type I in progress

Ataski operates a single multi-tenant Postgres database with Row Level Security enforced at the database layer; an append-only audit log on every action; and per-tenant cost guardrails to contain damage from any single-credential compromise. This page is the procurement-ready summary — for the contract-binding surface, see the Data Processing Agreement.

Multi-tenancy

Every customer-data table carries a tenant_id column and a Postgres Row Level Security policy that filters every read and write to the bound tenant’s session variable. The application sets the variable from the authenticated principal at the start of every request; the database rejects any query that attempts to read or write outside the bound tenant, independent of application-layer correctness.

Defence-in-depth for surfaces that sit outside Postgres: the LiteLLM cache namespaces every prompt by a per-tenant salt so cache hits cannot cross tenants; durable workflow payloads are encrypted with per-tenant keys at the workflow boundary; and the R2 object store namespaces every key under tenants/<uuid>/… so a leaked URL cannot enumerate other tenants.

Audit log

Every LLM call, external API call, and data modification is written to a single append-only audit_log table keyed on (tenant_id, correlation_id). The table is locked at the database layer (REVOKE UPDATE, DELETE on the application role) — the only path to mutate audit history is direct administrative access by Ataski operations, which itself produces audit rows under a distinct actor_type="ops" marker.

Encryption

Access controls

Authentication is delegated to WorkOS (SSO, SAML, passwordless). Authorisation is role-gated at the route layer: high-stakes actions (board pack approval, monthly investor update send, outbound campaign launch) require a named role (founder or finance_lead) on the workspace.

Connector scopes

Every operator-connectable system runs against a documented set of provider-side scopes. The list below renders from our internal scope manifest — what you see is what the OAuth client (or equivalent credential) actually requests.

PII handling

Ataski operates as a CCPA Service Provider (Cal. Civ. Code §1798.140(ag)), not a data broker. Contact records stay in per-tenant RLS scope and are never aggregated across tenants; firmographic non-PII (company name, industry, public business records) may be cached across tenants for performance. We do not depend on email-finder data-broker vendors (Hunter, Apollo, Findymail, ZoomInfo, Coresignal); contact discovery uses public-source compose patterns. Per-recipient deletion within 45 days of request via /privacy/optout.

Sub-processors

The canonical sub-processor list is published at /legal/subprocessors and currently comprises 18 vendors. Sub-processor changes ship with 30 days’ prior notice via in-app banner and email to the workspace admin; Customer may object on reasonable grounds during that window.

Data Processing Agreement

The master DPA covers GDPR Article 28, UK GDPR, and CCPA Service Provider obligations: read it at /legal/dpa. The authenticated version at /app/legal/dpa fills the Controller fields from the workspace and supports electronic signature by the workspace founder or finance lead.

Incident response

Errors and exceptions are captured in Bugsink (hosted Sentry drop-in); the on-call rotation reviews incident severity within one hour of first signal. Status of operational endpoints is published on the public status page. For any incident involving Customer Data, we notify the affected Controller without undue delay and within 72 hours per GDPR Article 33.

Compliance posture