Architecture boundaries, OAuth, encryption, audit, write gates, and how to report issues for the hosted beta.
Security — ERPipe trust center
The Short Answer
ERPipe does need an Odoo URL, database name, username, and password or API key to make authorized calls to the instance you choose. The important boundary is what happens next: the secret is validated against that Odoo instance, encrypted before database storage, and decrypted only inside ERPipe when a tool call needs to reach Odoo.
Your AI agent or MCP client receives scoped tools and authorized Odoo results. It does not receive the stored Odoo password or API key.
Our Security Commitments
- We do not return the stored Odoo password or API key through the dashboard API or MCP tools.
- We do not ask you to paste ERPipe dashboard cookies or OAuth tokens into agent configuration.
- We do not silently enable writes. New connections start read-only, and write access requires explicit human consent plus server-side permission checks.
- We resolve every Odoo-bound call against an explicit connection owned by the active workspace.
- We redact secret-bearing fields from audit detail and bound retained payload previews.
- Workspace owners can pause access, rotate a credential, delete a connection, or request workspace deletion.
How Your Odoo Credential Is Handled
| Stage | What ERPipe does |
|---|---|
| Submission | Receives the credential over HTTPS and rejects URL user information, localhost, private IP targets, and non-HTTPS Odoo endpoints. |
| Preflight | Uses the credential to authenticate only against the public Odoo endpoint you selected before saving the connection. |
| Storage | Encrypts the credential with AES-256-GCM using a per-workspace data key wrapped by a master key. Authenticated context binds the ciphertext to its workspace, connection, and key version. |
| Tool call | Resolves the workspace-owned connection again, revalidates its destination, and decrypts the credential server-side only when Odoo must be called. |
| AI response | Returns authorized tool results, not the stored Odoo credential. |
| Rotation or deletion | Lets the owner replace the credential or remove the connection. Connection deletion removes the encrypted credential and its connection-level policies. |
Access Is Narrow by Default
- OAuth uses the authorization-code flow with PKCE. Plain PKCE and the implicit flow are disabled.
- Access tokens expire after one hour. Browser magic links expire after 15 minutes, and server-side browser sessions expire after seven days.
- MCP authorization defaults to erpipe:read. Granting erpipe:write requires an explicit consent checkbox.
- Each new Odoo connection also starts with writes disabled. OAuth write scope alone cannot turn a connection writable.
- A write follows preview, validation, explicit confirmation, and a matching consume-once approval. Server policy can still deny it or require human approval.
- Field policies and method allowlists can further restrict what a connection may read or invoke.
Network and Abuse Boundaries
ERPipe accepts only HTTPS Odoo endpoints. It blocks URL credentials, localhost, IP-literal targets, and DNS results that are not globally routable public addresses. The destination is checked again when an Odoo-bound tool runs, so a saved hostname cannot bypass the network boundary later.
ERPipe currently runs on Cloudflare Workers, D1, KV, Durable Objects, Turnstile, and Cloudflare Email Service. Cloudflare documents encryption at rest for D1 and TLS for data in transit in its D1 data security documentation. Workspace session limits, per-connection tool-call budgets, and Turnstile add abuse controls. See the subprocessor list for the current provider inventory.
Your Control and Exit
You can pause a connection immediately, rotate its Odoo credential, or delete the connection. A workspace deletion request disables the workspace immediately, signs out active browser sessions, and schedules deletion after a 30-day recovery window.
For data categories, retention, deletion, and provider terms, read the Privacy Notice, Data Processing Addendum, and Subprocessors.
The Safest Setup We Recommend
- Create a dedicated Odoo service user or API key instead of reusing an administrator account.
- Give that identity only the Odoo groups, companies, models, and record rules it genuinely needs.
- Start with ERPipe read-only and enable writes only for a reviewed workflow.
- Rotate the Odoo credential immediately if you suspect it was exposed outside ERPipe.
These steps follow the least-privilege and secret-lifecycle principles in the OWASP Secrets Management Cheat Sheet. ERPipe's OAuth controls are designed around the current OAuth 2.0 Security Best Current Practice.
What We Do Not Claim
No internet service can honestly promise that a breach is impossible. ERPipe is currently a free beta: it has no uptime SLA, no dedicated data-residency commitment, and no ERPipe-specific security certification. We will not represent those controls as certifications until they are independently established.
Security is shared responsibility. You remain responsible for Odoo permissions, backups, record rules, user lifecycle, and deciding which business data an authorized AI or MCP client may access.
Report a Security Issue
Send a concise description and reproduction details to hello@erpipe.com. Do not include live credentials, access tokens, or customer data in the first message. We will acknowledge actionable reports and coordinate a safe verification path.
Last updated: 2026-07-22