AI-Agent Structured Tool Access Automation: The Body Can Claim Anything; the Session Decides

Letting an AI system act on someone's behalf raises one specific question before any other: who, exactly, is it allowed to be?
A dedicated integration surface for a connected AI product to read and act on a specific person's data is a genuinely useful capability — and its single most consequential design decision, before any question of WHAT it can do, is WHO it is allowed to do it as. A request format that lets the caller specify which person's data to access, trusted at face value, effectively hands identity itself to whichever system is calling. The safer alternative — deriving identity strictly from the caller's own already-authenticated session — sounds obviously correct once stated, but still leaves a real design question: what should happen if a request ALSO includes a claimed identity that disagrees with the session? Ignoring it silently is a common, understandable choice. It is also the wrong one, because it destroys the one piece of evidence that something unusual was attempted.
How the underlying problem shows up before you fix it
An integration surface intended for a connected AI system accepts a claimed identity or user reference as part of the incoming request itself, rather than deriving the acting identity exclusively from the caller's own already-authenticated session.
A mismatch between a request's own claimed identity and the identity the system can actually verify (from a session, token, or credential) is silently discarded or ignored, rather than being treated as its own distinct, reportable event — leaving no record that a mismatch was ever attempted.
An operation exposed to an external AI system for reading data shares a code path, a permission model, or a database credential with an operation that can WRITE data — meaning a defect or a misconfiguration in one surface has a mechanism available to cause damage well beyond what that surface was meant to expose.
A response describing "how much" or "how many" of something collapses a genuine zero (there really are none) and the absence of retrievable data (something could not be determined, or nothing applies) into the identical value — making a consuming system unable to tell "confirmed nothing" apart from "unknown, or failed."
Two structurally similar features (an existing internal capability and a newly-built external-facing one serving a related but distinct purpose) are named so similarly — differing only by translation or a synonym — that maintaining either one risks someone editing, or reasoning about, the wrong one.
How a read-only AI surface decided who it is allowed to be, and what to do when a request disagrees
Centriu Vértice built a dedicated, versioned integration surface specifically for a connected AI product to call structured, read-only operations against the product's own data, scoped to one specific member's own visible information. The surface exposes exactly two functions: a discovery endpoint (`GET /api/centriu/capabilities`) that names what is currently callable, and a single execution endpoint (`POST /api/centriu/tools/[name]`) that actually runs one of those named operations. The fix's own account is explicit about a deliberate naming decision behind this: the product already has an entirely separate internal chat feature, with its own guard logic and its own dedicated backend function, built for a different purpose — and giving this new, external-facing surface a name that differed from that existing feature only by language (an English word standing in for the Portuguese one already in use) would have created two features indistinguishable except by which language someone happened to be reading in, a structural trap for whoever maintains either one later. The new surface uses its own distinct name throughout.
The single most consequential decision inside this surface governs identity: which specific member's data a given call is allowed to touch. That identity is always derived from the caller's own already-authenticated session — obtained through the platform's standard session-resolution mechanism — and never from any value the incoming request body itself might supply. A request body MAY also include its own claimed identity value, and that field is not simply rejected outright the moment it appears: if present and it agrees with what the session already establishes, the call proceeds normally, treating the field as a harmless, redundant confirmation. If present and it DISAGREES with the session — the request body claims to be acting as somebody other than who the session says is actually calling — the request is refused outright with an explicit, specific error, and, just as importantly, that specific disagreement is written to an audit trail rather than simply discarded.
The fix's own account explains why silently ignoring a mismatched claim would have been the wrong design, even though the caller's actual permission would end up correctly restricted to the real session identity either way: silently ignoring the mismatch would still LEAVE NO RECORD that an attempt to claim a different identity had occurred at all — a request that innocuously supplies a matching identity and a request that suspiciously attempts to claim someone else's identity would look identical after the fact, because both would simply proceed as the real, session-derived identity with no distinguishing trace left behind. Refusing the mismatched request outright, and specifically logging that refusal, means a genuine attempt to make the system act as somebody else leaves a mark for whoever is watching for exactly that pattern — rather than disappearing into an ordinary-looking, successful call.
Every single operation reachable through this surface is read-only by construction, not merely by convention or policy: the underlying implementations expose only counting a result, reading one specific named record, or invoking one specific, pre-approved database function chosen from a fixed, named list — with no code path anywhere in the surface capable of performing a write of any kind, and no mechanism through which the calling AI system could submit its own arbitrary SQL or free-form query. A defect or a misconfiguration on this surface has, by construction, no mechanism available to alter any actual data, regardless of what a calling system might attempt to request.
A further, deliberate design choice governs how every response describes the absence of underlying data: a specific, explicit "no data" state is returned whenever there is genuinely nothing to report — for instance, a member whose real, live connection count in the network is actually zero — kept structurally distinct from a bare numeric zero a real, successful count could also legitimately produce. The fix's own reasoning is that collapsing the two into one identical-looking value would leave an AI system consuming this surface with no way to tell "there is confirmed, genuinely nothing here to report" apart from "something went wrong, or a capability didn't run" — a distinction that matters specifically because an AI system reasoning over this data has no other independent way to notice the difference on its own.
What is actually built today
A dedicated, versioned discovery-and-execution surface (`GET /api/centriu/capabilities`, `POST /api/centriu/tools/[name]`) lets a connected AI system call named, read-only operations against Centriu Vértice's own data — kept structurally and by-name separate from an entirely different, pre-existing internal chat feature.
The identity a given call is allowed to act as is always derived from the caller's own authenticated session — never from a value the request body supplies — with a matching body-supplied identity treated as a harmless, redundant confirmation.
A request body claiming an identity that DISAGREES with the session is refused outright with an explicit error, AND that specific disagreement is written to an audit trail — rather than being silently discarded, which would leave no record the mismatch was ever attempted.
Every operation exposed through this surface is read-only by construction — counting, reading a named record, or invoking one pre-approved database function from a fixed list — with no code path capable of writing data and no mechanism for the caller to submit arbitrary SQL.
Every response distinguishes a genuine, confirmed zero from the simple absence of data, returning an explicit "no data" state rather than a bare zero that would otherwise be indistinguishable from a failed or incomplete capability.
A request that claims to be someone else, and the record it leaves behind (illustrative framing of the actual designed mechanism)
A call to this surface that supplies no claimed identity in its body, or one that matches the caller's own actual session, proceeds normally and returns data scoped to that real, session-derived member. A call that instead includes a claimed identity belonging to a DIFFERENT member than the one the session actually establishes is refused outright with an explicit error — and, distinct from simply failing silently, the specific attempt is written to an audit trail naming both the identity the session actually confirmed and the different identity the request had claimed, giving whoever reviews that trail a concrete, attributable record that an identity mismatch was attempted, rather than an ordinary-looking entry indistinguishable from any other successful call.
What changes operationally
Centriu Vértice now offers a dedicated, read-only integration surface for a connected AI system, with identity strictly derived from the caller's authenticated session, a mismatched identity claim refused and specifically audited rather than silently discarded, every exposed operation read-only by construction, and every response honestly distinguishing a genuine zero from an absence of data.
When this is not the right fit
This automation governs the identity-verification and read-only scope of Centriu Vértice's own dedicated AI-integration surface — it does not add any write capability for a connected AI system, does not replace or merge with the product's separate, pre-existing internal chat feature, and is specific to a product that needs a real, verifiable member identity behind every call; a purely anonymous or organization-wide AI integration with no per-person data to scope would not need this exact mechanism.
Silently ignoring a mismatched identity claim vs. refusing it and recording it
Deriving the acting identity strictly from a caller's authenticated session, while silently ignoring any identity a request body separately claims, would still correctly restrict every call to the real, verified identity — the actual permission outcome would be identical to refusing it outright. The difference is entirely in what happens to the EVIDENCE: silently ignoring a mismatch leaves a genuine attempt to claim someone else's identity looking exactly like an ordinary, successful call after the fact, while refusing it outright and writing the specific mismatch to an audit trail leaves a concrete, attributable record for whoever is watching for exactly that pattern — at the cost of one additional check and one additional log write per call.
Related systems
Main system: Centriu Vértice. Complementary when relevant: Centriu Axiom.
What it does NOT do
- Does not give a connected AI system any ability to write, modify, or delete data on Centriu Vértice — every operation exposed through this surface is read-only by construction, with no code path capable of performing a write.
- Does not allow a request to act as any identity other than the one its own authenticated session establishes — a body-supplied identity is checked against the session, never trusted in place of it, and a mismatch is refused outright rather than silently accepted or silently ignored.
- Does not merge with or replace Centriu Vértice's separate, pre-existing internal chat feature — the two are deliberately distinct systems serving different purposes, kept apart specifically to avoid the maintenance risk of two similarly-named features.
- Does not accept arbitrary, caller-supplied SQL or free-form queries of any kind — every callable operation is one specific, pre-approved function chosen from a fixed, named list.
- Does not overlap with the other two fixes shipped in the same commit (the write-surface reduction, and the authentication failure classification) — both are covered on their own companion pages and are architecturally unrelated to this AI-integration surface.
Security and governance
Centriu Vértice's dedicated AI-integration surface derives the acting identity strictly from the caller's authenticated session, refuses and audits any request whose body claims a disagreeing identity, exposes only read-only operations by construction, and distinguishes a genuine zero from an absence of data in every response. Any personal data referenced in member records remains subject to Brazil's LGPD (Law No. 13,709/2018). Full detail on access control lives at /governanca and /iso.
Pricing and contracting
Available on a single plan. Values and terms come from the official pricing table at /precos (Centriu's central source — never restated here).
Frequently asked questions
Can a connected AI system write or change data through this surface?
No — every operation exposed is read-only by construction (counting, reading a named record, or invoking one pre-approved read-only database function). There is no code path on this surface capable of performing a write, and no mechanism for the caller to submit its own SQL.
What happens if a request body claims a different identity than the session?
The request is refused outright with an explicit error, and the specific mismatch is written to an audit trail — deliberately not silently ignored, because silently ignoring it would leave no record that an identity-mismatch attempt had ever occurred.
What happens if the request body's claimed identity matches the session?
The call proceeds normally — a matching claim is treated as a harmless, redundant field with no effect on the outcome, since the session identity was already what determined the result.
Why does this surface distinguish "zero" from "no data"?
Because a bare zero could mean either "confirmed, there are genuinely none" or "something could not be determined" — collapsing the two would leave an AI system reasoning over the response unable to tell a real, confirmed result apart from a failure or an unsupported capability.
Is this the same feature as Centriu Vértice's internal chat, or as Centriu Axiom's capability registry?
No to both. It is deliberately separate, by design and by name, from Vértice's own pre-existing internal chat feature. It is also architecturally distinct from Centriu Axiom's own cross-product capability registry (covered on a separate page) — this surface is specific to Vértice's own read-only data and its own session-identity enforcement.
What does Centriu Vértice cost?
It is sold by subscription with a published starting price — exact current values are on the central pricing page.
See how Centriu Vértice lets a connected AI system read data safely
Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.