Wayreeve

Set it up, then see the proof

Wayreeve Gateway runs in your environment and decides, for every AI request, which provider may see which data. Part 1 shows how you set it up in the console. Part 2 sends five requests and shows the record each one leaves. Every screenshot comes from a real Gateway console with synthetic data.

  1. Set it up
    1. Requests go only to providers you connect
    2. Sensitive data goes only where your contracts allow
    3. Secrets and identifiers are caught before anything leaves
    4. Each team gets its own models, limits and keys
  2. See it work
    1. Every request leaves a decision record
    2. Identifiers never reach the model
    3. Policy breaches are stopped and counted
    4. Usage stays inside the limits you set
    5. Tampering with the audit trail is detectable

Part 1

Set it up

Four things decide what happens to every request: the providers you connect, the rules for each class of data, the guardrails that scan content, and the projects and keys your teams use. You set all four in the console, once, and change them whenever you need to.

Set it up · 1 of 4

Requests go only to providers you connect

What you do

Under Providers, connect your OpenAI, Anthropic or OpenAI-compatible account, or a model server in your own network. Say where it processes data and whether it keeps nothing, then choose which projects may use it.

Why it matters

Your provider bills you directly, at your rates. The key is encrypted inside your Gateway and never shown again. What you declare here is what every data rule is checked against.

The Connect a provider form: Anthropic selected, named Anthropic (BAA account), API key masked, region us, zero data retention ticked, and only the Claims team project allowed to use it.
Providers, Connect a provider. The key shown is a placeholder.

Set it up · 2 of 4

Sensitive data goes only where your contracts allow

What you do

Under Data classes, pick a class such as PHI and tick the rules it needs: a BAA-covered route, zero data retention, a retention limit, allowed regions, private network only, no training use, and which kinds of deployment may serve it.

Why it matters

The rules are checked on every request, when it arrives and again before queued work runs. A request may tighten its class but never loosen it, so a mislabelled call can't slip through. Each change is saved as a new version.

The PHI class rule editor: Require a BAA-covered route and Prohibit training use ticked, maximum retention 30 days, allowed geography us being added, deployment types data zone, regional and self-hosted, with Save rules.
Data classes, the PHI rules with a region being added. The default classes are starting points; you match them to your own obligations.

Set it up · 3 of 4

Secrets and identifiers are caught before anything leaves

What you do

Under Guardrails, choose what each detector does: block the request, redact the match, or audit only, which records the match and lets the request through. Add patterns of your own, such as your member ID format, and tighten them for sensitive classes.

Why it matters

The scan runs before a request is stored or sent to any provider. Matches are recorded as codes, never as the matched text. Detectors for secrets such as cloud and API keys can never be set below redact.

Guardrails effective policy for internal requests in the Claims team project: secret detectors block by default; US Social Security number redact, payment card number block, email address audit only and a custom member_id pattern redact, all set by the project.
Guardrails, the policy in force for internal requests. For PHI requests the same project blocks Social Security numbers and member IDs outright.

Set it up · 4 of 4

Each team gets its own models, limits and keys

What you do

Create a project for the team. Set its requests per minute, requests in flight and monthly total, and choose the models it may call. Then issue API keys, each with its own models, rate, monthly spend cap and a fixed request allowance.

Why it matters

A runaway script hits its own team's limits, not everyone's. Each key shows what it has used against its allowance and its spend cap, and is refused before it goes past either.

Access and limits for the Claims team project: 120 requests per minute, 20 in flight, 20,000 a month, 1,000 batch backlog; two permitted models; two API keys, claims-intake-app with a $200 monthly cap and 14 of 5,000 requests used, and claims-summary-batch with a $500 cap and 0 of 20,000 used.
Access & limits for one team's project, with sections in between left out. The models are the synthetic ones that ship with Wayreeve; yours appear here once connected.

Part 2

See it work

Five requests and what Wayreeve does with each. These screenshots come from the Wayreeve demo: two synthetic models, small limits, the default data classes and a guardrail for a made-up medical record number. You can send the same requests yourself.

See it work · 1 of 5

Every request leaves a decision record

What you get

An answer for every request: which data class, which policy version, which route and each rule's outcome. The record is content-addressed and holds no prompt text.

What you do

Send a chat completion to demo/finch with no data-class header.

What Wayreeve does

