Skip to content
Menu

Security

Each group apart, each company apart

Each group has a dedicated instance, shared with no other group. Inside it, the boundary is the company.

The access model

The instance, then the company

Between groups the boundary is the instance itself; inside a group's instance, it is the company.

The access model: who can see what, across one group's companiesTwo readers ask at the same moment. Both pass three checks on every request: the database refuses anyone not signed in, rebuilds their access from their current grants, and applies row-level security on every table. A regional IT lead, whose grant is narrowed to one country, reaches one company's rows: the logistics company in Saudi Arabia. A group finance lead, with a group-level grant, reaches all five. Each change is committed with its audit entry, inside the group's own instance.Who asksChecked by the database on every requestEach company's own rowsRegional IT leada grant narrowed toone country: Saudi ArabiaGroup finance leada group-level grant:every company1 · Signed inthe database refusesa request with no onesigned in2 · Current grantsaccess rebuilt fromthe grants held in thedatabase, never fromthe sign-in token3 · Row-level securityforced on every table:rows of the companiesthe grant coversLogistics company · Saudi ArabiaRetail company · UAEHospitality company · KuwaitProperty company · QatarHolding company · UAEThe audit traileach change committed together with its entry, which records references and counts, never a name, and which no one can editOne group's dedicated instanceits own database, file store, encryption key, credentials and processes, shared with no other groupThe access model: who can see what, across one group's companies. Two readers ask at the same moment. Both pass three checks on every request: the database refuses anyone not signed in, rebuilds their access from their current grants, and applies row-level security on every table. A regional IT lead, whose grant is narrowed to one country, reaches one company's rows: the logistics company in Saudi Arabia. A group finance lead, with a group-level grant, reaches all five. Each change is committed with its audit entry, inside the group's own instance.Inside one group's own instanceRegionalIT leadone countryGroupfinance leadevery company1 · Signed inthe database refuses arequest with no one signed in2 · Current grantsaccess rebuilt from the grantsheld in the database, neverfrom the sign-in token3 · Row-level securityforced on every table: onlythe companies grantedLogistics · Saudi ArabiaRetail · UAEHospitality · KuwaitProperty · QatarHolding · UAEThe audit traileach change committed with itsentry; no one can edit oneOne group's dedicated instanceits own database, file store andkey, shared with no other group
Two readers at the same moment: one granted a country, one the group. Example companies.
  1. 1

    Signed in

    The database refuses a request that has no signed-in person, rather than answering it with nothing.

  2. 2

    Current grants

    Each request rebuilds a person's access from their current grants in the database, never from what their sign-in token claims.

  3. 3

    Row-level security

    The database keeps each company's data apart with row-level security, switched on and forced on every table. The build fails if one is missing.

  4. A group-level grant

    A group-level grant reads every company in the group, while its changes stay within what the role allows.

Links between records
A record in one company cannot point at a record in another, because the links between records carry the company.
Divisions
A division is a narrower list of companies, read under the same company boundary.

Sign-in

Sign-in follows your directory

People sign in with single sign-on over OIDC or SAML, Microsoft Entra ID and Okta included.

Single sign-on
A group can require single sign-on. The database then gives a password session nothing in that group apart from its named emergency accounts.
Your directory
Your directory adds and removes people over SCIM 2.0, and removing someone withdraws their access in that group at once. A directory group can be mapped to a role, and a mapping never gives more access than its author could give.
Directory tokens
Directory tokens are made inside the database, shown once, stored only as a hash, and expire. Every bad token gets the same answer, so a token cannot be probed.
Second steps
A person can add an authenticator app (TOTP) as a second step at sign-in. A verified passkey sign-in meets a group's two-step requirement on its own, and a copied passkey is refused when its signature counter does not move forward.
Recovery and changes
Recovery codes are stored only as salted hashes, and each one works once. Replacing or removing a second step asks for a fresh check with a factor the person already holds. Where a group requires two-step sign-in, a person cannot remove their last second step.
Your provider's second step
A group can let its identity provider's multi-factor sign-in stand in for Riopex's own second step. Turning that trust on needs an administrator who has passed Riopex's own second step.
Local accounts
A local account needs a strong password, checked against known breached passwords, and a verified email, and it locks after repeated failures. An administrator invites a person by email, and the link works once and expires. Where a group allows it, people sign in with a Google or Apple account.
Passwords
Changing a password signs the person out on their other devices. The forgotten-password form gives the same answer whether or not the account exists.
Sessions
Sign-in cookies cannot be read by scripts in the page. Revoking or suspending a grant signs the person out on every device. A group can set an idle limit and a maximum session age, and the database enforces both as well as the web.

Who sees what

Grants, roles and hidden fields

