Security and data

Where it lives, who can reach it, and what happens when something breaks.

The answers below are the ones procurement asks for in writing. We would rather you read them here than extract them over six weeks.

Where the data lives

Managed Postgres and container workloads, in a region named in the contract. Object storage and CDN sit behind the same boundary. Every environment is separated at the database level, not by a flag in the application.

Who can reach it

Every request carries a verified identity, and every query is scoped to that identity. A forged reference to another organisation's record matches zero rows and returns a not-found, rather than someone else's data. Each service runs under its own least-privilege account; credentials live in a managed secret store and never in code.

What is written down

Consequential actions leave a trail: who asked, what was asked for, which gate allowed it, and what came back. Built for the audit that happens two years later, when nobody remembers the week in question.

Who else touches it

A named sub-processor list, maintained rather than written once: cloud and database hosting, edge and storage, message delivery, and the model provider behind the AI layer. Supplied in full on request, with notice before it changes.

Who owns it

You own your data and the system built for you. Exit terms are written at the start, not negotiated at the end: a full export in an open format, the source, and the runbook to operate it without us.

When something fails

It fails loudly. We do not substitute a default value for a call that did not succeed, anywhere in the estate. A payment that did not go through never renders as one that did. This is an engineering rule we hold ourselves to, because a system that hides its failures is worse than one that stops.

Authorization

Three gates before anything consequential happens.

  1. 01

    Capability

    Is this action gated at all, for this caller?

  2. 02

    Value

    Reads the actual amount, so a small transfer stays frictionless and a large one does not.

  3. 03

    Confirmation

    A human confirms, with a second factor. A blocked action returns a way forward, never a dead end.

The value gate currently runs in measurement mode: it evaluates every high-value call and records what it would block, ahead of enforcement. We would rather tune a gate against real traffic than guess at a threshold and discover it in production.

Fig. 06 / Authorization

An agent that can act needs somewhere it stops.

Two requests enter. One is a search. One moves nine hundred thousand naira. They do not get the same answer.

Swipe to see the whole drawing

CAPABILITY GATEVALUE GATEPIN CONFIRMATIONOUTCOMEREQUEST ASearch for jobsReads nothing private, moves nothingREQUEST BOpen escrow, NGN 900,000Same tool a small escrow usesEXECUTESCards come backNo friction, none neededHELDVerify firstA verification card, not an errorIs this toolgated at all?Is this particularamount large?Does the humanconfirm it?B STOPS HERE

Why two gates and not one

A capability rule is about the tool. A value rule is about the arguments. Only the second can let a small transfer through and hold a large one, on the same call.

Shipped state, honestly

The value gate runs in measurement mode today. It evaluates every high-value call and records what it would have blocked, without blocking anything yet. That is the correct way to ship a gate: measure real traffic first, then turn it on.

The dashed run is the path B does not take. A held action comes back as a verification card the person can act on, never as a dead end.Value gate in measurement mode
Available on request

Sent as a pack, not assembled per request.

Request the pack
  • Capability statementPDF
  • Sub-processor listPDF
  • Data processing termsPDF
  • Architecture overviewPDF
  • Incident and support termsPDF
  • Reference contactsOn request
Next

Bring the objections. A technical review puts your engineers and ours on the architecture, the data boundary and the integration surface, before anything is scoped.