Skip to content
BC Consulting

BlogClinical Research posts

Headless IRT: Where Does Authority Live?

By Bryan Clayton4 min read

  • irt
  • rtsm
  • biotech
  • pharma
  • ai
Architecture diagram. A scoped credential carrying role, study, site, and blinding feeds an adapter, which has no authority of its own. The adapter, the site web interface, the Study Manager interface, and a potential EDC integration all call one versioned IRT API. The API calls a shared core that owns scope and blinding, study rules, randomization and dispensing, configuration versions, and audit, which writes to an append-only Postgres record.

Every IRT conversation eventually reaches the same question, usually late and usually framed as a question about a screen: who is allowed to do this, and where is that rule actually written down? In a lot of systems the rule lives in several places at once. Part of it is in the role configuration, part of it is in which buttons a given user can see, and part of it is in a study-specific instruction sheet nobody has opened since go-live.

A headless architecture answers the question in one place. Authorization, the trial rules, blinding, and the audit record sit behind the API, inside the engine. Everything that a person or a machine touches is a client of that engine. A website is a client. A middleware integration is a client. An AI agent is a client. Each one presents a credential, and each one receives exactly what that credential permits.

I recorded a proof of concept to show what that looks like in practice, using OpenRTSM as the demonstration vehicle and fictional subjects throughout. It is a demonstration of an architectural idea, not a validated production system.

Headless IRT demonstration: screening subjects through the API, then reading the same subject with a blinded and an unblinded credential. Proof of concept using fictional data. Watch on YouTube.

Using a screen to demonstrate a system that has no screen

The first objection I get is that a video of a user interface is a strange way to argue for headless architecture. It is the right instinct and it points at the wrong conclusion. Headless does not mean there is no screen. It means the screen holds no authority. The web interface in the recording calls the same API a script would call, with a credential of its own, and it can do nothing that credential does not allow. Take the interface away and the engine is unchanged. Take the engine away and the interface can do nothing at all.

ChatGPT is a second client, not a second system

In the recording I also reach the same engine from ChatGPT through MCP tools, using a scoped credential issued for that purpose. The agent has no privileged path. It calls the same endpoints, under the same authorization checks, and its actions land in the same audit record as everything else. If the credential is blinded, the agent is blinded, whatever it has been asked to do.

Be accurate about what the recording proves and what it does not. I screened ten fictional subjects through ordinary API calls, and I read the same subject twice, once with a blinded credential and once with an unblinded one. Part of the planned workflow progression stopped partway through when a ChatGPT safety check interrupted it. So the boundary held and the calls worked; unattended end-to-end operation is not something this recording demonstrates.

Omitting the field beats hiding the column

The blinded read is the part I would ask you to watch twice. The restricted fields are not greyed out, and they are not present in the response and styled away. They are absent from the payload the server returns.

A hidden column is a presentation decision, and presentation decisions are reversible by anyone who can open the browser tools, read the network tab, or call the endpoint directly with the same session. A field the server never sends cannot be recovered by any of that. The blind is enforced at the point where the data is assembled, which means every client inherits it, including the ones nobody has written yet.

AI is optional to this

None of this depends on an agent. The same engine serves a scheduled integration, a depot's inventory system, a CRO's portal, or one clinical supply manager with a browser. AI is one more client, useful when the work is conversational and exploratory. What the architecture buys you is that a new client is cheap and safe to add. If the authority lives behind the API, adding an interface is an integration problem. If it lives in the interface, adding one is a revalidation problem and a risk decision.

What this does not settle

A cleaner boundary does not remove the work. The shared core still has to be validated, and so does each integration that reaches it, because a correct engine called incorrectly still produces a wrong randomization. Accountability needs a named human behind every credential, including the ones issued to agents, so the audit record answers who as well as what. Credential management becomes the control surface, which makes issuing, scoping, rotating, and revoking credentials a study start-up activity with an owner. And a new interface has to earn its place. If a conversational client does not make a real workflow faster or less error-prone, it is a demonstration, not a deliverable.

Three questions to put to your own stack this quarter. If your front end disappeared, what trial logic would disappear with it? When a blinded user's screen hides a treatment arm, is that value absent from the API response, or only from the page? And for each integration that writes to your IRT today, whose credential is it using, and could you revoke it this afternoon without a support ticket?

Where would headless IRT help your team?

I work with sponsors, CROs, and IRT vendors on architecture reviews, integration design, and honest assessments of whether a new interface earns its place in a workflow. Book a call or send the note below, and tell me which system you are working with and which part of it you keep having to explain.

Required. We do not share your details, and we reply within one business day.