Plugs into what you already run, with nothing in between you cannot audit.

Records come in through connectors your firm can read, are checked against official registers, and go out through six routes for systems and seven for AI agents. Every route says who is asking and where each value came from.

A connector is a settings file, and nothing is written until a rehearsal has run.

A connector written as software becomes software your firm has to maintain. A connector written as a settings file is a document your firm can read, compare and approve.

  1. Describe

    The settings file: which system, which fields, how to tidy each one, and what it is.

  2. Validate

    Check it makes sense. Every field is either mapped or deliberately ignored; nothing is silently dropped.

  3. Rehearse

    Run it against real data and write nothing. It shows what would change. A connector that has never been rehearsed cannot write.

  4. Run

    In pieces, resumable. Retries, failures queued, and a record of the run kept.

Working examples included

Elite 3E and a generic CRM come as working connectors that already know what a practice management system's client, matter and party tables look like.

Spreadsheets, for everything else

Uploads with reusable mapping templates and an Excel round-trip, because a real share of a firm's reference data lives in a spreadsheet.

Loads that survive a bad night

Work is done in pieces, with save points and retries. A load that fails at three in the morning picks up where it stopped, and anything it could not process is visible.

"Verified" means a date and a source, not a tick in a box.

Every check against Companies House, CIPC or OpenCorporates is kept on file: what was checked, against which authority, when, and what came back. A registration number that stopped matching last month becomes a data quality problem to deal with, not a value that quietly goes stale.

Companies House

United Kingdom. Legal names, registration numbers and registered offices, with the date each was confirmed.

CIPC

South Africa. The Companies and Intellectual Property Commission register, checked the same way.

OpenCorporates

Multi-jurisdiction. Used where a national register has no usable interface, and recorded as the source it is.

Six ways in, and each says who is asking.

Looking up "which client is this, really?" is the busiest request, and the one that makes Datum useful to every other system in the firm. Nineteen times in twenty it answers in under 200 ms, measured on our test set. How we measure

RouteWhat it answers
GET /v1/xref/{system}/{key}Turn one system's reference into the master one
GET /v1/records/{master_id}The full record, as at any date you choose
GET /v1/searchSearch, with permissions applied as it runs
GET /v1/changesWhat has changed, for systems keeping in step
GET /v1/extracts/{entity}Bulk extracts, saying which columns were withheld
GET /v1/schemaThe data model, filtered to what you may see

Looking up a client: the request

GET /v1/xref/elite3e/LON000412
Authorization: Bearer ••••••

Response

{
  "master_id": "01936f2a-…",
  "entity": "party_organisation",
  "attributes": {
    "legal_name": "Pemberton Holdings Ltd",
    "country": "GB"
  },
  "provenance": {
    "legal_name": {
      "source": "elite3e", "record": "LON000412",
      "rule": "highest_trust", "pinned": false,
      "selected_at": "2026-08-24T02:14:07+00:00"
    }
  },
  "as_at": "2026-08-24T09:00:00+00:00",
  "contract_version": "1.0"
}

Saying where a value came from is not optional

Every field, on every response. Without it, the system reading has no way to judge how far to trust a value. Datum refuses to send a response that is missing it.

"Not found" does not mean it is not there

It means it is not available to you. A matter that does not exist and a matter behind an ethical wall look exactly the same, because telling them apart would give the game away.

Totals are the totals you may see

Every list carries suppressed and complete. If complete is false, that total is not the firm's total, and no system should present it as one.

One permission never implies another. An administrative permission does not grant a read permission. Every system that connects gets its own credentials, including the AI integration.

Seven questions an agent can ask, and one thing it can propose.

An AI agent asks through the Model Context Protocol (MCP), the open standard AI tools use to call other systems. It reads with its own identity, through the same checks as a person, and gets the same record with the same source attached. The only write is a proposal into the review queue.

