Aski Architecture & security

How it is built
and what it touches

For IT teams and for data protection audits. Everything here is published at aski.dev/en/security and can be verified without us.

🔒 Read-only🔑 AES-256-GCM🌐 TLS 1.2+
AskiAski
The journey of one question

End to end, live

App or browser the end user HTTPS Aski backend Railway · USA translates and runs READ query only the rows for that question YOUR ERP Odoo or SAP right where it is Language model question + field names + bounded extract of rows
1. The question travels encrypted 2. Your ERP is queried with YOUR user 3. The model writes with what came back
Architecture & securityaski.dev/en/security
AskiAski
If your ERP does not reach the internet

Without opening a single inbound port

Many on-premise installations are not published, and they do not need to be. For those cases a private-network node is installed on a machine in the same network where the ERP lives, and the backend goes in through it.

🔒

No inbound ports

The node opens the connection outward, the same way a browser does. No public IP, no port forwarding, no publishing the ERP.

🖥️

Your server untouched

The node sits on any machine in that network. The ERP stays exactly as it is.

⏱️

Fifteen minutes

One command we send you ready to paste. Then, in the app, you tick a checkbox and enter the ERP's internal address.

Architecture & securityaski.dev/en/security
AskiAski
What is not in that drawing

Your ERP does not move

The strongest guarantee is not an access control: it is that there is no copy of your data to protect.

🚫

No replica

We do not copy or sync your database. There is no store of ours with your information inside.

🌙

No nightly job

No ETL, no scheduled job, no sync window to watch over.

🔌

Without you, no data

If you switch off your server, Aski stops answering: the data lives at your place, not ours.

Architecture & securityaski.dev/en/security
AskiAski
Read-only

Not a promise: the function does not exist

The only operations the system can issue against the ERP are queries. The write path is not in the code, so there is nothing to enable by mistake and nothing the model could be "talked into" doing.

  • Odoo: queried through the standard API (XML-RPC) with read methods.
  • SAP: GET requests only, against OData or the Service Layer.
  • If someone asks to delete something: it is cut before touching the ERP and the attempt is logged.
0
write functions towards the ERP
0
vulnerabilities in our own published pentest
Architecture & securityaski.dev/en/security
AskiAski
Permissions

Aski sees what that user sees. No more, no less.

It connects with the credentials of the user you authorise and inherits their permissions. We do not ask for an administrator or for special access.

  • You define the scope: give it a user limited to sales and Aski only sees sales.
  • No privilege elevation: there is no superuser and no jumping over the rules.
  • Your rules still rule: ERP permissions and record rules are respected as they are.
  • Cut access whenever you want: disable that key in your own ERP and it is over, instantly.
  • Without depending on us: no ticket to open, no reply to wait for.
  • Verified: a user without accounting access gets "you do not have access", and is not charged for the query.
Architecture & securityaski.dev/en/security
AskiAski
Isolation between customers

Three layers, and the first is the one that counts

1

No shared repository

We keep no copy of anyone's ERP, so there is no place where two customers' data could cross. Every query runs live against that customer's instance.

2

Each connection, one owner

Credentials, conversations and messages hang off their owner's identifier, and every query is filtered by the authenticated user. No API route returns a credential in clear text.

3

The ERP permission rules

Aski never sees more than the connected user sees in their own ERP: if they cannot see costs, margins or another company, neither can Aski.

Architecture & securityaski.dev/en/security
AskiAski
Where it is hosted

All infrastructure, in the United States

ComponentProviderWhat it receives
Backend and databaseRailwayHosts the infrastructure. Does not query the data.
Language modelAnthropic — ClaudeQuestion, field names and a bounded extract of rows.
Website and web appVercelThe interface only. It never receives ERP data.
Email, logs and errorsResend · Better Stack · SentryPlatform emails and traces with no message content.
BackupsDaily backupA copy of the database, retained for 30 days.

There is an international transfer of data to the United States, and it is declared as such. The full list, with what each provider receives and its country, lives in section 4 of aski.dev/en/privacy.

Architecture & securityaski.dev/en/privacy
AskiAski
What the AI model receives

A bounded extract, never your database

To write the answer in your language, the model receives the question, the model and field names, and an extract of the records that query returned.

  • It may contain business data: customer names or amounts. We say it before you have to ask.
  • Never sent: your full database or your credentials.
  • It trains nothing: Anthropic does not train on that content; it retains it for up to 30 days solely for abuse detection.
20
rows per answer in normal mode
80
rows per query in Deep analysis
Architecture & securityaski.dev/en/security
AskiAski
Encryption and access control

Encrypted in transit and at rest

  • In transit: TLS 1.2 or higher on every leg, app ↔ backend and backend ↔ ERP.
  • At rest: the ERP password or API Key is encrypted with AES-256-GCM before being stored.
  • Accounts: passwords as bcrypt hashes; sessions with signed tokens.
  • Device: encrypted storage with a key from the Android Keystore.
  • Operational access to the database is restricted to a minimal number of administrators, and audited.
  • SQL injection and model manipulation are detected before reaching the AI, and logged.
  • Sensitive fields and restricted models are rejected by list.

What this does not mean: the encryption key lives on our server, because the backend needs to decrypt in order to open the connection. As the operator, technical access exists. We would rather declare it than let you assume otherwise.

Architecture & securityaski.dev/en/security
AskiAski
Retention and deletion

It is really deleted, and we say what is not

🗑️

Deletion from the app

Immediate and permanent. Requires confirmation and re-authentication. It removes chat history, credentials, learned vocabulary, sessions, tokens and the security log.

📄

What is kept, and why

Billing history, five years under Peruvian tax law, with the email anonymised. And a deleted account may remain in backups for up to 30 days, until they expire.

Architecture & securityaski.dev/en/privacy
AskiAski
What we do not have

We would rather you hear it from us

📋

No SOC 2, no ISO 27001

We hold neither certification.

🎯

The pentest is our own

We ran it and recorded it ourselves; it is not an independent third-party audit.

🌍

No regional residency

We do not offer hosting in the EU or in your country: everything is in the United States.

What you can verify: the architecture, the public and versioned policy, the two-page security brief your auditor can file, and your own audit from your side — Aski comes in through the standard API with the user you created, like any other client.

Architecture & securityaski.dev/en/security
Aski Next step

What do you need to give the green light?

If it is the data processing agreement, send us your template and we return it reviewed. If it is seeing the real behaviour, we connect one customer with a read-only user and you watch it yourself.

aski.dev/en/security · aski.dev/en/privacy · contacto@aski.dev