Valinexis
Security & Data Handling

Written for the Conversation
Your Security Team Will
Actually Have

Not a badge page. This answers what a document, a case and a decision touch, what a model sees and what it never decides, where your files live, and what is not yet built - stated plainly, because a security document that only says what is finished is worse than none.

0 calls

from a model into the decision path

Names only

the database never holds a secret itself

Your account

documents can live in storage you own
Start here

What the Product Holds, and Why

Valinexis reads documents you send it, extracts named values, and checks those values against rules you configure. It produces findings, a report, and an audit trail. It does not transmit your documents to any party other than the model provider below, and only under the masking described there.

Kind Where Why
The document files themselves Blob storage Re-reading, evidence, the report
Values extracted from them Case database What the rules are evaluated against
Findings and outcomes Case database The result, and its audit trail
Decisions a person made Case database, append-only Who accepted what, and why
Messages sent to a sender Case database What somebody was told, and when
Operational logs Platform logs Diagnosis
The question that comes first

AI: What a Model Sees,
and What It Decides

This is the question every security review asks first, so it is answered first, and it is the architectural rule everything else on this page rests on.

No model call sits anywhere in the rule decision path.

Extraction is assisted by a model; evaluation is not. A rule that compares an invoice total against an approved estimate does arithmetic in code, against values already extracted, with a deterministic result. The same case validated twice produces the same findings, and every finding traces to the rule that produced it - "the model was having a bad day" is not a category of failure this product has.
What that means for your review. An AI governance assessment is scoped to extraction accuracy, not to decision fairness or explainability - a much smaller question, and one your existing process already knows how to answer.

What a Model Actually Receives

Document content is sent to a model to extract field values. Before it goes, recognisable personal data is replaced with opaque tokens, and restored after the response comes back. Which identifiers get masked is a per-tenant choice, not a fixed list - made on a screen in the console, not a code change or a conversation with us.

Configured per tenant

17 identifiers across nine markets. Turn on the ones that appear in the documents you actually send us.

Sensible defaults

Eight broadly-applicable identifiers are on from day one - a tenant who never opens the screen is not left unprotected.

A catalogue, not an expression box

Every pattern ships tested. You select from it; you do not author your own - a deliberate restriction, and it protects you. See below.

Preview before you commit

Paste a sample on the same screen and see exactly what a model would receive, before anything is saved.

Identifier Market / type Default
Email addressesUniversalOn
Payment card numbersUniversalOn
PAN & AadhaarIndiaOn
SSNUnited StatesOn
National Insurance numberUnited KingdomOn
That's a sample, not the full list. Seventeen identifiers are available in total, across nine markets - eight on by default, the rest off until you turn them on, including national identifiers for Singapore, Brazil, the UAE, Germany, Canada and Australia. Which ones are active is chosen per tenant in the console - no single list suits every market, and a fixed one either misses what a customer cares about or masks things they never see.

Why a catalogue, and not a box to type an expression into.

Every pattern ships tested - a customer ticks, they never author. That is because the failure people expect is a leak, and the failure that actually bites is the opposite: a pattern that matches too much hides the invoice total, the model cannot return a value it can no longer see, and the rule reading it reports that it could not be compared. Nothing errors, and the finding blames a document that arrived perfectly readable. Identifiers whose shape is loose enough to do that ship switched off, with a note saying what else they will catch. If you need an identifier the catalogue does not carry, that is a small addition on our side, not a limitation of the design.
Be precise about what this is. It is pattern-based redaction of identifiers that are both directly identifying and mechanically recognisable - not a guarantee that no personal data reaches the model. A name, an address, a policy number or a diagnosis written in prose is not one of these shapes and is not masked. If your requirement is that no personal data ever leaves your boundary, masking does not meet it on its own - the answer to that is a deployment where the model endpoint sits inside your own tenant, which is architecturally supported and available on request.

Structured data need not touch a model at all.

Where a value already lives in a system of record, a data contract template reads it by declared path - no model call, no confidence score, no redaction question to answer. See two kinds of document on the Platform page.

Extraction uses Azure Document Intelligence and Azure OpenAI, on endpoints configured per deployment. Azure OpenAI does not train on submitted content and does not retain prompts for provider use.

Where your documents live

Your Storage, Your Region,
Your Key - If You Want It

Storage is bound per tenant and read fresh on every operation. Three configurations are supported, and the choice is yours.

Configuration What it means
Our storage, your own container The default. Clean offboarding, per-tenant retention, and an access signature that can be scoped to you alone.
Your storage account Every read, write, delete and download is served from storage you own, under a key you control and can revoke. If that key is unavailable, uploads fail loudly rather than quietly falling back to our account.
Your region Recorded and visible on screen. Actual placement follows the storage account configured - the region setting is never used to silently route anything.
A container per tenant is a boundary, not isolation. The application credential that opens one tenant's container can open others too, unless you choose the second configuration above. If your requirement is cryptographic separation, your own storage account is the answer - not a container name.
Secrets and credentials

The Database Holds a Name,
Never a Secret

Storage account keys, mailbox credentials, webhook signing secrets, SFTP keys - every credential the product holds is referenced by name and resolved against a vault at the point of use.

A breach yields names, not access

A database backup, a read replica, or a compromised reporting connection returns the names of secrets and nothing that opens anything.

No silent downgrade

A misconfigured secret name causes a refusal, not a fallback. A webhook that cannot be signed is not sent unsigned.