Access is held as grants: one role over the group, some companies or a division, optionally limited to countries and given an expiry date.

  • Grants and countries

    A grant can be narrowed to countries, and the database then hides other countries' records, quote requests, provider contacts and mail included. Imported rows go only to a company the person may import into.

  • Roles

    A group can define its own roles, and the person writing a role can include only permissions they already hold. The structure editor asks before a change widens anyone's access, and a division people hold access through cannot be moved or retired until that access is withdrawn.

  • Personal data

    Personal data and the audit trail each need their own read permission, which company administrators hold and analysts and viewers do not. Without it, a reader sees Hidden in place of a name, employee reference and number. A mobile number shows only its last four digits, and mobile and SIM numbers on a bill are stored as hashes keyed with the instance's own key.

  • Separation of duties

    Reviewing a bill and accepting it are separate permissions. The person who raised a request can never approve it, and a step that needs every approver needs a different person in each seat. No one can change a finding's figures.

Audit trail

From the commit to a signed checkpoint

Opening records, downloading documents, exports, reports, unmasking personal data and assistant reads are recorded, not only changes.

  1. Committed together

    A change made on the web and its audit entry are committed together, or neither is. Changes to grants, roles, single sign-on, the directory and policies are written to the trail by the database itself.

  2. Written without names

    Entries record references and counts, never a person's name, email address or phone number. Each carries the source address, device and session it came from, and whether the action succeeded, was refused or failed.

  3. Sign-ins in the same trail

    Sign-ins, failed sign-ins and second steps join the same audit trail as every other event.

  4. Chained in commit order

    Every entry joins its group's hash chain as it commits, in commit order. No one can edit an entry, at any level of privilege.

  5. Kept write-once

    The trail is also kept as a write-once copy under the instance's key that no one can delete, and any altered or missing entry shows when the chain is verified. Retention and legal hold are policies the audit store applies; no one holds a right to delete entries.

  6. Checkpointed outside

    Signed checkpoints of each chain are kept outside the instance and delivered to the group, signed with a key the database never holds.

  7. Verified by you

    A group's security team can re-walk the chain and check its signatures without trusting Riopex.

Connections

Every connection, and its rule

The list of outside services an instance may reach is kept equal to the hosts the code actually calls.

ConnectionIts rule
The audit APIYour security team pulls the audit chain and its checkpoints with a read token. Issuing one needs a session that passed two-step sign-in; it is shown once, can be limited to a list of source addresses, and stops working for good when its issuer loses access. Every read through the API is itself recorded in the chain.
Your SIEMRiopex pushes the audit chain as syslog over TLS, each entry labelled with its family, such as access administration or security refusals.
MonitoringRiopex only reads: it asks for a read-only key and never writes to a device.
AddressesA monitoring or SIEM connection reaches only an address a person has configured.
AI enginesAn engine is reached over HTTPS only, at the address set for it.
MailThe mailbox connects over IMAP and SMTP with TLS, and only to your own mail servers.
Providers' ordering APIsRiopex asks each provider for its open orders' status and opens no inbound callback. A provider receives the Riopex reference, the action, the target date, the circuit identifier and the account number, never a person's details or a price.
Confirmation filesA provider confirmation file sends only what the provider already holds and what needs confirming, never personal data or the group's own notes. Its email states how many services and which dates, never a service's details.
The MCP serverEvery tool only reads. A person makes a token while signed in and sees it once, Riopex stores only its hash, and in a group that requires two-step sign-in it can be made only from a session that passed it.
MCP tokens and callsA token stops working when it expires, is revoked, or its person loses access or is signed out everywhere, and a group administrator sets how long one may live. Results show phone numbers by their last four digits. Every call is recorded before its result is returned, without what was asked or answered, and a call that cannot be recorded returns nothing.
Outside servicesEvery outside service an instance calls, such as the AI engine, email relay or monitoring, sits where the group's instance runs, in the group's own estate, or is switched off.

Data handling

Personal data, kept narrow

Until a group administrator switches an engine on, nothing is sent to any model.

Reading bills

Before an engine reads a bill, every phone, SIM, device and email identifier on it is replaced by a token mapped back only inside Riopex, and the engine never receives the PDF or its file name. A whole scanned bill goes to an outside engine only by the group's own recorded choice. A bill a model refuses is never passed quietly to another, every call is an audit entry naming the engine, the model and the purpose, and an answer that cannot be recorded is not used.

The assistant

Whatever the engine, everything the assistant sends is masked first, and the answer is restored for the reader. Its services lookup never returns a phone or SIM number, it is never given your email address, and your question is never written to the logs. It treats what its tools return as data, never as instructions.

Mail

Nothing a message says is acted on as an instruction. Mail is linked to a record automatically only by a Riopex reference, a reply to mail Riopex sent, or a known provider contact. It is shown as plain text, never as HTML, and provider contacts and mail are shown only to people allowed to read personal data.

Files and maps

A file's format is read from its contents, not its name. An uploaded usage file is not stored, and the mobile insights export names a holder by employee reference, never by name. Mobile lines are found by employee reference or last four digits, never by name, and personal fields never sort or filter. The street map's tiles come from the instance, to a signed-in person only, and the map and the globe request nothing from outside it.

Credentials

Provider credentials are stored only as sealed envelopes: sealed by the web, opened only by the background worker. A stored credential can be replaced or deleted, but never read back, by anyone. Credentials never appear in logs, error reports, audit entries or job data, and an engine key is only ever sent to its own endpoint.

Keys and retention