The class comes from the demo code: internal, version 1. Its one rule, prohibit training use, passes on the route. The request runs and the response carries x-wayreeve-decision-id.

Request details for a demo/finch request: completed, class internal from the API key, route local realtime self-hosted, result permitted under policy version 2, with the rule Prohibit training use passing.
Requests, request details. The route reads "local · self-hosted" because the demo model runs inside Wayreeve; a real provider route cites its terms here.

See it work · 2 of 5

Identifiers never reach the model

What you get

The identifier is gone from the stored body, every retry and every provider call. The record names the detector and the policy, never the matched value.

What you do

Send "Patient MRN-104233 asked for a callback about her discharge plan." to demo/heron, still under internal.

What Wayreeve does

The guardrail scan runs at admission, before anything is stored or sent. The custom pattern mrn matches and the text becomes [REDACTED:mrn]. The request then runs.

The Requests list with one prompt reading 'Patient [REDACTED:mrn] asked for a callback', and its details panel showing Guardrails: Redacted before sending, Redacted: mrn, and a sha256 policy digest.
Requests, with the redacted request selected. Rows labelled phi come from requests the next step allowed.

See it work · 3 of 5

Policy breaches are stopped and counted

What you get

No caller can loosen a rule: a request may be made stricter, never looser. Refusals are counted by class and rule, so reviewers see what policy stopped, separately from what failed.

What you do

Send the same MRN text with X-Wayreeve-Data-Class: phi. Then send a harmless request labelled public.

What Wayreeve does

For phi the guardrail tightens from redact to block: HTTP 400 guardrail_blocked, reason mrn, with its own decision id. The public label is looser than the code's default: HTTP 403 data_class_widening. Neither creates a job or calls a model.

Evidence summary: 8 requests, 4 refused, policy versions v1 and v2; at admission, phi guardrails 2 and public data_class_widening 2; export buttons and a sha256 of the summary.
Usage & audit, evidence summary (owners and admins). Each refusal was sent twice. The sha256 covers the summary body; it is an integrity check, not a signature.
Not shown: a refusal by provider terms

On your own providers, a phi request routed to an endpoint without a BAA is refused with the failing rule and the published source of the term. The demo models run inside Wayreeve and meet every terms rule, so the demo can't produce that refusal. It returns 403 data_class_not_permitted, as Get started describes.

See it work · 4 of 5

Usage stays inside the limits you set

What you get

No runaway usage. Limits apply per project and per key before work is queued, with an error code your apps can act on. Keys can also carry a monthly spend cap.

What you do

Open Usage & audit. Keep sending until your demo code runs out.

What Wayreeve does

Each admitted request counts against the project's per-minute, in-flight and monthly limits and the code's own allowance. The 26th admitted request on a code gets HTTP 429 allowance_exhausted.

Usage and audit: 8 accepted requests, 740 recorded tokens, known cost estimate $0.00, 8 demo requests; current allowances 0 of 30 in the last 60 seconds, 0 of 4 queued or running, 0 of 200 batch backlog, 8 of 5,000 this UTC month.
Usage & audit, as the viewer account sees it. Cost is $0.00 because the synthetic models are free.
Not shown: spend and showback in dollars

With your own priced provider routes, you see cost per request, per project and per provider connection. The demo models cost nothing, so every amount reads $0.00.

See it work · 5 of 5

Tampering with the audit trail is detectable

What you get

An audit trail your auditors can trust. Any change to past rows, even by someone with access to the database file, breaks the chain, and signed checkpoints anchor it outside the gateway.

What you do

As an owner, open the audit log. Then run the gateway's health check, doctor, on the host.

What Wayreeve does

Every audit event and decision record is appended to a hash chain in the same transaction. doctor recomputes the chain and names the first broken entry if there is one.

Audit log with filters for actor, action and target, listing Request accepted events with request ids, times and the demo API key that sent each.
Usage & audit, audit log (owners and admins). Key secrets and tokens are redacted on every read and export.
$ node server/cli.ts doctor        # output abridged
wayreeve doctor
✓ Database              schema version 23, integrity ok
✓ Audit chain           54 entries verified, head 6a8085ed7689

The evidence export (Team and Enterprise editions) carries the same chain verification and the latest signed checkpoint, covered by the export's sha256.

Send these requests yourself

Ask us for a demo code. It allows 25 requests and comes with a read-only console sign-in.