Never logged, never returned

Secrets are never written to logs, never returned to an API caller, and never placed on a visible record.

Authentication & tenant isolation

Every Layer Checks the Tenant

Isolation is not a single wall - it is enforced at three separate layers, so one weak point does not become the whole boundary.

Between services

Every internal call carries an HMAC-signed tenant assertion. The API refuses to start without a signing key configured - an unconfigured key is treated as a hard failure, not a soft one.

Inbound from your systems

The submission endpoint authenticates with a per-source API key, compared in constant time. An unknown key, a paused source and a wrong key all return the same response - the endpoint cannot be used to enumerate what exists.

In the database

Every table carries a tenant identifier and every stored procedure filters on it. Tenant scoping is enforced at the data layer, not only in application code.

Getting data in and out

Routes and How Each Is Authenticated

The full shape of each route is on the Developers page. This is the authentication behind each one.

Route Direction Authentication
Watched folder / file share In Filesystem or share permissions you control
Mailbox In App registration with application permissions, scoped by an Application Access Policy, plus a sender allow-list
Platform API In Per-source API key
Webhook Out HMAC-SHA256 signature over the exact bytes sent
Report files Out Written beside your documents, in storage scoped to your tenant
Mailbox permissions are scoped deliberately. Without an Application Access Policy, a mail-read permission granted at the application level can reach every mailbox in a tenant - far more than this needs. We scope it to the specific mailbox, and recommend the same discipline on your side.
Logging and evidence

A Record That Cannot Be Quietly Rewritten

The parts of the record that matter to an audit are append-only by construction, not by convention.

Decisions are append-only

A decision cannot be revised after the fact. A reversal is a new entry, never an edit. Accepting a case that carries blocking findings requires a stated reason, enforced in the database rather than in a screen.

A "Sent" record means it was sent

A communication marked Sent means a message was actually attempted and accepted for delivery. If it did not go, the record says Failed and carries the reason - it cannot claim a sender was told something they were not.

Every ingestion pass is recorded

What was processed, what failed, and why - queryable, not something you find by opening a folder on a server.

Rules keep their identity

Editing a rule does not erase what it was. A finding recorded years ago still resolves to the rule that raised it, in the wording it had at the time.

Availability and abuse

Guardrails on the One Door
That Faces the Internet

The platform submission endpoint is the only route a party outside your network reaches directly.

Rate limiting

Partitioned per API key, so one caller looping on a rejected key cannot spend another tenant's allowance or saturate extraction for the deployment.

Health endpoint

Reports whether the database answers, and returns only the exception type - never the message, which would turn a health probe into reconnaissance.

Duplicate delivery is safe

Recognised by content hash. The same document sent twice is not attached to a case twice, and a re-sent bundle does not double a line-item table.

Stated plainly

What Is Not Yet Built

A security document that only lists what is finished is worse than no document, because it gets relied on. These are real gaps, not hedging.

No per-user access audit

We record what the system did. We do not yet record which person opened which case.

No automated retention or erasure

There is no scheduled deletion and no automated flow for a subject erasure request. Removal today is a manual operation.

Per-caller signing keys

Any holder of the internal signing key may act for any tenant - correct for our own services, not yet offered for an agent running on your own infrastructure.

No penetration test or certification held

No independent penetration test has been commissioned. SOC 2 and ISO 27001 are not currently held. Controls are designed for these frameworks; certification is not claimed.

Configurable masking is newly shipped

The catalogue, the per-tenant selection and the preview are recently released. The service beneath is tested; if you configure masking, use the preview and check a real sample before relying on it.

A short propagation window on storage changes

Repointing a tenant's storage takes effect across services within thirty minutes, not instantly. Documents ingested inside that window land in the previous account.

None of this is disqualifying by itself - but it should be part of your decision, not discovered after it. If any of these is a blocker for your review, say so early. Several are short pieces of work, and the honest answer may be a date rather than a no.
Questions we expect

Answered Short

  • Does your AI decide whether to pay my claim? No. No model call is in the decision path. Rules are deterministic code.
  • Does my data train your models? No. Content is sent to the model provider for extraction only, is not used for training, and is not retained by us for that purpose.
  • Can we decide what gets masked? Yes. Seventeen identifiers across nine markets, chosen on a screen, with a preview showing exactly what a model would receive before you commit. You select from a tested catalogue rather than writing your own expressions.
  • Can you run without sending anything to an AI service at all? Yes, for structured data. A data contract template reads a payload by declared path - no model call, no confidence score.
  • Can our documents stay in our own storage account? Yes - every operation, not only the upload.
  • Can they stay in our region? Yes, by pointing at a storage account in that region.
  • What happens if you are breached? The database yields secret names, not secrets. Storage credentials live in a vault. A tenant on their own storage account can revoke our access unilaterally, without our involvement.
  • Can we get our data out? Yes. Documents are files in a container. Findings, cases and audit records are relational data and can be exported.
  • Can we get it deleted? Manually, today. There is no automated retention or erasure mechanism yet - see above.
  • Who else can see our data? The cloud platform sub-processors used for storage, database and extraction, and no one else. There is no analytics, telemetry or support tooling that receives document content.

Send This to Your Security Team

A fuller written Security Overview goes deeper into each control and states current build status against SOC 2 and ISO 27001 control families - written for a reviewer, not a buyer.