ToolThe question it answers
get_entityLook up a record
search_entitiesSearch, with permissions applied as it runs
resolve_entityWhich client is this, really?
classifyClassify this piece of work
get_matter_contextEverything about a matter, as at a date
get_corporate_groupThe corporate group a company belongs to
propose_contributionPropose something new, into the review queue
Illustrative exchangeNorthgate Wells LLP · the demonstration firm
Request — from a Trovato agent
POST /mcp
Authorization: Bearer ••••••  (trovato-agent · mdm:read)
{
  "jsonrpc": "2.0", "id": 41,
  "method": "tools/call",
  "params": {
    "name": "get_matter_context",
    "arguments": {
      "matter_number": "24-0417",
      "as_at": "2026-03-14"
    }
  }
}
Response — as the firm held it on that day
{
  "result": {
    "matter_number":  "24-0417",
    "client":         "Pemberton Holdings Limited",
    "jurisdiction":   "England and Wales",
    "classification": "Corporate — Mergers & acquisitions",
    "restricted":     false,
    "parties": [
      { "name": "Pemberton Holdings Limited", "role": "client" },
      { "name": "Cavendish Technologies Ltd",  "role": "counterparty" }
    ],
    "personnel": [
      { "name": "A. Wainwright", "role": "responsible partner",
        "from": "2024-02-12", "to": null }
    ],
    "provenance": {
      "client":       { "source": "companies_house", "selected_at": "2026-08-14T02:14:07Z" },
      "jurisdiction": { "source": "elite3e",         "selected_at": "2026-08-24T02:14:07Z" }
    }
  }
}

A matter behind a wall and a matter that does not exist get the same reply, byte for byte. The transport cannot tell the agent the difference either.

{"result":{"isError":true,"content":[{"type":"text","text":"not found"}]}}
Datumpushes on the firm's schedule Directory identitylist of matters · walled ones flagged Detail identitymatter content · screened by every wall ETHICAL WALL 24-0417 · restricted not found Trovatosees the name only Trovatono walled content, ever NOTHING THAT COULD BE READ AS A CLEARANCE EVER LEAVES. A NAME CROSSES; CONTENT NEVER DOES.

Live in Trovato.

trovato.ai · legal operations platform · lawyers run matters with supervised AI agents

Intake, already filled

When a lawyer opens a matter in Trovato, the client, the parties and the governing jurisdiction come from Datum. Nobody retypes them, so nothing is mistyped. Retyping is where wrong data enters.

Agents ask back

Trovato's Matter Agents ask Datum for matter context as they work, with their own credentials. Every field comes back with its source, which is what Trovato's Citation Firewall needs before an answer can ship.

Findings return as proposals

What an agent learns from a document goes into Datum's review queue as a suggestion. A reviewer decides. The record never changes on an agent's say-so.

Datum pushes. Trovato never reaches into your network. The firm owns the schedule, can see what left, and can stop it leaving without asking anyone.

Two identities, screened differently. A directory identity publishes the list of matters, with walled ones marked restricted. A detail identity publishes matter content and is screened by every wall. A walled matter's name crosses; its content never does. Nothing that could be read as a clearance ever leaves.

Switch it off and the route does not exist.

Not disabled, absent. With the integration off there is no agent route in the software at all. The whole platform builds and passes every test that way, and proving it is one of the eight checks that block a release.

Runs wherever your firm needs it to run.

In your own data centre, or as a managed single instance. Neither is a lesser product.

In your own data centre, without a lesser product

The typefaces are served by Datum itself, and no screen fetches anything from an outside company. A machine inside your network has no route out, and the product does not quietly fall back to Arial.

A database doing real work

PostgreSQL 16, ninety-one tables. The rules that stop two conflicting versions of the same thing existing at once are enforced by the database itself, not by application code a simultaneous write can slip past.

Joins, not rebuilds

Scheduling, loading, transforming, search, sign-in, permissions and audit trails are joined onto rather than rewritten. Your technology team keeps the components it already runs.

  • Airflow
  • dlt
  • dbt
  • OpenSearch
  • Keycloak
  • OpenFGA
  • Marquez

Two AI connections, deliberately kept apart

One for the people building Datum and one for the running product, so a convenience for developers can never reach live data. A firm that wants no AI model near its client data runs Datum without one and loses nothing else.

Bring your systems to the walkthrough.

Tell us your practice management system in the form and we will have the right connector open: the settings file, the rehearsal run, and the six ways another system reads the result.

Book a demo

Questions before booking? Use the contact form.