Platform

The policy each customer requires, on every request.

Alectura is a gateway between your servers and your model providers. It speaks each provider’s own API, applies the policies that match the request’s organization, user and plan, and records what it did.

Policy per customer

Your customers are named on each request by your own identifiers. Policies select them, and every policy that matches applies.

  • A policy matches by organization, user or plan, or by their absence: a request with no organization can be matched too.
  • Guardrails, limits and retention take the strictest value any matching policy sets, so adding a policy never loosens them.
  • Regions, models and connections are lists. A request starts with its own model, the environment’s region and the connections that can serve it. Each matching policy can add to a list, keep only some of it, or remove some: every add counts first, then every only and remove, so a customer’s “only the EU” can’t be undone by a plan’s add. A policy can’t add a model.
  • When a list ends up empty, the request is refused. In a US environment, a policy that keeps only the EU refuses every request it matches unless some policy, perhaps itself, adds the EU.
  • A guardrail warns, recording each finding and changing nothing, or acts on it: pseudonymizes, redacts, blocks or cuts. A guardrail set by several policies takes the strongest action. Start with warn, look at the findings, then act.
  • Replay a draft policy against past requests before saving it. With retained content the guardrails replay too; without it, the routing settings do.
  • Every version of every policy is kept, and each request records the versions it ran.

Guardrails

Guardrails inspect the parts of a request you choose: the system prompt, user and assistant turns, tool calls and tool results.

Personal data

Emails, phone numbers, card numbers, IBANs, IP addresses, national IDs, passport, driver’s license and bank account numbers, names and street addresses in seven European languages, and dates of birth in English. Pseudonymize, redact or block them, or just warn, in the request and in the answer.

A pseudonym is stable within an organization, so a conversation stays coherent across turns, and unlinkable across organizations. The real values are restored in the response as it streams.

Secrets

API keys and credentials in a request are redacted or blocked before they reach a provider, or warned about.

A detected secret is never stored, whatever the action. The record holds only its keyed hash.

Prompt injection

Checked alongside the provider call, so it adds no wait in front of it. Warn, or cut the response.

A cut stream ends in the provider’s own error event, which its SDK already raises.

Illegal content

Requests for help with a crime, tool results included: violent and non-violent crimes, sex crimes, child sexual exploitation and weapons. Warn, or block them before the provider sees them.

It judges the request, not the answer.

Every check runs in the gateway, with no model call. The guardrails page has how accurate each one is, measured on public datasets, how each fails, and what it may cost in latency.

  • Content nothing can inspect, such as an image, is recorded as uninspected, or blocked if the policy says so. A verdict never claims more than its coverage.
  • A block that’s resent in the next turn is scanned once, and its findings are counted once.
  • Signed or encrypted reasoning from a provider passes through byte for byte.

Regions and routing

Each region runs a full copy of Alectura, and an environment is pinned to one when it’s created. TLS ends there, inspection and edits happen there, and everything kept about the traffic stays there.

RegionGateway
USus.gateway.alecturalabs.com
EUeu.gateway.alecturalabs.com
Australiaau.gateway.alecturalabs.com

A request goes to a provider of its own format, and no format is ever translated into another:

ProviderFormatWhere it processes
OpenAIChat Completions, Responses and embeddingsOpenAI’s EU or global endpoint
AnthropicMessages and token countingAnthropic’s API
Amazon BedrockConverse, and Anthropic’s Messages for ClaudeThe Bedrock region or inference profile of your connection
Google GeminiGemini’s generateContentGlobal, because the Gemini API has no regional endpoint
OpenRouterChat Completions, Responses, Messages and embeddings, for the models of many providersOpenRouter’s global endpoint, or its EU or US endpoint on a Business or Enterprise plan
OpenAI in other regions, such as the US and AustraliaHttps://us.api.openai.com/v1Https://au.api.openai.com/v1 is global, as it can process elsewhere
Bedrock application inference profilesA connection calls a model through your profile once its test reads the profile’s model and regionPolicies read the profile’s ARN as its model (application_inference_profiles)
Azure OpenAIChat Completions, Responses and embeddings, by deploymentYour resource’s area, or global
Google Vertex AIGemini’s format for Google’s models, Messages for ClaudeYour project’s location
  • A request may be served by the environment’s connections and by its organization’s own, which go first within their region. Policies add, keep only or remove provider regions and connections, and can number what they add: lower numbers are tried first, then unnumbered ones, and ties are picked at random.
  • A failure before the provider’s first byte moves the request to the next candidate, for up to three attempts. A connection that keeps failing cools down and is skipped.
  • Region, model and retention constraints fail closed: when nothing allowed can serve a request, it’s refused, never sent somewhere else.
  • Every attempt is recorded, with the region that served it.

Models and retention