Each instance has its own encryption key, under which its database, backups, file store and audit copy are encrypted at rest. A group can hold the master key in its own cloud key vault and see every use of it; rotating it re-wraps the master key, and destroying it makes every copy unreadable, backups included. Each group sets how long each family of data is kept, and a person who leaves is pseudonymised.

Delivery

A dedicated instance for each group

Riopex runs a group's instance for it, or the group runs the same instance in its own data centre, from the same signed release.

The corner of a dark glass office block
Its network
Only the web front end is reachable from outside an instance; its database, sign-in service and file store sit on a private network. Traffic is encrypted on every hop inside it, not only at its edge, and a hosted instance sits behind protection against flooding and web attacks, with limits per address.
Its address
Each group has a stable address of its own, on a riopex.com name or its own domain. Single sign-on, directory provisioning, the audit API and every emailed link use it, so moving the instance never touches the group's identity provider, directory or SIEM.
In your own estate
A packaged instance carries its own database, sign-in service, file store, backups and restore. It sends no telemetry to Riopex and needs no call home to run. Riopex deploys with Docker Compose or on Kubernetes, and can use the group's own PostgreSQL database.
Where it runs
An instance's database, documents, backups, logs, audit store and key all stay where its group chooses. A hosted instance has a second site in the same country for recovery and backups, proven by restoring, and a regulated group's instance can run on its own dedicated nodes.
Backups
Every instance takes scheduled, checksummed backups of its database and documents with point-in-time recovery from its first day, and restores are drilled on a schedule.
Releases
Every release is signed, and an instance runs images pulled by digest only after their signature is checked; an offline bundle is checked before anything in it is loaded. Each release ships a software bill of materials, and one whose images carry a known, fixable high or critical vulnerability is blocked. Every dependency is pinned to one exact version, and the containers run without root and with every Linux capability dropped.
Upgrades
Changes are proven on a staging instance holding synthetic data only. An upgrade takes a backup first, and if it fails the previous release keeps serving. A release changes the software, never the group's history. Upgrades roll out instance by instance, and every deploy and rollback is recorded: what changed, which image, who approved it and when.
The control plane
Riopex's control plane creates and upgrades instances and reads only their version and health, holding no group data beyond the instance register and sign-up and billing contacts.
Monitoring
Each instance's logs, metrics and traces go to a collector where the instance runs, or to the group's, carrying references and never values. Monitoring alerts on availability, errors, queue age and security refusals.
Riopex staff
No one at Riopex holds standing access to a group's instance. Staff reach one only through a short-lived, ticket-bound session that is recorded and that the group's named approver approves; an emergency override notifies the group. Every staff session is written to the group's own audit trail before any data is read, and staff sessions, database sessions and every use of the key are reconciled against each other.

Data processing

A data processing agreement, on request

The group is the controller of the data in its instance; Riopex is the processor.

The agreement
Available on request before a pilot, from hello@riopex.com.
Where data sits
The database and file storage location is set for each group's instance and agreed with the group.
A person's data
One person's data can be accessed, corrected or erased on request through a set procedure.

Subprocessors, by role

RoleWhat it may process
Hosting and deliveryRequest records, and anything sent through the pilot form, in transit
Database, sign-in and storagePlatform accounts and the group's telecom records, invoice files included
EmailA name, an email address and the message being sent
Error reportingDiagnostics with personal data scrubbed, and no invoice content
The intelligence engineMasked bill text and the Ask assistant's masked questions, once a group administrator switches it on
Notice is given before a new subprocessor processes a group's data, and a group under a DPA may object.
The register, with each provider

Questions

Questions about security

Can a problem in another group's instance reach ours?

No. A compromised web or background process reaches only the group whose instance it runs in, and restoring one group's instance never touches another's.

Is anything we hold sent to an AI model?

Not until a group administrator switches an engine on. After that, identifiers are replaced by tokens before an engine reads a bill.

Intelligence

Someone lost their phone. How do they get back in?

An administrator can reset the second steps of a person who lost their phone, and the person is told by email.

What happens if we withdraw our key?

Withdrawing the group's key shuts the instance out of every stored credential at once, and it fails closed.

Will you tell us about a security incident?

Yes. A group is told of a security incident affecting it within the time set in its contract.

Can we run it ourselves?

Yes. A group can run Riopex in its own environment, including a network with no internet access, from an offline bundle, and takes versioned releases on its own schedule.

Can our instance move to another region?

A group can ask for its instance in another region, provisioned the same way as the first.

A move keeps every record and the group's address, and the old site refuses sign-ins and API calls.

Can a person ask to see, correct or erase their data?

Yes, through a set procedure.

What happens to our data when the contract ends?

The group can export its whole data set, audit trail included, in documented formats.

Then the instance and its key are destroyed, and the group receives a signed deletion record naming the date.

Can our own team review the access model?

Yes. The roles, the permission set and the isolation checks are shown on request.

Will you answer our security questionnaire?

Yes, and the answers match this page.

Bring your security review early

Send the questionnaire with the pilot request, and ask for the DPA at hello@riopex.com. The answers match this page.

Request a pilot
People crossing a plaza in low sun, seen from above