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.
Isolation: each customer joins with their own key, tagged and revocable. The rules only allow backend → your node, and only towards the ERP's ports: two customers' nodes cannot see each other.
Your credentials stay yours: you enter them in the application, exactly as in a normal connection.
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.
The one thing we do store: the conversation history — the question and the answer as shown, which may include the figures that were queried — tied to the account of whoever asked, and deletable by them from the app.
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.
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.
Hosts the infrastructure. Does not query the data.
Language model
Anthropic — Claude
Question, field names and a bounded extract of rows.
Website and web app
Vercel
The interface only. It never receives ERP data.
Email, logs and errors
Resend · Better Stack · Sentry
Platform emails and traces with no message content.
Backups
Daily backup
A 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.
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.
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.
Data subject rights: access and deletion from the app itself, history export on request, and contacto@aski.dev as the formal channel with a reply within 7 business days.
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.
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.