Data security
Financial data needs strict rules. Here is how Centa AI handles data today — without promises or certifications we do not have.
Last updated:
Tenant isolation
- Every data request is authorised against the company the data belongs to — never an id taken from the URL or request body.
- A security test suite (59 scenarios) checks that one company cannot read or change another’s data; we run it before releases.
Authentication
- Sign in with email and password (stored only as a scrypt hash) or by confirming in Telegram.
- The session is a signed cookie with HttpOnly and Secure flags; Telegram Mini App requests are verified against Telegram’s signature.
- Repeated sign-ups from one address are rate limited.
Roles and permissions
Roles: owner, admin, accountant, viewer, employee. Only owners and admins change the plan, users and payments; employee is the narrowest role.
Encrypted integration credentials
Access keys for banks, Didox and 1C are encrypted (AES-256-GCM) and never shown again after saving — only a mask. Electronic-signature keys stay on the user’s device: Centa stores only the public key.
Document storage and signed URLs
Documents are kept in private storage, in their own company’s folder. Viewing uses a signed link valid for 10 minutes.
Audit logs
Every accounting decision is written to an audit trail: old and new state, who and when. Product analytics stores event codes only — no amounts, counterparty names or question text.
Document processing and AI
Document text is read on Centa’s servers: first the PDF text layer, then Tesseract OCR. Amounts, entries and taxes are computed by code. In the current production setup, company data is not sent to external language-model providers. Reading receipt photos through Anthropic’s API exists in the code but is switched off; this page will be updated before it is switched on.
Payments
Centa never receives or stores card numbers: a subscription is paid on the payment provider’s page and activated only after that provider’s signed notification.
Hosting and backups
The application runs on Railway (a region in the Netherlands); the database and files are on Supabase (Frankfurt, Germany) on a paid plan with daily automatic database backups taken by Supabase. Connections to the website and the app use HTTPS only.