Allow the models each customer approved, choose whose connections serve it, and keep only what it lets you keep.

  • A policy keeps only the models a request may use, or removes some. An id without a date matches every dated version of it, on every provider that serves it.
  • Each connection declares its provider’s data terms: whether the provider retains content, and whether it trains on it. Undeclared counts as retaining.
  • Content is kept for none, 7, 30, 90 or 365 days, per policy. With none, a request to OpenAI says store: false, so OpenAI doesn’t keep the response to retrieve later; its abuse monitoring still keeps data unless your OpenAI account has zero retention.
  • With zero retention, Alectura keeps verdicts, counts and keyed hashes, and never content. Records are kept 400 days whatever the content’s retention.
  • Each organization’s content is sealed with its own key, so deleting the organization makes its content unreadable at once.

Limits

Rate, token and spend limits, per user or per organization, so no plan can cost more than it earns.

  • Requests and tokens per minute or per day; spend per day, week or month.
  • A per-minute limit refuses with 429 and Retry-After. A spent budget refuses with 402, which SDKs don’t retry, until the period resets.
  • A request reserves its estimated tokens and cost when it’s admitted, and settles them from the provider’s usage when it ends.
  • A maximum output can be lowered, or set where a request sets none.
The refusal names the limit
"limit": {
  "kind": "spend",
  "per": "user",
  "period": "day",
  "amount": "2.00",
  "used": "1.9962",
  "requested": "0.0079",
  "resets_at": "2026-09-30T00:00:00Z"
}

Abuse

Abuse of a free tier shows across requests, not in any one of them. Alectura attributes every request to a user and watches for the patterns.

  • Signals are observations drawn from many requests, per user and per organization, each with a score and the requests behind it: repeated injection attempts, probing for secrets, a template shared between accounts.
  • Suspend a user or an organization by hand, or let a policy suspend a user when a signal’s score reaches the threshold you set. Every gateway refuses them within 10 seconds.
  • A request that names a user or an organization reaches OpenAI, Anthropic and Bedrock with a safety identifier: a keyed hash of the user, or of the organization when there is no user. When a provider acts on abuse, it acts on one of your users, not your whole account. Gemini’s API has no such field, so it gets none.
  • Assessments: upload request logs in OpenAI’s Chat Completions or Responses format, Anthropic’s Messages, Gemini’s generateContent or Bedrock’s invocation logs, or just each request’s metadata as JSONL or CSV, and get back a report on the users that look abusive.

Evidence

The answer to the AI section of a security questionnaire, per customer, from what actually happened.

  • An evidence pack per organization, as PDF and JSON: the effective policies over time, the connections used, the coverage, and the findings.
  • Every request records the policies that matched it, at their versions, and the region and connection that served it.
  • Reading a request’s content is itself recorded, as an event your team can see.
req_01M3PQJ64T…modified
Organization
globex
User
u_4821
Plan
enterprise
Model
claude-sonnet-5-5
Region
eu
Policies
Baseline v3 · Globex v7

Findings

  • emailpersonal_datapseudonymized ×2
  • phonepersonal_datapseudonymized ×1
  • aws_access_keysecretsredacted ×1

Coverage

  • systemsecrets · personal_data
  • usersecrets · personal_data · prompt_injection
  • tool_resultsecrets · personal_data · prompt_injection
  • attachmentimages_uninspected
An example record, simplified from the API’s.

Events and webhooks

What happens in an environment is an event, listed by the API and delivered to your endpoints, so your product can act on it.

user.suspendedA user was suspended, by hand or by policy
signal.detectedA pattern across a user’s or organization’s requests
request.blockedA guardrail or the policy refused a request
request.cutA guardrail stopped a response mid-stream
limit.threshold_crossedA limit passed 80% or 95% of its amount, or started refusing
policy.updatedA policy changed, with its new version
request.content_readSomeone on your team read a request’s content
evidence_pack.completedAn evidence pack is ready to download
  • Each delivery is signed with HMAC-SHA256 in Alectura-Signature, with a timestamp, and carries a delivery id that stays the same across retries.
  • A delivery that fails is tried again after 1 minute, 10 minutes, 1 hour and 12 hours.
  • A rotated secret signs alongside the old one for 24 hours.

Dashboard

Everything above, for every environment, at app.alecturalabs.com. Sign in with an email link, Google or Microsoft, or your team’s SSO.

Requests

Live, filtered by organization, user, verdict, model, connection, policy or finding, with each one’s content where retention keeps it.

Findings

What each guardrail found, with samples, and your team’s labels on them: false positive or confirmed.

Signals and suspensions

Who looks abusive and why, with the requests behind it; suspend or lift in one step.

Policies

Every version kept, and a draft replayed against past requests before you save it.

Connections and keys

Provider accounts with their data terms, and the sending and management keys your servers and scripts use.

Evidence and assessments

Evidence packs per organization, and abuse reports from logs you upload.

Roles decide who sees what: admins manage the team, developers configure, viewers read. The dashboard runs on the management API, which your own scripts can call too.

Try it on your own traffic.

Start with guardrails that warn, and see what they find.